From d3497f3287e2ef922cd448f5bf50cd5264496855 Mon Sep 17 00:00:00 2001 From: chenkai008 Date: Mon, 20 Jun 2022 14:30:25 +0800 Subject: [PATCH 1/2] add move fun Signed-off-by: chenkai008 --- .../file_access/include/file_ext_ability.h | 1 + .../file_access/include/file_ext_proxy.h | 1 + .../file_access/include/file_ext_stub.h | 1 + .../file_access/include/file_ext_stub_impl.h | 1 + .../file_access/include/ifile_ext_base.h | 8 +-- .../file_access/include/js_file_ext_ability.h | 1 + .../file_access/src/file_ext_ability.cpp | 5 ++ .../file_access/src/file_ext_proxy.cpp | 50 +++++++++++++++++++ .../file_access/src/file_ext_stub.cpp | 39 +++++++++++++++ .../file_access/src/file_ext_stub_impl.cpp | 14 ++++++ .../file_access/src/js_file_ext_ability.cpp | 31 ++++++++++++ 11 files changed, 149 insertions(+), 3 deletions(-) diff --git a/frameworks/innerkits/file_access/include/file_ext_ability.h b/frameworks/innerkits/file_access/include/file_ext_ability.h index 3ceb9fce..8eec212d 100644 --- a/frameworks/innerkits/file_access/include/file_ext_ability.h +++ b/frameworks/innerkits/file_access/include/file_ext_ability.h @@ -43,6 +43,7 @@ public: virtual int CreateFile(const Uri &parentUri, const std::string &displayName, Uri &newFileUri); virtual int Mkdir(const Uri &parentUri, const std::string &displayName, Uri &newFileUri); virtual int Delete(const Uri &sourceFileUri); + virtual int Move(const Uri &sourceFileUri, const Uri &targetParentUri, Uri &newFileUri); virtual int Rename(const Uri &sourceFileUri, const std::string &displayName, Uri &newFileUri); virtual std::vector ListFile(const Uri &sourceFileUri); diff --git a/frameworks/innerkits/file_access/include/file_ext_proxy.h b/frameworks/innerkits/file_access/include/file_ext_proxy.h index c91c7e29..2bb521df 100644 --- a/frameworks/innerkits/file_access/include/file_ext_proxy.h +++ b/frameworks/innerkits/file_access/include/file_ext_proxy.h @@ -33,6 +33,7 @@ public: virtual int CreateFile(const Uri &parentUri, const std::string &displayName, Uri &newFileUri) override; virtual int Mkdir(const Uri &parentUri, const std::string &displayName, Uri &newFileUri) override; virtual int Delete(const Uri &sourceFileUri) override; + virtual int Move(const Uri &sourceFileUri, const Uri &targetParentUri, Uri &newFileUri) override; virtual int Rename(const Uri &sourceFileUri, const std::string &displayName, Uri &newFileUri) override; virtual std::vector ListFile(const Uri &sourceFileUri) override; diff --git a/frameworks/innerkits/file_access/include/file_ext_stub.h b/frameworks/innerkits/file_access/include/file_ext_stub.h index cd79d012..101f7c55 100644 --- a/frameworks/innerkits/file_access/include/file_ext_stub.h +++ b/frameworks/innerkits/file_access/include/file_ext_stub.h @@ -34,6 +34,7 @@ private: ErrCode CmdCreateFile(MessageParcel &data, MessageParcel &reply); ErrCode CmdMkdir(MessageParcel &data, MessageParcel &reply); ErrCode CmdDelete(MessageParcel &data, MessageParcel &reply); + ErrCode CmdMove(MessageParcel &data, MessageParcel &reply); ErrCode CmdRename(MessageParcel &data, MessageParcel &reply); ErrCode CmdListFile(MessageParcel &data, MessageParcel &reply); diff --git a/frameworks/innerkits/file_access/include/file_ext_stub_impl.h b/frameworks/innerkits/file_access/include/file_ext_stub_impl.h index ac4093b0..d0247efa 100644 --- a/frameworks/innerkits/file_access/include/file_ext_stub_impl.h +++ b/frameworks/innerkits/file_access/include/file_ext_stub_impl.h @@ -35,6 +35,7 @@ public: int CreateFile(const Uri &parentUri, const std::string &displayName, Uri &newFileUri) override; int Mkdir(const Uri &parentUri, const std::string &displayName, Uri &newFileUri) override; int Delete(const Uri &sourceFileUri) override; + int Move(const Uri &sourceFileUri, const Uri &targetParentUri, Uri &newFileUri) override; int Rename(const Uri &sourceFileUri, const std::string &displayName, Uri &newFileUri) override; std::vector ListFile(const Uri &sourceFileUri) override; diff --git a/frameworks/innerkits/file_access/include/ifile_ext_base.h b/frameworks/innerkits/file_access/include/ifile_ext_base.h index 5964a4fb..3c7ba272 100644 --- a/frameworks/innerkits/file_access/include/ifile_ext_base.h +++ b/frameworks/innerkits/file_access/include/ifile_ext_base.h @@ -35,15 +35,17 @@ public: CMD_CREATE_FILE = 2, CMD_MKDIR = 3, CMD_DELETE = 4, - CMD_RENAME = 5, - CMD_LIST_FILE = 6, - CMD_GET_ROOTS = 7 + CMD_MOVE = 5, + CMD_RENAME = 6, + CMD_LIST_FILE = 7, + CMD_GET_ROOTS = 8 }; virtual int OpenFile(const Uri &uri, int flags) = 0; virtual int CreateFile(const Uri &parentUri, const std::string &displayName, Uri &newFileUri) = 0; virtual int Mkdir(const Uri &parentUri, const std::string &displayName, Uri &newFileUri) = 0; virtual int Delete(const Uri &sourceFileUri) = 0; + virtual int Move(const Uri &sourceFileUri, const Uri &targetParentUri, Uri &newFileUri) = 0; virtual int Rename(const Uri &sourceFileUri, const std::string &displayName, Uri &newFileUri) = 0; virtual std::vector ListFile(const Uri &sourceFileUri) = 0; diff --git a/frameworks/innerkits/file_access/include/js_file_ext_ability.h b/frameworks/innerkits/file_access/include/js_file_ext_ability.h index 23a7e3b4..14ff3942 100644 --- a/frameworks/innerkits/file_access/include/js_file_ext_ability.h +++ b/frameworks/innerkits/file_access/include/js_file_ext_ability.h @@ -47,6 +47,7 @@ public: int CreateFile(const Uri &parentUri, const std::string &displayName, Uri &newFileUri) override; int Mkdir(const Uri &parentUri, const std::string &displayName, Uri &newFileUri) override; int Delete(const Uri &sourceFileUri) override; + int Move(const Uri &sourceFileUri, const Uri &targetParentUri, Uri &newFileUri) override; int Rename(const Uri &sourceFileUri, const std::string &displayName, Uri &newFileUri) override; std::vector ListFile(const Uri &sourceFileUri) override; diff --git a/frameworks/innerkits/file_access/src/file_ext_ability.cpp b/frameworks/innerkits/file_access/src/file_ext_ability.cpp index b1460d4d..8cd07d2e 100644 --- a/frameworks/innerkits/file_access/src/file_ext_ability.cpp +++ b/frameworks/innerkits/file_access/src/file_ext_ability.cpp @@ -92,6 +92,11 @@ int FileExtAbility::Delete(const Uri &sourceFileUri) return 0; } +int FileExtAbility::Move(const Uri &sourceFileUri, const Uri &targetParentUri, Uri &newFileUri) +{ + return 0; +} + int FileExtAbility::Rename(const Uri &sourceFileUri, const std::string &displayName, Uri &newFileUri) { HILOG_INFO("%{public}s begin.", __func__); diff --git a/frameworks/innerkits/file_access/src/file_ext_proxy.cpp b/frameworks/innerkits/file_access/src/file_ext_proxy.cpp index 4d9fe587..c092fc08 100644 --- a/frameworks/innerkits/file_access/src/file_ext_proxy.cpp +++ b/frameworks/innerkits/file_access/src/file_ext_proxy.cpp @@ -192,6 +192,56 @@ int FileExtProxy::Delete(const Uri &sourceFileUri) return ret; } +int FileExtProxy::Move(const Uri &sourceFileUri, const Uri &targetParentUri, Uri &newFileUri) +{ + int ret = -1; + MessageParcel data; + if (!data.WriteInterfaceToken(FileExtProxy::GetDescriptor())) { + HILOG_ERROR("%{public}s WriteInterfaceToken failed", __func__); + return ret; + } + + if (!data.WriteParcelable(&sourceFileUri)) { + HILOG_ERROR("%{public}s fail to WriteParcelable sourceFileUri", __func__); + return ret; + } + + if (!data.WriteParcelable(&targetParentUri)) { + HILOG_ERROR("%{public}s fail to WriteParcelable targetParentUri", __func__); + return ret; + } + + if (!data.WriteParcelable(&newFileUri)) { + HILOG_ERROR("%{public}s fail to WriteParcelable newFileUri", __func__); + return ret; + } + + MessageParcel reply; + MessageOption option; + int32_t err = Remote()->SendRequest(CMD_MOVE, data, reply, option); + if (err != NO_ERROR) { + HILOG_ERROR("%{public}s fail to SendRequest. err: %d", __func__, err); + return ret; + } + + ret = reply.ReadInt32(); + if (ret < 0) { + HILOG_ERROR("%{public}s fail to ReadInt32 ret", __func__); + return ret; + } + + std::unique_ptr tempUri(reply.ReadParcelable()); + if (!tempUri) { + HILOG_ERROR("%{public}s ReadParcelable value is nullptr.", __func__); + ret = -1; + return ret; + } + + newFileUri = Uri(*tempUri); + HILOG_INFO("%{public}s end successfully, newFileUri=%{public}s", __func__, tempUri->ToString().c_str()); + return ret; +} + int FileExtProxy::Rename(const Uri &sourceFileUri, const std::string &displayName, Uri &newFileUri) { HILOG_INFO("%{public}s begin.", __func__); diff --git a/frameworks/innerkits/file_access/src/file_ext_stub.cpp b/frameworks/innerkits/file_access/src/file_ext_stub.cpp index 45ce9b78..a81b8b0a 100644 --- a/frameworks/innerkits/file_access/src/file_ext_stub.cpp +++ b/frameworks/innerkits/file_access/src/file_ext_stub.cpp @@ -25,6 +25,7 @@ FileExtStub::FileExtStub() stubFuncMap_[CMD_CREATE_FILE] = &FileExtStub::CmdCreateFile; stubFuncMap_[CMD_MKDIR] = &FileExtStub::CmdMkdir; stubFuncMap_[CMD_DELETE] = &FileExtStub::CmdDelete; + stubFuncMap_[CMD_MOVE] = &FileExtStub::CmdMove; stubFuncMap_[CMD_RENAME] = &FileExtStub::CmdRename; stubFuncMap_[CMD_LIST_FILE] = &FileExtStub::CmdListFile; stubFuncMap_[CMD_GET_ROOTS] = &FileExtStub::CmdGetRoots; @@ -187,6 +188,44 @@ ErrCode FileExtStub::CmdDelete(MessageParcel &data, MessageParcel &reply) return NO_ERROR; } +ErrCode FileExtStub::CmdMove(MessageParcel &data, MessageParcel &reply) +{ + std::shared_ptr sourceFileUri(data.ReadParcelable()); + if (sourceFileUri == nullptr) { + HILOG_ERROR("%{public}s sourceFileUri is nullptr", __func__); + return ERR_INVALID_VALUE; + } + std::shared_ptr targetParentUri(data.ReadParcelable()); + if (targetParentUri == nullptr) { + HILOG_ERROR("%{public}s targetParentUri is nullptr", __func__); + return ERR_INVALID_VALUE; + } + std::shared_ptr newFileUri(data.ReadParcelable()); + if (newFileUri == nullptr) { + HILOG_ERROR("%{public}s newFileUri is nullptr", __func__); + return ERR_INVALID_VALUE; + } + + int ret = Move(*sourceFileUri, *targetParentUri, *newFileUri); + if (ret < 0) { + HILOG_ERROR("%{public}s fail, ret is %{pubilc}d", __func__, ret); + return ERR_INVALID_VALUE; + } + + if (!reply.WriteInt32(ret)) { + HILOG_ERROR("%{public}s fail to WriteInt32 ret", __func__); + return ERR_INVALID_VALUE; + } + + if (!reply.WriteParcelable(&(*newFileUri))) { + HILOG_ERROR("%{public}s fail to WriteParcelable type", __func__); + return ERR_INVALID_VALUE; + } + + HILOG_INFO("%{public}s end. ret:%d, newFileUri = %{public}s", __func__, ret, newFileUri->ToString().c_str()); + return NO_ERROR; +} + ErrCode FileExtStub::CmdRename(MessageParcel &data, MessageParcel &reply) { HILOG_INFO("%{public}s begin.", __func__); diff --git a/frameworks/innerkits/file_access/src/file_ext_stub_impl.cpp b/frameworks/innerkits/file_access/src/file_ext_stub_impl.cpp index 528e8c37..1b68a6b8 100644 --- a/frameworks/innerkits/file_access/src/file_ext_stub_impl.cpp +++ b/frameworks/innerkits/file_access/src/file_ext_stub_impl.cpp @@ -84,6 +84,20 @@ int FileExtStubImpl::Delete(const Uri &sourceFileUri) return ret; } +int FileExtStubImpl::Move(const Uri &sourceFileUri, const Uri &targetParentUri, Uri &newFileUri) +{ + int ret = -1; + auto extension = GetOwner(); + if (extension == nullptr) { + HILOG_ERROR("%{public}s end failed.", __func__); + return ret; + } + ret = extension->Move(sourceFileUri, targetParentUri, newFileUri); + HILOG_INFO("%{public}s end successfully, return ret:%{public}d, %{public}s", + __func__, ret,newFileUri.ToString().c_str()); + return ret; +} + int FileExtStubImpl::Rename(const Uri &sourceFileUri, const std::string &displayName, Uri &newFileUri) { HILOG_INFO("%{public}s begin.", __func__); diff --git a/frameworks/innerkits/file_access/src/js_file_ext_ability.cpp b/frameworks/innerkits/file_access/src/js_file_ext_ability.cpp index 1e6f0334..a85bc330 100644 --- a/frameworks/innerkits/file_access/src/js_file_ext_ability.cpp +++ b/frameworks/innerkits/file_access/src/js_file_ext_ability.cpp @@ -276,6 +276,37 @@ int JsFileExtAbility::Delete(const Uri &sourceFileUri) return ret; } +int JsFileExtAbility::Move(const Uri &sourceFileUri, const Uri &targetParentUri, Uri &newFileUri) +{ + HandleScope handleScope(jsRuntime_); + napi_env env = reinterpret_cast(&jsRuntime_.GetNativeEngine()); + + napi_value napiSourceFileUri = nullptr; + napi_create_string_utf8(env, sourceFileUri.ToString().c_str(), NAPI_AUTO_LENGTH, &napiSourceFileUri); + napi_value napiTargetParentUri = nullptr; + napi_create_string_utf8(env, targetParentUri.ToString().c_str(), NAPI_AUTO_LENGTH, &napiTargetParentUri); + + NativeValue* nativeSourceFileUri = reinterpret_cast(napiSourceFileUri); + NativeValue* nativeTargetParentUri = reinterpret_cast(napiTargetParentUri); + NativeValue* argv[] = {nativeSourceFileUri, nativeTargetParentUri}; + NativeValue* nativeResult = CallObjectMethod("move", argv, ARGC_TWO); + int ret = -1; + if (nativeResult == nullptr) { + HILOG_ERROR("%{public}s call move with return null.", __func__); + return ret; + } + std::string uriStr = OHOS::AppExecFwk::UnwrapStringFromJS(env, reinterpret_cast(nativeResult)); + if (uriStr.empty()) { + HILOG_ERROR("%{public}s call move with return empty.", __func__); + return ret; + } else { + ret = NO_ERROR; + } + newFileUri = Uri(uriStr); + HILOG_INFO("%{public}s end. return fd:%{public}d, newFileUri = %{public}s", __func__, ret, uriStr.c_str()); + return ret; +} + int JsFileExtAbility::Rename(const Uri &sourceFileUri, const std::string &displayName, Uri &newFileUri) { HILOG_INFO("%{public}s begin.", __func__); -- Gitee From b2649560cc2c4cfb1ffc37e2ecd74b50f1d54d3b Mon Sep 17 00:00:00 2001 From: chenkai008 Date: Mon, 20 Jun 2022 14:41:16 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chenkai008 --- .../innerkits/file_access/src/file_ext_stub.cpp | 12 ++++++------ .../innerkits/file_access/src/file_ext_stub_impl.cpp | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/frameworks/innerkits/file_access/src/file_ext_stub.cpp b/frameworks/innerkits/file_access/src/file_ext_stub.cpp index a81b8b0a..5a684593 100644 --- a/frameworks/innerkits/file_access/src/file_ext_stub.cpp +++ b/frameworks/innerkits/file_access/src/file_ext_stub.cpp @@ -200,13 +200,13 @@ ErrCode FileExtStub::CmdMove(MessageParcel &data, MessageParcel &reply) HILOG_ERROR("%{public}s targetParentUri is nullptr", __func__); return ERR_INVALID_VALUE; } - std::shared_ptr newFileUri(data.ReadParcelable()); - if (newFileUri == nullptr) { - HILOG_ERROR("%{public}s newFileUri is nullptr", __func__); + std::shared_ptr fileUriNew(data.ReadParcelable()); + if (fileUriNew == nullptr) { + HILOG_ERROR("%{public}s fileUriNew is nullptr", __func__); return ERR_INVALID_VALUE; } - int ret = Move(*sourceFileUri, *targetParentUri, *newFileUri); + int ret = Move(*sourceFileUri, *targetParentUri, *fileUriNew); if (ret < 0) { HILOG_ERROR("%{public}s fail, ret is %{pubilc}d", __func__, ret); return ERR_INVALID_VALUE; @@ -217,12 +217,12 @@ ErrCode FileExtStub::CmdMove(MessageParcel &data, MessageParcel &reply) return ERR_INVALID_VALUE; } - if (!reply.WriteParcelable(&(*newFileUri))) { + if (!reply.WriteParcelable(&(*fileUriNew))) { HILOG_ERROR("%{public}s fail to WriteParcelable type", __func__); return ERR_INVALID_VALUE; } - HILOG_INFO("%{public}s end. ret:%d, newFileUri = %{public}s", __func__, ret, newFileUri->ToString().c_str()); + HILOG_INFO("%{public}s end. ret:%d, newFileUri = %{public}s", __func__, ret, fileUriNew->ToString().c_str()); return NO_ERROR; } diff --git a/frameworks/innerkits/file_access/src/file_ext_stub_impl.cpp b/frameworks/innerkits/file_access/src/file_ext_stub_impl.cpp index 1b68a6b8..4afcfd6d 100644 --- a/frameworks/innerkits/file_access/src/file_ext_stub_impl.cpp +++ b/frameworks/innerkits/file_access/src/file_ext_stub_impl.cpp @@ -94,7 +94,7 @@ int FileExtStubImpl::Move(const Uri &sourceFileUri, const Uri &targetParentUri, } ret = extension->Move(sourceFileUri, targetParentUri, newFileUri); HILOG_INFO("%{public}s end successfully, return ret:%{public}d, %{public}s", - __func__, ret,newFileUri.ToString().c_str()); + __func__, ret, newFileUri.ToString().c_str()); return ret; } -- Gitee