From 94f9d76beea99d9c75c70872656e83f1130025ee Mon Sep 17 00:00:00 2001 From: yiny Date: Tue, 16 May 2023 09:48:18 +0800 Subject: [PATCH 1/6] add savepath Signed-off-by: yiny Change-Id: I8fd17b80c7c840c60141550c6ca441670e40a38a --- .../napi_fileaccess_helper.cpp | 96 ++++++++++++++++++- .../napi_fileaccess_helper.h | 4 +- .../include/file_access_ext_ability.h | 5 +- .../include/file_access_ext_proxy.h | 6 +- .../include/file_access_ext_stub.h | 4 +- .../include/file_access_ext_stub_impl.h | 5 +- .../file_access/include/file_access_helper.h | 4 +- .../include/ifile_access_ext_base.h | 8 +- .../src/file_access_ext_ability.cpp | 14 ++- .../file_access/src/file_access_ext_proxy.cpp | 77 +++++++++++++++ .../file_access/src/file_access_ext_stub.cpp | 47 ++++++++- .../src/file_access_ext_stub_impl.cpp | 30 +++++- .../file_access/src/file_access_helper.cpp | 63 +++++++++++- interfaces/kits/picker/picker.js | 2 +- 14 files changed, 348 insertions(+), 17 deletions(-) diff --git a/frameworks/js/napi/file_access_module/napi_fileaccess_helper.cpp b/frameworks/js/napi/file_access_module/napi_fileaccess_helper.cpp index d90f15f0..ad59d5f2 100644 --- a/frameworks/js/napi/file_access_module/napi_fileaccess_helper.cpp +++ b/frameworks/js/napi/file_access_module/napi_fileaccess_helper.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Huawei Device Co., Ltd. + * Copyright (C) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -236,7 +236,9 @@ napi_value FileAccessHelperInit(napi_env env, napi_value exports) DECLARE_NAPI_FUNCTION("access", NAPI_Access), DECLARE_NAPI_FUNCTION("getFileInfoFromUri", NAPI_GetFileInfoFromUri), DECLARE_NAPI_FUNCTION("getFileInfoFromRelativePath", NAPI_GetFileInfoFromRelativePath), - DECLARE_NAPI_FUNCTION("getThumbnail", NAPI_GetThumbnail) + DECLARE_NAPI_FUNCTION("getThumbnail", NAPI_GetThumbnail), + DECLARE_NAPI_FUNCTION("setDefaultPath", NAPI_SetDefaultPath), + DECLARE_NAPI_FUNCTION("getDefaultPath", NAPI_GetDefaultPath) }; napi_value cons = nullptr; NAPI_CALL(env, @@ -1198,5 +1200,95 @@ napi_value NAPI_GetThumbnail(napi_env env, napi_callback_info info) } return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; } + +napi_value NAPI_SetDefaultPath(napi_env env, napi_callback_info info) +{ + NFuncArg funcArg(env, info); + if (!funcArg.InitArgs(NARG_CNT::ONE, NARG_CNT::TWO)) { + NError(EINVAL).ThrowErr(env); + return nullptr; + } + + bool succ = false; + std::unique_ptr pathString; + std::tie(succ, pathString, std::ignore) = NVal(env, funcArg[NARG_POS::FIRST]).ToUTF8String(); + if (!succ) { + NError(EINVAL).ThrowErr(env); + return nullptr; + } + + FileAccessHelper *fileAccessHelper = GetFileAccessHelper(env, funcArg.GetThisVar()); + if (fileAccessHelper == nullptr) { + NError(EINVAL).ThrowErr(env); + return nullptr; + } + auto result = std::make_shared(); + string defaultPath(pathString.get()); + auto cbExec = [defaultPath, result, fileAccessHelper]() -> NError { + std::string path(defaultPath); + int ret = fileAccessHelper->SetDefaultPath(path); + *result = ERR_OK == ret; + return NError(ret); + }; + auto cbComplete = [result](napi_env env, NError err) -> NVal { + if (err) { + return { env, err.GetNapiErr(env) }; + } + return { NVal::CreateBool(env, *result) }; + }; + + const std::string procedureName = "setDefaultPath"; + NVal thisVar(env, funcArg.GetThisVar()); + if (funcArg.GetArgc() == NARG_CNT::ONE) { + return NAsyncWorkPromise(env, thisVar).Schedule(procedureName, cbExec, cbComplete).val_; + } + + NVal cb(env, funcArg[NARG_POS::SECOND]); + if (!cb.TypeIs(napi_function)) { + NError(EINVAL).ThrowErr(env); + return nullptr; + } + return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; +} + +napi_value NAPI_GetDefaultPath(napi_env env, napi_callback_info info) +{ + NFuncArg funcArg(env, info); + if (!funcArg.InitArgs(NARG_CNT::ZERO, NARG_CNT::ONE)) { + NError(EINVAL).ThrowErr(env); + return nullptr; + } + + FileAccessHelper *fileAccessHelper = GetFileAccessHelper(env, funcArg.GetThisVar()); + if (fileAccessHelper == nullptr) { + NError(EINVAL).ThrowErr(env); + return nullptr; + } + auto defaultPath = std::make_shared(); + auto cbExec = [defaultPath, fileAccessHelper]() -> NError { + int ret = fileAccessHelper->GetDefaultPath(*defaultPath); + return NError(ret); + }; + + auto cbComplete = [defaultPath](napi_env env, NError err) -> NVal { + if (err) { + return { env, err.GetNapiErr(env) }; + } + return { NVal::CreateUTF8String(env, *defaultPath) }; + }; + + const std::string procedureName = "getDefaultPath"; + NVal thisVar(env, funcArg.GetThisVar()); + if (funcArg.GetArgc() == NARG_CNT::ZERO) { + return NAsyncWorkPromise(env, thisVar).Schedule(procedureName, cbExec, cbComplete).val_; + } + + NVal cb(env, funcArg[NARG_POS::FIRST]); + if (!cb.TypeIs(napi_function)) { + NError(EINVAL).ThrowErr(env); + return nullptr; + } + return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; +} } // namespace FileAccessFwk } // namespace OHOS diff --git a/frameworks/js/napi/file_access_module/napi_fileaccess_helper.h b/frameworks/js/napi/file_access_module/napi_fileaccess_helper.h index 209bbc0f..1542138a 100644 --- a/frameworks/js/napi/file_access_module/napi_fileaccess_helper.h +++ b/frameworks/js/napi/file_access_module/napi_fileaccess_helper.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Huawei Device Co., Ltd. + * Copyright (C) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -37,6 +37,8 @@ namespace FileAccessFwk { napi_value NAPI_GetFileInfoFromUri(napi_env env, napi_callback_info info); napi_value NAPI_GetFileInfoFromRelativePath(napi_env env, napi_callback_info info); napi_value NAPI_GetThumbnail(napi_env env, napi_callback_info info); + napi_value NAPI_SetDefaultPath(napi_env env, napi_callback_info info); + napi_value NAPI_GetDefaultPath(napi_env env, napi_callback_info info); } // namespace FileAccessFwk } // namespace OHOS #endif // NAPI_FILEACCESS_HELPER_H diff --git a/interfaces/inner_api/file_access/include/file_access_ext_ability.h b/interfaces/inner_api/file_access/include/file_access_ext_ability.h index f807b363..03a3b151 100644 --- a/interfaces/inner_api/file_access/include/file_access_ext_ability.h +++ b/interfaces/inner_api/file_access/include/file_access_ext_ability.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -16,6 +16,7 @@ #ifndef FILE_ACCESS_EXT_ABILITY_H #define FILE_ACCESS_EXT_ABILITY_H + #include "extension_base.h" #include "file_access_extension_info.h" #include "file_access_observer_common.h" @@ -61,6 +62,8 @@ public: virtual int GetFileInfoFromRelativePath(const std::string &selectFile, FileInfo &fileInfo); virtual int GetRoots(std::vector &rootInfoVec); virtual int Access(const Uri &uri, bool &isExist); + virtual int SetDefaultPath(const std::string &defaultPath); + virtual int GetDefaultPath(std::string &defaultPath); static void SetCreator(const CreatorFunc& creator); virtual int StartWatcher(const Uri &uri); virtual int StopWatcher(const Uri &uri); diff --git a/interfaces/inner_api/file_access/include/file_access_ext_proxy.h b/interfaces/inner_api/file_access/include/file_access_ext_proxy.h index c681ae6b..bc607a4b 100644 --- a/interfaces/inner_api/file_access/include/file_access_ext_proxy.h +++ b/interfaces/inner_api/file_access/include/file_access_ext_proxy.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -57,8 +57,10 @@ public: virtual int GetFileInfoFromRelativePath(const std::string &selectFile, FileInfo &fileInfo) override; virtual int GetRoots(std::vector &rootInfoVec) override; virtual int Access(const Uri &uri, bool &isExist) override; - virtual int StartWatcher(const Uri &uri) override; + virtual int StartWatcher(const Uri &uri) override; virtual int StopWatcher(const Uri &uri) override; + virtual int SetDefaultPath(const std::string &defaultPath) override; + virtual int GetDefaultPath(std::string &defaultPath) override; private: static inline BrokerDelegator delegator_; }; diff --git a/interfaces/inner_api/file_access/include/file_access_ext_stub.h b/interfaces/inner_api/file_access/include/file_access_ext_stub.h index f804c1fd..e68f3f2a 100644 --- a/interfaces/inner_api/file_access/include/file_access_ext_stub.h +++ b/interfaces/inner_api/file_access/include/file_access_ext_stub.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -52,6 +52,8 @@ private: ErrCode CmdAccess(MessageParcel &data, MessageParcel &reply); ErrCode CmdStartWatcher(MessageParcel &data, MessageParcel &reply); ErrCode CmdStopWatcher(MessageParcel &data, MessageParcel &reply); + ErrCode CmdSetDefaultPath(MessageParcel &data, MessageParcel &reply); + ErrCode CmdGetDefaultPath(MessageParcel &data, MessageParcel &reply); bool CheckCallingPermission(const std::string &permission); using RequestFuncType = int (FileAccessExtStub::*)(MessageParcel &data, MessageParcel &reply); std::map stubFuncMap_; diff --git a/interfaces/inner_api/file_access/include/file_access_ext_stub_impl.h b/interfaces/inner_api/file_access/include/file_access_ext_stub_impl.h index 9acb2c65..a3a1acdd 100644 --- a/interfaces/inner_api/file_access/include/file_access_ext_stub_impl.h +++ b/interfaces/inner_api/file_access/include/file_access_ext_stub_impl.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -56,7 +56,8 @@ public: int Access(const Uri &uri, bool &isExist) override; int StartWatcher(const Uri &uri) override; int StopWatcher(const Uri &uri) override; - + int SetDefaultPath(const std::string &defaultPath) override; + int GetDefaultPath(std::string &defaultPath) override; private: std::shared_ptr GetOwner(); std::shared_ptr extension_; diff --git a/interfaces/inner_api/file_access/include/file_access_helper.h b/interfaces/inner_api/file_access/include/file_access_helper.h index 4205e38a..f7a9525a 100644 --- a/interfaces/inner_api/file_access/include/file_access_helper.h +++ b/interfaces/inner_api/file_access/include/file_access_helper.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -84,6 +84,8 @@ public: int GetFileInfoFromUri(Uri &selectFile, FileInfo &fileInfo); int GetFileInfoFromRelativePath(std::string &selectFile, FileInfo &fileInfo); int GetRoots(std::vector &rootInfoVec); + int SetDefaultPath(const std::string &path); + int GetDefaultPath(std::string &path); private: int StartWatcher(Uri &uri); int StopWatcher(Uri &uri); diff --git a/interfaces/inner_api/file_access/include/ifile_access_ext_base.h b/interfaces/inner_api/file_access/include/ifile_access_ext_base.h index b01a81db..40266f7c 100644 --- a/interfaces/inner_api/file_access/include/ifile_access_ext_base.h +++ b/interfaces/inner_api/file_access/include/ifile_access_ext_base.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -53,7 +53,9 @@ public: CMD_ACCESS, CMD_GET_THUMBNAIL, CMD_GET_FILEINFO_FROM_URI, - CMD_GET_FILEINFO_FROM_RELATIVE_PATH + CMD_GET_FILEINFO_FROM_RELATIVE_PATH, + CMD_SET_DEFAULT_PATH, + CMD_GET_DEFAULT_PATH, }; virtual int OpenFile(const Uri &uri, const int flags, int &fd) = 0; @@ -77,6 +79,8 @@ public: virtual int Access(const Uri &uri, bool &isExist) = 0; virtual int StartWatcher(const Uri &uri) = 0; virtual int StopWatcher(const Uri &uri) = 0; + virtual int SetDefaultPath(const std::string &defaultPath) = 0; + virtual int GetDefaultPath(std::string &defaultPath) = 0; }; } // namespace FileAccessFwk } // namespace OHOS diff --git a/interfaces/inner_api/file_access/src/file_access_ext_ability.cpp b/interfaces/inner_api/file_access/src/file_access_ext_ability.cpp index c56c4fd6..08338c15 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_ability.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_ability.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -170,5 +170,17 @@ int FileAccessExtAbility::Notify(Uri &uri, NotifyType notifyType) HILOG_ERROR("FileAccessExtAbility::Notify Undefined operation"); return EPERM; } + +int FileAccessExtAbility::SetDefaultPath(const std::string &defaultPath) +{ + HILOG_ERROR("FileAccessExtAbility::SetDefaultPath Undefined operation"); + return EPERM; +} + +int FileAccessExtAbility::GetDefaultPath(std::string &defaultPath) +{ + HILOG_ERROR("FileAccessExtAbility::GetDefaultPath Undefined operation"); + return EPERM; +} } // namespace FileAccessFwk } // namespace OHOS diff --git a/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp b/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp index 130b4ab3..71e8435f 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp @@ -1028,6 +1028,83 @@ int FileAccessExtProxy::StopWatcher(const Uri &uri) return ret; } +int FileAccessExtProxy::SetDefaultPath(const std::string &defaultPath) +{ + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "SetDefaultPath"); + MessageParcel data; + if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { + HILOG_ERROR("WriteInterfaceToken failed"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_IPCS; + } + + if (!data.WriteString(defaultPath)) { + HILOG_ERROR("fail to WriteParcelable defaultPath"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_IPCS; + } + MessageParcel reply; + MessageOption option; + int err = Remote()->SendRequest(CMD_SET_DEFAULT_PATH, data, reply, option); + if (err != ERR_OK) { + HILOG_ERROR("fail to SendRequest. err: %{public}d", err); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return err; + } + + int ret = E_IPCS; + if (!reply.ReadInt32(ret)) { + HILOG_ERROR("fail to ReadInt32 ret"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_IPCS; + } + + if (ret != ERR_OK) { + HILOG_ERROR("SetDefaultPath operation failed ret : %{public}d", ret); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ret; + } + + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ERR_OK; +} + +int FileAccessExtProxy::GetDefaultPath(std::string &defaultPath) +{ + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "GetDefaultPath"); + MessageParcel data; + if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { + HILOG_ERROR("WriteInterfaceToken failed"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_IPCS; + } + + MessageParcel reply; + MessageOption option; + int err = Remote()->SendRequest(CMD_GET_DEFAULT_PATH, data, reply, option); + if (err != ERR_OK) { + HILOG_ERROR("fail to SendRequest. err: %{public}d", err); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return err; + } + int ret = E_IPCS; + if (!reply.ReadInt32(ret)) { + HILOG_ERROR("fail to ReadInt32 ret"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_IPCS; + } + + if (ret != ERR_OK) { + HILOG_ERROR("GetDefaultPath operation failed ret : %{public}d", ret); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ret; + } + if (!reply.ReadString(defaultPath)) { + HILOG_ERROR("fail to ReadString ret"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_IPCS; + } + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ERR_OK; } diff --git a/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp b/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp index 4c2e17b8..fa5ab7eb 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -60,6 +60,8 @@ FileAccessExtStub::FileAccessExtStub() stubFuncMap_[CMD_GET_THUMBNAIL] = &FileAccessExtStub::CmdGetThumbnail; stubFuncMap_[CMD_GET_FILEINFO_FROM_URI] = &FileAccessExtStub::CmdGetFileInfoFromUri; stubFuncMap_[CMD_GET_FILEINFO_FROM_RELATIVE_PATH] = &FileAccessExtStub::CmdGetFileInfoFromRelativePath; + stubFuncMap_[CMD_SET_DEFAULT_PATH] = &FileAccessExtStub::CmdSetDefaultPath; + stubFuncMap_[CMD_GET_DEFAULT_PATH] = &FileAccessExtStub::CmdGetDefaultPath; } FileAccessExtStub::~FileAccessExtStub() @@ -778,6 +780,49 @@ ErrCode FileAccessExtStub::CmdStopWatcher(MessageParcel &data, MessageParcel &re FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ERR_OK; } + +ErrCode FileAccessExtStub::CmdSetDefaultPath(MessageParcel &data, MessageParcel &reply) +{ + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "CmdSetDefaultPath"); + std::string defaultPath; + + if (!data.ReadString(defaultPath)) { + HILOG_ERROR("Parameter CmdSetDefaultPath fail to ReadParcelable defaultPath"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_IPCS; + } + + int ret = SetDefaultPath(defaultPath); + if (!reply.WriteInt32(ret)) { + HILOG_ERROR("Parameter CmdSetDefaultPath fail to WriteInt32 ret"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_IPCS; + } + + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ERR_OK; +} + +ErrCode FileAccessExtStub::CmdGetDefaultPath(MessageParcel &data, MessageParcel &reply) +{ + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "CmdGetDefaultPath"); + std::string defaultPath; + + int ret = GetDefaultPath(defaultPath); + if (!reply.WriteInt32(ret)) { + HILOG_ERROR("Parameter CmdGetDefaultPath fail to WriteInt32 ret"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_IPCS; + } + if (!reply.WriteString(defaultPath)) { + HILOG_ERROR("Parameter CmdGetDefaultPath fail to WriteInt32 ret"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_IPCS; + } + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ERR_OK; +} + bool FileAccessExtStub::CheckCallingPermission(const std::string &permission) { StartTrace(HITRACE_TAG_FILEMANAGEMENT, "CheckCallingPermission"); diff --git a/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp b/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp index dc53c8f8..2eef9b66 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -275,5 +275,33 @@ int FileAccessExtStubImpl::StopWatcher(const Uri &uri) FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ret; } + +int FileAccessExtStubImpl::SetDefaultPath(const std::string &defaultPath) +{ + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "SetDefaultPath"); + if (extension_ == nullptr) { + HILOG_ERROR("SetDefaultPath get extension failed."); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_IPCS; + } + int ret = extension_->SetDefaultPath(defaultPath); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ret; +} + +int FileAccessExtStubImpl::GetDefaultPath(std::string &defaultPath) +{ + HILOG_INFO("FileAccessExtStubImpl::GetDefaultPath."); + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "GetDefaultPath"); + if (extension_ == nullptr) { + HILOG_ERROR("GetDefaultPath get extension failed."); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_IPCS; + } + + int ret = extension_->GetDefaultPath(defaultPath); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ret; +} } // namespace FileAccessFwk } // namespace OHOS diff --git a/interfaces/inner_api/file_access/src/file_access_helper.cpp b/interfaces/inner_api/file_access/src/file_access_helper.cpp index 3ec372fe..84063356 100644 --- a/interfaces/inner_api/file_access/src/file_access_helper.cpp +++ b/interfaces/inner_api/file_access/src/file_access_helper.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -1005,6 +1005,67 @@ int FileAccessHelper::GetRoots(std::vector &rootInfoVec) return ERR_OK; } +int FileAccessHelper::SetDefaultPath(const std::string &path) +{ + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "SetDefaultPath"); + if (!IsSystemApp()) { + HILOG_ERROR("FileAccessHelper::SetDefaultPath check IsSystemAppByFullTokenID failed"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_PERMISSION_SYS; + } + Uri uri(path); + if (!CheckUri(uri)) { + HILOG_ERROR("Uri format check error."); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_URIS; + } + + sptr fileExtProxy = GetProxyByUri(uri); + if (fileExtProxy == nullptr) { + HILOG_ERROR("failed with invalid fileAccessExtProxy"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_IPCS; + } + + int ret = fileExtProxy->SetDefaultPath(path); + if (ret != ERR_OK) { + HILOG_ERROR("SetDefaultPath get result error, code:%{public}d", ret); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ret; + } + + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ERR_OK; +} + +int FileAccessHelper::GetDefaultPath(std::string &path) +{ + HILOG_INFO("FileAccessHelper::GetDefaultPath"); + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "GetDefaultPath"); + if (!IsSystemApp()) { + HILOG_ERROR("FileAccessHelper::GetDefaultPath check IsSystemAppByFullTokenID failed"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_PERMISSION_SYS; + } + sptr fileExtProxy = GetProxyByBundleName(MEDIA_BNUDLE_NAME); + HILOG_INFO("FileAccessHelper::fileExtProxy"); + if (fileExtProxy == nullptr) { + HILOG_ERROR("failed with invalid fileAccessExtProxy"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_IPCS; + } + + int ret = fileExtProxy->GetDefaultPath(path); + if (ret != ERR_OK) { + HILOG_ERROR("GetDefaultPath get result error, code:%{public}d", ret); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ret; + } + + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ERR_OK; +} + int FileAccessHelper::GetRegisteredFileAccessExtAbilityInfo(std::vector &wantVec) { StartTrace(HITRACE_TAG_FILEMANAGEMENT, "GetRegisteredFileAccessExtAbilityInfo"); diff --git a/interfaces/kits/picker/picker.js b/interfaces/kits/picker/picker.js index abc2c514..08a23bb2 100644 --- a/interfaces/kits/picker/picker.js +++ b/interfaces/kits/picker/picker.js @@ -321,4 +321,4 @@ export default { PhotoViewPicker : PhotoViewPicker, DocumentViewPicker: DocumentViewPicker, AudioViewPicker : AudioViewPicker, -} \ No newline at end of file +} -- Gitee From 5d40b72d75a955698009ab07788cf3bf1375b91a Mon Sep 17 00:00:00 2001 From: yiny Date: Fri, 26 May 2023 15:22:17 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E5=87=BD=E6=95=B0=E5=90=8D=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: yiny Change-Id: I9ff98ade250dd242bbdf403af01d8a32bcc9938e --- .../napi_fileaccess_helper.cpp | 16 ++++++------- .../napi_fileaccess_helper.h | 4 ++-- .../include/file_access_ext_ability.h | 4 ++-- .../include/file_access_ext_proxy.h | 4 ++-- .../include/file_access_ext_stub.h | 4 ++-- .../include/file_access_ext_stub_impl.h | 4 ++-- .../file_access/include/file_access_helper.h | 4 ++-- .../include/ifile_access_ext_base.h | 4 ++-- .../src/file_access_ext_ability.cpp | 8 +++---- .../file_access/src/file_access_ext_proxy.cpp | 14 +++++------ .../file_access/src/file_access_ext_stub.cpp | 24 +++++++++---------- .../src/file_access_ext_stub_impl.cpp | 18 +++++++------- .../file_access/src/file_access_helper.cpp | 22 ++++++++--------- 13 files changed, 65 insertions(+), 65 deletions(-) diff --git a/frameworks/js/napi/file_access_module/napi_fileaccess_helper.cpp b/frameworks/js/napi/file_access_module/napi_fileaccess_helper.cpp index ad59d5f2..47f7b1e0 100644 --- a/frameworks/js/napi/file_access_module/napi_fileaccess_helper.cpp +++ b/frameworks/js/napi/file_access_module/napi_fileaccess_helper.cpp @@ -237,8 +237,8 @@ napi_value FileAccessHelperInit(napi_env env, napi_value exports) DECLARE_NAPI_FUNCTION("getFileInfoFromUri", NAPI_GetFileInfoFromUri), DECLARE_NAPI_FUNCTION("getFileInfoFromRelativePath", NAPI_GetFileInfoFromRelativePath), DECLARE_NAPI_FUNCTION("getThumbnail", NAPI_GetThumbnail), - DECLARE_NAPI_FUNCTION("setDefaultPath", NAPI_SetDefaultPath), - DECLARE_NAPI_FUNCTION("getDefaultPath", NAPI_GetDefaultPath) + DECLARE_NAPI_FUNCTION("setDefaultSavePath", NAPI_SetDefaultSavePath), + DECLARE_NAPI_FUNCTION("getDefaultSavePath", NAPI_GetDefaultSavePath) }; napi_value cons = nullptr; NAPI_CALL(env, @@ -1201,7 +1201,7 @@ napi_value NAPI_GetThumbnail(napi_env env, napi_callback_info info) return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; } -napi_value NAPI_SetDefaultPath(napi_env env, napi_callback_info info) +napi_value NAPI_SetDefaultSavePath(napi_env env, napi_callback_info info) { NFuncArg funcArg(env, info); if (!funcArg.InitArgs(NARG_CNT::ONE, NARG_CNT::TWO)) { @@ -1226,7 +1226,7 @@ napi_value NAPI_SetDefaultPath(napi_env env, napi_callback_info info) string defaultPath(pathString.get()); auto cbExec = [defaultPath, result, fileAccessHelper]() -> NError { std::string path(defaultPath); - int ret = fileAccessHelper->SetDefaultPath(path); + int ret = fileAccessHelper->SetDefaultSavePath(path); *result = ERR_OK == ret; return NError(ret); }; @@ -1237,7 +1237,7 @@ napi_value NAPI_SetDefaultPath(napi_env env, napi_callback_info info) return { NVal::CreateBool(env, *result) }; }; - const std::string procedureName = "setDefaultPath"; + const std::string procedureName = "setDefaultSavePath"; NVal thisVar(env, funcArg.GetThisVar()); if (funcArg.GetArgc() == NARG_CNT::ONE) { return NAsyncWorkPromise(env, thisVar).Schedule(procedureName, cbExec, cbComplete).val_; @@ -1251,7 +1251,7 @@ napi_value NAPI_SetDefaultPath(napi_env env, napi_callback_info info) return NAsyncWorkCallback(env, thisVar, cb).Schedule(procedureName, cbExec, cbComplete).val_; } -napi_value NAPI_GetDefaultPath(napi_env env, napi_callback_info info) +napi_value NAPI_GetDefaultSavePath(napi_env env, napi_callback_info info) { NFuncArg funcArg(env, info); if (!funcArg.InitArgs(NARG_CNT::ZERO, NARG_CNT::ONE)) { @@ -1266,7 +1266,7 @@ napi_value NAPI_GetDefaultPath(napi_env env, napi_callback_info info) } auto defaultPath = std::make_shared(); auto cbExec = [defaultPath, fileAccessHelper]() -> NError { - int ret = fileAccessHelper->GetDefaultPath(*defaultPath); + int ret = fileAccessHelper->GetDefaultSavePath(*defaultPath); return NError(ret); }; @@ -1277,7 +1277,7 @@ napi_value NAPI_GetDefaultPath(napi_env env, napi_callback_info info) return { NVal::CreateUTF8String(env, *defaultPath) }; }; - const std::string procedureName = "getDefaultPath"; + const std::string procedureName = "getDefaultSavePath"; NVal thisVar(env, funcArg.GetThisVar()); if (funcArg.GetArgc() == NARG_CNT::ZERO) { return NAsyncWorkPromise(env, thisVar).Schedule(procedureName, cbExec, cbComplete).val_; diff --git a/frameworks/js/napi/file_access_module/napi_fileaccess_helper.h b/frameworks/js/napi/file_access_module/napi_fileaccess_helper.h index 1542138a..65be3032 100644 --- a/frameworks/js/napi/file_access_module/napi_fileaccess_helper.h +++ b/frameworks/js/napi/file_access_module/napi_fileaccess_helper.h @@ -37,8 +37,8 @@ namespace FileAccessFwk { napi_value NAPI_GetFileInfoFromUri(napi_env env, napi_callback_info info); napi_value NAPI_GetFileInfoFromRelativePath(napi_env env, napi_callback_info info); napi_value NAPI_GetThumbnail(napi_env env, napi_callback_info info); - napi_value NAPI_SetDefaultPath(napi_env env, napi_callback_info info); - napi_value NAPI_GetDefaultPath(napi_env env, napi_callback_info info); + napi_value NAPI_SetDefaultSavePath(napi_env env, napi_callback_info info); + napi_value NAPI_GetDefaultSavePath(napi_env env, napi_callback_info info); } // namespace FileAccessFwk } // namespace OHOS #endif // NAPI_FILEACCESS_HELPER_H diff --git a/interfaces/inner_api/file_access/include/file_access_ext_ability.h b/interfaces/inner_api/file_access/include/file_access_ext_ability.h index 03a3b151..7906b983 100644 --- a/interfaces/inner_api/file_access/include/file_access_ext_ability.h +++ b/interfaces/inner_api/file_access/include/file_access_ext_ability.h @@ -62,8 +62,8 @@ public: virtual int GetFileInfoFromRelativePath(const std::string &selectFile, FileInfo &fileInfo); virtual int GetRoots(std::vector &rootInfoVec); virtual int Access(const Uri &uri, bool &isExist); - virtual int SetDefaultPath(const std::string &defaultPath); - virtual int GetDefaultPath(std::string &defaultPath); + virtual int SetDefaultSavePath(const std::string &defaultPath); + virtual int GetDefaultSavePath(std::string &defaultPath); static void SetCreator(const CreatorFunc& creator); virtual int StartWatcher(const Uri &uri); virtual int StopWatcher(const Uri &uri); diff --git a/interfaces/inner_api/file_access/include/file_access_ext_proxy.h b/interfaces/inner_api/file_access/include/file_access_ext_proxy.h index bc607a4b..5fe8d765 100644 --- a/interfaces/inner_api/file_access/include/file_access_ext_proxy.h +++ b/interfaces/inner_api/file_access/include/file_access_ext_proxy.h @@ -59,8 +59,8 @@ public: virtual int Access(const Uri &uri, bool &isExist) override; virtual int StartWatcher(const Uri &uri) override; virtual int StopWatcher(const Uri &uri) override; - virtual int SetDefaultPath(const std::string &defaultPath) override; - virtual int GetDefaultPath(std::string &defaultPath) override; + virtual int SetDefaultSavePath(const std::string &defaultPath) override; + virtual int GetDefaultSavePath(std::string &defaultPath) override; private: static inline BrokerDelegator delegator_; }; diff --git a/interfaces/inner_api/file_access/include/file_access_ext_stub.h b/interfaces/inner_api/file_access/include/file_access_ext_stub.h index e68f3f2a..0858781c 100644 --- a/interfaces/inner_api/file_access/include/file_access_ext_stub.h +++ b/interfaces/inner_api/file_access/include/file_access_ext_stub.h @@ -52,8 +52,8 @@ private: ErrCode CmdAccess(MessageParcel &data, MessageParcel &reply); ErrCode CmdStartWatcher(MessageParcel &data, MessageParcel &reply); ErrCode CmdStopWatcher(MessageParcel &data, MessageParcel &reply); - ErrCode CmdSetDefaultPath(MessageParcel &data, MessageParcel &reply); - ErrCode CmdGetDefaultPath(MessageParcel &data, MessageParcel &reply); + ErrCode CmdSetDefaultSavePath(MessageParcel &data, MessageParcel &reply); + ErrCode CmdGetDefaultSavePath(MessageParcel &data, MessageParcel &reply); bool CheckCallingPermission(const std::string &permission); using RequestFuncType = int (FileAccessExtStub::*)(MessageParcel &data, MessageParcel &reply); std::map stubFuncMap_; diff --git a/interfaces/inner_api/file_access/include/file_access_ext_stub_impl.h b/interfaces/inner_api/file_access/include/file_access_ext_stub_impl.h index a3a1acdd..c2c68482 100644 --- a/interfaces/inner_api/file_access/include/file_access_ext_stub_impl.h +++ b/interfaces/inner_api/file_access/include/file_access_ext_stub_impl.h @@ -56,8 +56,8 @@ public: int Access(const Uri &uri, bool &isExist) override; int StartWatcher(const Uri &uri) override; int StopWatcher(const Uri &uri) override; - int SetDefaultPath(const std::string &defaultPath) override; - int GetDefaultPath(std::string &defaultPath) override; + int SetDefaultSavePath(const std::string &defaultPath) override; + int GetDefaultSavePath(std::string &defaultPath) override; private: std::shared_ptr GetOwner(); std::shared_ptr extension_; diff --git a/interfaces/inner_api/file_access/include/file_access_helper.h b/interfaces/inner_api/file_access/include/file_access_helper.h index f7a9525a..6c8c5495 100644 --- a/interfaces/inner_api/file_access/include/file_access_helper.h +++ b/interfaces/inner_api/file_access/include/file_access_helper.h @@ -84,8 +84,8 @@ public: int GetFileInfoFromUri(Uri &selectFile, FileInfo &fileInfo); int GetFileInfoFromRelativePath(std::string &selectFile, FileInfo &fileInfo); int GetRoots(std::vector &rootInfoVec); - int SetDefaultPath(const std::string &path); - int GetDefaultPath(std::string &path); + int SetDefaultSavePath(const std::string &path); + int GetDefaultSavePath(std::string &path); private: int StartWatcher(Uri &uri); int StopWatcher(Uri &uri); diff --git a/interfaces/inner_api/file_access/include/ifile_access_ext_base.h b/interfaces/inner_api/file_access/include/ifile_access_ext_base.h index 40266f7c..c1edafb3 100644 --- a/interfaces/inner_api/file_access/include/ifile_access_ext_base.h +++ b/interfaces/inner_api/file_access/include/ifile_access_ext_base.h @@ -79,8 +79,8 @@ public: virtual int Access(const Uri &uri, bool &isExist) = 0; virtual int StartWatcher(const Uri &uri) = 0; virtual int StopWatcher(const Uri &uri) = 0; - virtual int SetDefaultPath(const std::string &defaultPath) = 0; - virtual int GetDefaultPath(std::string &defaultPath) = 0; + virtual int SetDefaultSavePath(const std::string &defaultPath) = 0; + virtual int GetDefaultSavePath(std::string &defaultPath) = 0; }; } // namespace FileAccessFwk } // namespace OHOS diff --git a/interfaces/inner_api/file_access/src/file_access_ext_ability.cpp b/interfaces/inner_api/file_access/src/file_access_ext_ability.cpp index 08338c15..e0ed9103 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_ability.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_ability.cpp @@ -171,15 +171,15 @@ int FileAccessExtAbility::Notify(Uri &uri, NotifyType notifyType) return EPERM; } -int FileAccessExtAbility::SetDefaultPath(const std::string &defaultPath) +int FileAccessExtAbility::SetDefaultSavePath(const std::string &defaultPath) { - HILOG_ERROR("FileAccessExtAbility::SetDefaultPath Undefined operation"); + HILOG_ERROR("FileAccessExtAbility::SetDefaultSavePath Undefined operation"); return EPERM; } -int FileAccessExtAbility::GetDefaultPath(std::string &defaultPath) +int FileAccessExtAbility::GetDefaultSavePath(std::string &defaultPath) { - HILOG_ERROR("FileAccessExtAbility::GetDefaultPath Undefined operation"); + HILOG_ERROR("FileAccessExtAbility::GetDefaultSavePath Undefined operation"); return EPERM; } } // namespace FileAccessFwk diff --git a/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp b/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp index 71e8435f..e1d88e9b 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -1028,9 +1028,9 @@ int FileAccessExtProxy::StopWatcher(const Uri &uri) return ret; } -int FileAccessExtProxy::SetDefaultPath(const std::string &defaultPath) +int FileAccessExtProxy::SetDefaultSavePath(const std::string &defaultPath) { - StartTrace(HITRACE_TAG_FILEMANAGEMENT, "SetDefaultPath"); + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "SetDefaultSavePath"); MessageParcel data; if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { HILOG_ERROR("WriteInterfaceToken failed"); @@ -1060,7 +1060,7 @@ int FileAccessExtProxy::SetDefaultPath(const std::string &defaultPath) } if (ret != ERR_OK) { - HILOG_ERROR("SetDefaultPath operation failed ret : %{public}d", ret); + HILOG_ERROR("SetDefaultSavePath operation failed ret : %{public}d", ret); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ret; } @@ -1069,9 +1069,9 @@ int FileAccessExtProxy::SetDefaultPath(const std::string &defaultPath) return ERR_OK; } -int FileAccessExtProxy::GetDefaultPath(std::string &defaultPath) +int FileAccessExtProxy::GetDefaultSavePath(std::string &defaultPath) { - StartTrace(HITRACE_TAG_FILEMANAGEMENT, "GetDefaultPath"); + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "GetDefaultSavePath"); MessageParcel data; if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { HILOG_ERROR("WriteInterfaceToken failed"); @@ -1095,7 +1095,7 @@ int FileAccessExtProxy::GetDefaultPath(std::string &defaultPath) } if (ret != ERR_OK) { - HILOG_ERROR("GetDefaultPath operation failed ret : %{public}d", ret); + HILOG_ERROR("GetDefaultSavePath operation failed ret : %{public}d", ret); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ret; } diff --git a/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp b/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp index fa5ab7eb..c653a048 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp @@ -60,8 +60,8 @@ FileAccessExtStub::FileAccessExtStub() stubFuncMap_[CMD_GET_THUMBNAIL] = &FileAccessExtStub::CmdGetThumbnail; stubFuncMap_[CMD_GET_FILEINFO_FROM_URI] = &FileAccessExtStub::CmdGetFileInfoFromUri; stubFuncMap_[CMD_GET_FILEINFO_FROM_RELATIVE_PATH] = &FileAccessExtStub::CmdGetFileInfoFromRelativePath; - stubFuncMap_[CMD_SET_DEFAULT_PATH] = &FileAccessExtStub::CmdSetDefaultPath; - stubFuncMap_[CMD_GET_DEFAULT_PATH] = &FileAccessExtStub::CmdGetDefaultPath; + stubFuncMap_[CMD_SET_DEFAULT_PATH] = &FileAccessExtStub::CmdSetDefaultSavePath; + stubFuncMap_[CMD_GET_DEFAULT_PATH] = &FileAccessExtStub::CmdGetDefaultSavePath; } FileAccessExtStub::~FileAccessExtStub() @@ -781,20 +781,20 @@ ErrCode FileAccessExtStub::CmdStopWatcher(MessageParcel &data, MessageParcel &re return ERR_OK; } -ErrCode FileAccessExtStub::CmdSetDefaultPath(MessageParcel &data, MessageParcel &reply) +ErrCode FileAccessExtStub::CmdSetDefaultSavePath(MessageParcel &data, MessageParcel &reply) { - StartTrace(HITRACE_TAG_FILEMANAGEMENT, "CmdSetDefaultPath"); + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "CmdSetDefaultSavePath"); std::string defaultPath; if (!data.ReadString(defaultPath)) { - HILOG_ERROR("Parameter CmdSetDefaultPath fail to ReadParcelable defaultPath"); + HILOG_ERROR("Parameter CmdSetDefaultSavePath fail to ReadParcelable defaultPath"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return E_IPCS; } - int ret = SetDefaultPath(defaultPath); + int ret = SetDefaultSavePath(defaultPath); if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter CmdSetDefaultPath fail to WriteInt32 ret"); + HILOG_ERROR("Parameter CmdSetDefaultSavePath fail to WriteInt32 ret"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return E_IPCS; } @@ -803,19 +803,19 @@ ErrCode FileAccessExtStub::CmdSetDefaultPath(MessageParcel &data, MessageParcel return ERR_OK; } -ErrCode FileAccessExtStub::CmdGetDefaultPath(MessageParcel &data, MessageParcel &reply) +ErrCode FileAccessExtStub::CmdGetDefaultSavePath(MessageParcel &data, MessageParcel &reply) { - StartTrace(HITRACE_TAG_FILEMANAGEMENT, "CmdGetDefaultPath"); + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "CmdGetDefaultSavePath"); std::string defaultPath; - int ret = GetDefaultPath(defaultPath); + int ret = GetDefaultSavePath(defaultPath); if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter CmdGetDefaultPath fail to WriteInt32 ret"); + HILOG_ERROR("Parameter CmdGetDefaultSavePath fail to WriteInt32 ret"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return E_IPCS; } if (!reply.WriteString(defaultPath)) { - HILOG_ERROR("Parameter CmdGetDefaultPath fail to WriteInt32 ret"); + HILOG_ERROR("Parameter CmdGetDefaultSavePath fail to WriteInt32 ret"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return E_IPCS; } diff --git a/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp b/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp index 2eef9b66..49b418ef 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp @@ -276,30 +276,30 @@ int FileAccessExtStubImpl::StopWatcher(const Uri &uri) return ret; } -int FileAccessExtStubImpl::SetDefaultPath(const std::string &defaultPath) +int FileAccessExtStubImpl::SetDefaultSavePath(const std::string &defaultPath) { - StartTrace(HITRACE_TAG_FILEMANAGEMENT, "SetDefaultPath"); + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "SetDefaultSavePath"); if (extension_ == nullptr) { - HILOG_ERROR("SetDefaultPath get extension failed."); + HILOG_ERROR("SetDefaultSavePath get extension failed."); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return E_IPCS; } - int ret = extension_->SetDefaultPath(defaultPath); + int ret = extension_->SetDefaultSavePath(defaultPath); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ret; } -int FileAccessExtStubImpl::GetDefaultPath(std::string &defaultPath) +int FileAccessExtStubImpl::GetDefaultSavePath(std::string &defaultPath) { - HILOG_INFO("FileAccessExtStubImpl::GetDefaultPath."); - StartTrace(HITRACE_TAG_FILEMANAGEMENT, "GetDefaultPath"); + HILOG_INFO("FileAccessExtStubImpl::GetDefaultSavePath."); + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "GetDefaultSavePath"); if (extension_ == nullptr) { - HILOG_ERROR("GetDefaultPath get extension failed."); + HILOG_ERROR("GetDefaultSavePath get extension failed."); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return E_IPCS; } - int ret = extension_->GetDefaultPath(defaultPath); + int ret = extension_->GetDefaultSavePath(defaultPath); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ret; } diff --git a/interfaces/inner_api/file_access/src/file_access_helper.cpp b/interfaces/inner_api/file_access/src/file_access_helper.cpp index 84063356..79b082f8 100644 --- a/interfaces/inner_api/file_access/src/file_access_helper.cpp +++ b/interfaces/inner_api/file_access/src/file_access_helper.cpp @@ -1005,11 +1005,11 @@ int FileAccessHelper::GetRoots(std::vector &rootInfoVec) return ERR_OK; } -int FileAccessHelper::SetDefaultPath(const std::string &path) +int FileAccessHelper::SetDefaultSavePath(const std::string &path) { - StartTrace(HITRACE_TAG_FILEMANAGEMENT, "SetDefaultPath"); + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "SetDefaultSavePath"); if (!IsSystemApp()) { - HILOG_ERROR("FileAccessHelper::SetDefaultPath check IsSystemAppByFullTokenID failed"); + HILOG_ERROR("FileAccessHelper::SetDefaultSavePath check IsSystemAppByFullTokenID failed"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return E_PERMISSION_SYS; } @@ -1027,9 +1027,9 @@ int FileAccessHelper::SetDefaultPath(const std::string &path) return E_IPCS; } - int ret = fileExtProxy->SetDefaultPath(path); + int ret = fileExtProxy->SetDefaultSavePath(path); if (ret != ERR_OK) { - HILOG_ERROR("SetDefaultPath get result error, code:%{public}d", ret); + HILOG_ERROR("SetDefaultSavePath get result error, code:%{public}d", ret); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ret; } @@ -1038,12 +1038,12 @@ int FileAccessHelper::SetDefaultPath(const std::string &path) return ERR_OK; } -int FileAccessHelper::GetDefaultPath(std::string &path) +int FileAccessHelper::GetDefaultSavePath(std::string &path) { - HILOG_INFO("FileAccessHelper::GetDefaultPath"); - StartTrace(HITRACE_TAG_FILEMANAGEMENT, "GetDefaultPath"); + HILOG_INFO("FileAccessHelper::GetDefaultSavePath"); + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "GetDefaultSavePath"); if (!IsSystemApp()) { - HILOG_ERROR("FileAccessHelper::GetDefaultPath check IsSystemAppByFullTokenID failed"); + HILOG_ERROR("FileAccessHelper::GetDefaultSavePath check IsSystemAppByFullTokenID failed"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return E_PERMISSION_SYS; } @@ -1055,9 +1055,9 @@ int FileAccessHelper::GetDefaultPath(std::string &path) return E_IPCS; } - int ret = fileExtProxy->GetDefaultPath(path); + int ret = fileExtProxy->GetDefaultSavePath(path); if (ret != ERR_OK) { - HILOG_ERROR("GetDefaultPath get result error, code:%{public}d", ret); + HILOG_ERROR("GetDefaultSavePath get result error, code:%{public}d", ret); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ret; } -- Gitee From f1287b7c20deb337478624efa4273bcba17fe83f Mon Sep 17 00:00:00 2001 From: yiny Date: Mon, 29 May 2023 13:38:10 +0800 Subject: [PATCH 3/6] =?UTF-8?q?uid=E4=BB=8Eapp=E4=BC=A0=E5=85=A5=20Signed-?= =?UTF-8?q?off-by:=20yiny=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../napi_fileaccess_helper.cpp | 32 +++++++++++++------ .../include/file_access_ext_ability.h | 4 +-- .../include/file_access_ext_proxy.h | 4 +-- .../include/file_access_ext_stub_impl.h | 4 +-- .../file_access/include/file_access_helper.h | 4 +-- .../include/ifile_access_ext_base.h | 4 +-- .../src/file_access_ext_ability.cpp | 4 +-- .../file_access/src/file_access_ext_proxy.cpp | 16 +++++++--- .../file_access/src/file_access_ext_stub.cpp | 18 ++++++++--- .../src/file_access_ext_stub_impl.cpp | 8 ++--- .../file_access/src/file_access_helper.cpp | 8 ++--- 11 files changed, 69 insertions(+), 37 deletions(-) diff --git a/frameworks/js/napi/file_access_module/napi_fileaccess_helper.cpp b/frameworks/js/napi/file_access_module/napi_fileaccess_helper.cpp index 47f7b1e0..5e31943b 100644 --- a/frameworks/js/napi/file_access_module/napi_fileaccess_helper.cpp +++ b/frameworks/js/napi/file_access_module/napi_fileaccess_helper.cpp @@ -1210,8 +1210,15 @@ napi_value NAPI_SetDefaultSavePath(napi_env env, napi_callback_info info) } bool succ = false; + int uid = 0; std::unique_ptr pathString; - std::tie(succ, pathString, std::ignore) = NVal(env, funcArg[NARG_POS::FIRST]).ToUTF8String(); + std::tie(succ, uid) = NVal(env, funcArg[NARG_POS::FIRST]).ToInt32(); + if (!succ) { + NError(EINVAL).ThrowErr(env); + return nullptr; + } + + std::tie(succ, pathString, std::ignore) = NVal(env, funcArg[NARG_POS::SECOND]).ToUTF8String(); if (!succ) { NError(EINVAL).ThrowErr(env); return nullptr; @@ -1224,9 +1231,9 @@ napi_value NAPI_SetDefaultSavePath(napi_env env, napi_callback_info info) } auto result = std::make_shared(); string defaultPath(pathString.get()); - auto cbExec = [defaultPath, result, fileAccessHelper]() -> NError { + auto cbExec = [uid, defaultPath, result, fileAccessHelper]() -> NError { std::string path(defaultPath); - int ret = fileAccessHelper->SetDefaultSavePath(path); + int ret = fileAccessHelper->SetDefaultSavePath(uid, path); *result = ERR_OK == ret; return NError(ret); }; @@ -1239,11 +1246,11 @@ napi_value NAPI_SetDefaultSavePath(napi_env env, napi_callback_info info) const std::string procedureName = "setDefaultSavePath"; NVal thisVar(env, funcArg.GetThisVar()); - if (funcArg.GetArgc() == NARG_CNT::ONE) { + if (funcArg.GetArgc() == NARG_CNT::TWO) { return NAsyncWorkPromise(env, thisVar).Schedule(procedureName, cbExec, cbComplete).val_; } - NVal cb(env, funcArg[NARG_POS::SECOND]); + NVal cb(env, funcArg[NARG_POS::THIRD]); if (!cb.TypeIs(napi_function)) { NError(EINVAL).ThrowErr(env); return nullptr; @@ -1264,9 +1271,16 @@ napi_value NAPI_GetDefaultSavePath(napi_env env, napi_callback_info info) NError(EINVAL).ThrowErr(env); return nullptr; } + bool succ = false; + int uid = 0; + std::tie(succ, uid) = NVal(env, funcArg[NARG_POS::FIRST]).ToInt32(); + if (!succ) { + NError(EINVAL).ThrowErr(env); + return nullptr; + } auto defaultPath = std::make_shared(); - auto cbExec = [defaultPath, fileAccessHelper]() -> NError { - int ret = fileAccessHelper->GetDefaultSavePath(*defaultPath); + auto cbExec = [uid, defaultPath, fileAccessHelper]() -> NError { + int ret = fileAccessHelper->GetDefaultSavePath(uid, *defaultPath); return NError(ret); }; @@ -1279,11 +1293,11 @@ napi_value NAPI_GetDefaultSavePath(napi_env env, napi_callback_info info) const std::string procedureName = "getDefaultSavePath"; NVal thisVar(env, funcArg.GetThisVar()); - if (funcArg.GetArgc() == NARG_CNT::ZERO) { + if (funcArg.GetArgc() == NARG_CNT::ONE) { return NAsyncWorkPromise(env, thisVar).Schedule(procedureName, cbExec, cbComplete).val_; } - NVal cb(env, funcArg[NARG_POS::FIRST]); + NVal cb(env, funcArg[NARG_POS::SECOND]); if (!cb.TypeIs(napi_function)) { NError(EINVAL).ThrowErr(env); return nullptr; diff --git a/interfaces/inner_api/file_access/include/file_access_ext_ability.h b/interfaces/inner_api/file_access/include/file_access_ext_ability.h index 7906b983..fa8d0423 100644 --- a/interfaces/inner_api/file_access/include/file_access_ext_ability.h +++ b/interfaces/inner_api/file_access/include/file_access_ext_ability.h @@ -62,8 +62,8 @@ public: virtual int GetFileInfoFromRelativePath(const std::string &selectFile, FileInfo &fileInfo); virtual int GetRoots(std::vector &rootInfoVec); virtual int Access(const Uri &uri, bool &isExist); - virtual int SetDefaultSavePath(const std::string &defaultPath); - virtual int GetDefaultSavePath(std::string &defaultPath); + virtual int SetDefaultSavePath(int uid, const std::string &defaultPath); + virtual int GetDefaultSavePath(int uid, std::string &defaultPath); static void SetCreator(const CreatorFunc& creator); virtual int StartWatcher(const Uri &uri); virtual int StopWatcher(const Uri &uri); diff --git a/interfaces/inner_api/file_access/include/file_access_ext_proxy.h b/interfaces/inner_api/file_access/include/file_access_ext_proxy.h index 5fe8d765..029253b6 100644 --- a/interfaces/inner_api/file_access/include/file_access_ext_proxy.h +++ b/interfaces/inner_api/file_access/include/file_access_ext_proxy.h @@ -59,8 +59,8 @@ public: virtual int Access(const Uri &uri, bool &isExist) override; virtual int StartWatcher(const Uri &uri) override; virtual int StopWatcher(const Uri &uri) override; - virtual int SetDefaultSavePath(const std::string &defaultPath) override; - virtual int GetDefaultSavePath(std::string &defaultPath) override; + virtual int SetDefaultSavePath(int uid, const std::string &defaultPath) override; + virtual int GetDefaultSavePath(int uid, std::string &defaultPath) override; private: static inline BrokerDelegator delegator_; }; diff --git a/interfaces/inner_api/file_access/include/file_access_ext_stub_impl.h b/interfaces/inner_api/file_access/include/file_access_ext_stub_impl.h index c2c68482..04005930 100644 --- a/interfaces/inner_api/file_access/include/file_access_ext_stub_impl.h +++ b/interfaces/inner_api/file_access/include/file_access_ext_stub_impl.h @@ -56,8 +56,8 @@ public: int Access(const Uri &uri, bool &isExist) override; int StartWatcher(const Uri &uri) override; int StopWatcher(const Uri &uri) override; - int SetDefaultSavePath(const std::string &defaultPath) override; - int GetDefaultSavePath(std::string &defaultPath) override; + int SetDefaultSavePath(int uid, const std::string &defaultPath) override; + int GetDefaultSavePath(int uid, std::string &defaultPath) override; private: std::shared_ptr GetOwner(); std::shared_ptr extension_; diff --git a/interfaces/inner_api/file_access/include/file_access_helper.h b/interfaces/inner_api/file_access/include/file_access_helper.h index 6c8c5495..0d698ed1 100644 --- a/interfaces/inner_api/file_access/include/file_access_helper.h +++ b/interfaces/inner_api/file_access/include/file_access_helper.h @@ -84,8 +84,8 @@ public: int GetFileInfoFromUri(Uri &selectFile, FileInfo &fileInfo); int GetFileInfoFromRelativePath(std::string &selectFile, FileInfo &fileInfo); int GetRoots(std::vector &rootInfoVec); - int SetDefaultSavePath(const std::string &path); - int GetDefaultSavePath(std::string &path); + int SetDefaultSavePath(int uid, const std::string &path); + int GetDefaultSavePath(int uid, std::string &path); private: int StartWatcher(Uri &uri); int StopWatcher(Uri &uri); diff --git a/interfaces/inner_api/file_access/include/ifile_access_ext_base.h b/interfaces/inner_api/file_access/include/ifile_access_ext_base.h index c1edafb3..d702328a 100644 --- a/interfaces/inner_api/file_access/include/ifile_access_ext_base.h +++ b/interfaces/inner_api/file_access/include/ifile_access_ext_base.h @@ -79,8 +79,8 @@ public: virtual int Access(const Uri &uri, bool &isExist) = 0; virtual int StartWatcher(const Uri &uri) = 0; virtual int StopWatcher(const Uri &uri) = 0; - virtual int SetDefaultSavePath(const std::string &defaultPath) = 0; - virtual int GetDefaultSavePath(std::string &defaultPath) = 0; + virtual int SetDefaultSavePath(int uid, const std::string &defaultPath) = 0; + virtual int GetDefaultSavePath(int uid, std::string &defaultPath) = 0; }; } // namespace FileAccessFwk } // namespace OHOS diff --git a/interfaces/inner_api/file_access/src/file_access_ext_ability.cpp b/interfaces/inner_api/file_access/src/file_access_ext_ability.cpp index e0ed9103..4760ca1a 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_ability.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_ability.cpp @@ -171,13 +171,13 @@ int FileAccessExtAbility::Notify(Uri &uri, NotifyType notifyType) return EPERM; } -int FileAccessExtAbility::SetDefaultSavePath(const std::string &defaultPath) +int FileAccessExtAbility::SetDefaultSavePath(int uid, const std::string &defaultPath) { HILOG_ERROR("FileAccessExtAbility::SetDefaultSavePath Undefined operation"); return EPERM; } -int FileAccessExtAbility::GetDefaultSavePath(std::string &defaultPath) +int FileAccessExtAbility::GetDefaultSavePath(int uid, std::string &defaultPath) { HILOG_ERROR("FileAccessExtAbility::GetDefaultSavePath Undefined operation"); return EPERM; diff --git a/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp b/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp index e1d88e9b..b71e486f 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp @@ -1028,7 +1028,7 @@ int FileAccessExtProxy::StopWatcher(const Uri &uri) return ret; } -int FileAccessExtProxy::SetDefaultSavePath(const std::string &defaultPath) +int FileAccessExtProxy::SetDefaultSavePath(int uid, const std::string &defaultPath) { StartTrace(HITRACE_TAG_FILEMANAGEMENT, "SetDefaultSavePath"); MessageParcel data; @@ -1037,7 +1037,11 @@ int FileAccessExtProxy::SetDefaultSavePath(const std::string &defaultPath) FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return E_IPCS; } - + if (!data.WriteInt32(uid)) { + HILOG_ERROR("fail to WriteParcelable defaultPath"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_IPCS; + } if (!data.WriteString(defaultPath)) { HILOG_ERROR("fail to WriteParcelable defaultPath"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); @@ -1069,7 +1073,7 @@ int FileAccessExtProxy::SetDefaultSavePath(const std::string &defaultPath) return ERR_OK; } -int FileAccessExtProxy::GetDefaultSavePath(std::string &defaultPath) +int FileAccessExtProxy::GetDefaultSavePath(int uid, std::string &defaultPath) { StartTrace(HITRACE_TAG_FILEMANAGEMENT, "GetDefaultSavePath"); MessageParcel data; @@ -1078,7 +1082,11 @@ int FileAccessExtProxy::GetDefaultSavePath(std::string &defaultPath) FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return E_IPCS; } - + if (!data.WriteInt32(uid)) { + HILOG_ERROR("fail to WriteParcelable defaultPath"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_IPCS; + } MessageParcel reply; MessageOption option; int err = Remote()->SendRequest(CMD_GET_DEFAULT_PATH, data, reply, option); diff --git a/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp b/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp index c653a048..79400b58 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp @@ -785,14 +785,19 @@ ErrCode FileAccessExtStub::CmdSetDefaultSavePath(MessageParcel &data, MessagePar { StartTrace(HITRACE_TAG_FILEMANAGEMENT, "CmdSetDefaultSavePath"); std::string defaultPath; - + int uid = 0; + if (!data.ReadInt32(uid)) { + HILOG_ERROR("Parameter CmdSetDefaultSavePath fail to ReadParcelable uid"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_IPCS; + } if (!data.ReadString(defaultPath)) { HILOG_ERROR("Parameter CmdSetDefaultSavePath fail to ReadParcelable defaultPath"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return E_IPCS; } - int ret = SetDefaultSavePath(defaultPath); + int ret = SetDefaultSavePath(uid, defaultPath); if (!reply.WriteInt32(ret)) { HILOG_ERROR("Parameter CmdSetDefaultSavePath fail to WriteInt32 ret"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); @@ -807,8 +812,13 @@ ErrCode FileAccessExtStub::CmdGetDefaultSavePath(MessageParcel &data, MessagePar { StartTrace(HITRACE_TAG_FILEMANAGEMENT, "CmdGetDefaultSavePath"); std::string defaultPath; - - int ret = GetDefaultSavePath(defaultPath); + int uid = 0; + if (!data.ReadInt32(uid)) { + HILOG_ERROR("Parameter CmdGetDefaultSavePath fail to ReadParcelable uid"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_IPCS; + } + int ret = GetDefaultSavePath(uid, defaultPath); if (!reply.WriteInt32(ret)) { HILOG_ERROR("Parameter CmdGetDefaultSavePath fail to WriteInt32 ret"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); diff --git a/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp b/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp index 49b418ef..fd129fb1 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp @@ -276,7 +276,7 @@ int FileAccessExtStubImpl::StopWatcher(const Uri &uri) return ret; } -int FileAccessExtStubImpl::SetDefaultSavePath(const std::string &defaultPath) +int FileAccessExtStubImpl::SetDefaultSavePath(int uid, const std::string &defaultPath) { StartTrace(HITRACE_TAG_FILEMANAGEMENT, "SetDefaultSavePath"); if (extension_ == nullptr) { @@ -284,12 +284,12 @@ int FileAccessExtStubImpl::SetDefaultSavePath(const std::string &defaultPath) FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return E_IPCS; } - int ret = extension_->SetDefaultSavePath(defaultPath); + int ret = extension_->SetDefaultSavePath(uid, defaultPath); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ret; } -int FileAccessExtStubImpl::GetDefaultSavePath(std::string &defaultPath) +int FileAccessExtStubImpl::GetDefaultSavePath(int uid, std::string &defaultPath) { HILOG_INFO("FileAccessExtStubImpl::GetDefaultSavePath."); StartTrace(HITRACE_TAG_FILEMANAGEMENT, "GetDefaultSavePath"); @@ -299,7 +299,7 @@ int FileAccessExtStubImpl::GetDefaultSavePath(std::string &defaultPath) return E_IPCS; } - int ret = extension_->GetDefaultSavePath(defaultPath); + int ret = extension_->GetDefaultSavePath(uid, defaultPath); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ret; } diff --git a/interfaces/inner_api/file_access/src/file_access_helper.cpp b/interfaces/inner_api/file_access/src/file_access_helper.cpp index 79b082f8..135525a4 100644 --- a/interfaces/inner_api/file_access/src/file_access_helper.cpp +++ b/interfaces/inner_api/file_access/src/file_access_helper.cpp @@ -1005,7 +1005,7 @@ int FileAccessHelper::GetRoots(std::vector &rootInfoVec) return ERR_OK; } -int FileAccessHelper::SetDefaultSavePath(const std::string &path) +int FileAccessHelper::SetDefaultSavePath(int uid, const std::string &path) { StartTrace(HITRACE_TAG_FILEMANAGEMENT, "SetDefaultSavePath"); if (!IsSystemApp()) { @@ -1027,7 +1027,7 @@ int FileAccessHelper::SetDefaultSavePath(const std::string &path) return E_IPCS; } - int ret = fileExtProxy->SetDefaultSavePath(path); + int ret = fileExtProxy->SetDefaultSavePath(uid, path); if (ret != ERR_OK) { HILOG_ERROR("SetDefaultSavePath get result error, code:%{public}d", ret); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); @@ -1038,7 +1038,7 @@ int FileAccessHelper::SetDefaultSavePath(const std::string &path) return ERR_OK; } -int FileAccessHelper::GetDefaultSavePath(std::string &path) +int FileAccessHelper::GetDefaultSavePath(int uid, std::string &path) { HILOG_INFO("FileAccessHelper::GetDefaultSavePath"); StartTrace(HITRACE_TAG_FILEMANAGEMENT, "GetDefaultSavePath"); @@ -1055,7 +1055,7 @@ int FileAccessHelper::GetDefaultSavePath(std::string &path) return E_IPCS; } - int ret = fileExtProxy->GetDefaultSavePath(path); + int ret = fileExtProxy->GetDefaultSavePath(uid, path); if (ret != ERR_OK) { HILOG_ERROR("GetDefaultSavePath get result error, code:%{public}d", ret); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); -- Gitee From 050d7ad38daf8b640e0bebacd2521af4ed320f17 Mon Sep 17 00:00:00 2001 From: yiny Date: Mon, 29 May 2023 13:38:10 +0800 Subject: [PATCH 4/6] =?UTF-8?q?uid=E4=BB=8Eapp=E4=BC=A0=E5=85=A5=20Signed-?= =?UTF-8?q?off-by:=20yiny=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I10863aeed680a4c45b1fa469d26cb8d245f4f1dc --- .../js/napi/file_access_module/napi_fileaccess_helper.cpp | 6 +++--- .../inner_api/file_access/src/file_access_ext_proxy.cpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/frameworks/js/napi/file_access_module/napi_fileaccess_helper.cpp b/frameworks/js/napi/file_access_module/napi_fileaccess_helper.cpp index 5e31943b..00b87d68 100644 --- a/frameworks/js/napi/file_access_module/napi_fileaccess_helper.cpp +++ b/frameworks/js/napi/file_access_module/napi_fileaccess_helper.cpp @@ -1204,7 +1204,7 @@ napi_value NAPI_GetThumbnail(napi_env env, napi_callback_info info) napi_value NAPI_SetDefaultSavePath(napi_env env, napi_callback_info info) { NFuncArg funcArg(env, info); - if (!funcArg.InitArgs(NARG_CNT::ONE, NARG_CNT::TWO)) { + if (!funcArg.InitArgs(NARG_CNT::TWO, NARG_CNT::THREE)) { NError(EINVAL).ThrowErr(env); return nullptr; } @@ -1241,7 +1241,7 @@ napi_value NAPI_SetDefaultSavePath(napi_env env, napi_callback_info info) if (err) { return { env, err.GetNapiErr(env) }; } - return { NVal::CreateBool(env, *result) }; + return { NVal::CreateUndefined(env) }; }; const std::string procedureName = "setDefaultSavePath"; @@ -1261,7 +1261,7 @@ napi_value NAPI_SetDefaultSavePath(napi_env env, napi_callback_info info) napi_value NAPI_GetDefaultSavePath(napi_env env, napi_callback_info info) { NFuncArg funcArg(env, info); - if (!funcArg.InitArgs(NARG_CNT::ZERO, NARG_CNT::ONE)) { + if (!funcArg.InitArgs(NARG_CNT::ONE, NARG_CNT::TWO)) { NError(EINVAL).ThrowErr(env); return nullptr; } diff --git a/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp b/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp index b71e486f..966d6579 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp @@ -1073,7 +1073,7 @@ int FileAccessExtProxy::SetDefaultSavePath(int uid, const std::string &defaultPa return ERR_OK; } -int FileAccessExtProxy::GetDefaultSavePath(int uid, std::string &defaultPath) +int FileAccessExtProxy::GetDefaultSavePath(std::string &defaultPath) { StartTrace(HITRACE_TAG_FILEMANAGEMENT, "GetDefaultSavePath"); MessageParcel data; -- Gitee From e4e84d5ed410409dc0705f572b9caab3fb78a414 Mon Sep 17 00:00:00 2001 From: yiny Date: Tue, 16 May 2023 09:48:18 +0800 Subject: [PATCH 5/6] add savepath Signed-off-by: yiny Change-Id: I8fd17b80c7c840c60141550c6ca441670e40a38a --- .../inner_api/file_access/include/ifile_access_ext_base.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/inner_api/file_access/include/ifile_access_ext_base.h b/interfaces/inner_api/file_access/include/ifile_access_ext_base.h index d702328a..d4808a10 100644 --- a/interfaces/inner_api/file_access/include/ifile_access_ext_base.h +++ b/interfaces/inner_api/file_access/include/ifile_access_ext_base.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2023 Huawei Device Co., Ltd. + * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at -- Gitee From 79d957113cc506e7c6818806e1c462cc50096918 Mon Sep 17 00:00:00 2001 From: yiny Date: Wed, 24 May 2023 09:13:39 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86TDD=20=E4=B8=8E?= =?UTF-8?q?=20JS=E8=B0=83=E7=94=A8=E7=9A=84=E4=BB=A3=E7=A0=81,=E4=B8=8D?= =?UTF-8?q?=E8=83=BD=E7=BC=96=E8=AF=91=E9=80=9A=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: yiny Change-Id: If11f6b1e89f26a2a2db5ea57d5a31f4b4f84742e --- .../src/js_file_access_ext_ability.cpp | 85 ++++++++++++++ test/unittest/external_file_access_test.cpp | 107 +++++++++++++++++- 2 files changed, 191 insertions(+), 1 deletion(-) diff --git a/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp b/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp index 333bb11d..c9c70d33 100644 --- a/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp +++ b/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp @@ -1131,6 +1131,91 @@ int JsFileAccessExtAbility::Query(const Uri &uri, std::vector &colu return ERR_OK; } +int JsFileAccessExtAbility::SetDefaultPath(const std::string &defaultPath) +{ + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "SetDefaultPath"); + auto ret = std::make_shared(); + if (ret == nullptr) { + HILOG_ERROR("SetDefaultPath value is nullptr."); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_GETRESULT; + } + + auto argParser = [path = defaultPath](NativeEngine &engine, NativeValue *argv[], size_t &argc) -> bool { + NativeValue *nativePath = engine.CreateString(path.c_str(), path.length()); + if (nativePath == nullptr) { + HILOG_ERROR("create defaultPath uri native js value fail."); + return false; + } + argv[ARGC_ZERO] = nativePath; + argc = ARGC_ONE; + return true; + }; + auto retParser = [ret](NativeEngine &engine, NativeValue *result) -> bool { + bool res = ConvertFromJsValue(engine, result, *ret); + if (!res) { + HILOG_ERROR("Convert js value fail."); + } + return res; + }; + + auto errCode = CallJsMethod("SetDefaultPath", jsRuntime_, jsObj_.get(), argParser, retParser); + if (errCode != ERR_OK) { + HILOG_ERROR("CallJsMethod error, code:%{public}d.", errCode); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return errCode; + } + + if (*ret != ERR_OK) { + HILOG_ERROR("fileio fail."); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return *ret; + } + + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ERR_OK; +} + +int JsFileAccessExtAbility::GetDefaultPath(std::string &defaultPath) +{ + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "GetDefaultPath"); + auto ret = std::make_shared(); + auto retPath = std::make_shared(); + if (ret == nullptr) { + HILOG_ERROR("GetDefaultPath value is nullptr."); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_GETRESULT; + } + + auto argParser = [](NativeEngine &engine, NativeValue *argv[], size_t &argc) -> bool { + argc = ARGC_ZERO; + return true; + }; + auto retParser = [ret, retPath](NativeEngine &engine, NativeValue *result) -> bool { + bool res = ConvertFromJsValue(engine, result, *retPath); + if (!res) { + HILOG_ERROR("Convert js value fail."); + } + return res; + }; + + auto errCode = CallJsMethod("GetDefaultPath", jsRuntime_, jsObj_.get(), argParser, retParser); + if (errCode != ERR_OK) { + HILOG_ERROR("CallJsMethod error, code:%{public}d.", errCode); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return errCode; + } + defaultPath = *retPath; + if (*ret != ERR_OK) { + HILOG_ERROR("fileio fail."); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return *ret; + } + + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ERR_OK; +} + int JsFileAccessExtAbility::GetFileInfoFromUri(const Uri &selectFile, FileInfo &fileInfo) { StartTrace(HITRACE_TAG_FILEMANAGEMENT, "GetFileInfoFromUri"); diff --git a/test/unittest/external_file_access_test.cpp b/test/unittest/external_file_access_test.cpp index 43b1ef94..60305c8b 100644 --- a/test/unittest/external_file_access_test.cpp +++ b/test/unittest/external_file_access_test.cpp @@ -3901,4 +3901,109 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_Query_0007, testing::ext: } GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Query_0007"; } -} // namespace \ No newline at end of file + +/** + * @tc.number: user_file_service_external_file_access_SetDefaultPath_0001 + * @tc.name: external_file_access_SetDefaultPath_0001 + * @tc.desc: Test function of SetDefaultPath interface for ERROR which path is empty. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000H0387 + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_SetDefaultPath_0001, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_SetDefaultPath_0001"; + try { + int result = g_fah->SetDefaultPath(""); + EXPECT_EQ(result, E_URIS); + GTEST_LOG_(INFO) << "SetDefaultPath_0001 result:" << result; + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_SetDefaultPath_0001 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_SetDefaultPath_0001"; +} + +/** + * @tc.number: user_file_service_external_file_access_SetDefaultPath_0002 + * @tc.name: external_file_access_SetDefaultPath_0002 + * @tc.desc: Test function of SetDefaultPath interface for ERROR which path not is empty. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000H0387 + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_SetDefaultPath_0002, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_SetDefaultPath_0002"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri destUri(info[0].uri); + GTEST_LOG_(INFO) << destUri.ToString(); + result = g_fah->SetDefaultPath(destUri.ToString()); + EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); //IPC + GTEST_LOG_(INFO) << "SetDefaultPath_0002 result:" << result;//1 + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_SetDefaultPath_0002 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_SetDefaultPath_0002"; +} + +/** + * @tc.number: user_file_service_external_file_access_GetDefaultPath_0001 + * @tc.name: external_file_access_GetDefaultPath_0001 + * @tc.desc: Test function of GetDefaultPath interface for ERROR which path not is empty. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000H0387 + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_GetDefaultPath_0001, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_GetDefaultPath_0001"; + try { + std::string path; + int result = g_fah->GetDefaultPath(path); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); // + GTEST_LOG_(INFO) << "GetDefaultPath_0001 result:" << result;//14300001 + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_GetDefaultPath_0001 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_GetDefaultPath_0001"; +} + +/** + * @tc.number: user_file_service_external_file_access_GetDefaultPath_0002 + * @tc.name: external_file_access_GetDefaultPath_0002 + * @tc.desc: Test function of GetDefaultPath interface for ERROR which path not is empty. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000H0387 + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_GetDefaultPath_0002, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_GetDefaultPath_0002"; + try { + + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri destUri(info[0].uri); + GTEST_LOG_(INFO) << destUri.ToString();//14300001 + result = g_fah->SetDefaultPath(destUri.ToString()); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + std::string path; + result = g_fah->GetDefaultPath(path); + GTEST_LOG_(INFO) << "GetDefaultPath:" << path; + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(destUri.ToString(), path); + GTEST_LOG_(INFO) << "GetDefaultPath_0002 result:" << result; + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_GetDefaultPath_0002 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_GetDefaultPath_0002"; +} +} // namespace -- Gitee