From 98d9f2f76db2245fb934706c4b5f457aafb6d7e4 Mon Sep 17 00:00:00 2001 From: BrainL Date: Sat, 30 Aug 2025 10:35:54 +0800 Subject: [PATCH] afs taihe 0702 to 0728 Signed-off-by: BrainL --- .../taihe/fileshare/src/fileshare_taihe.cpp | 79 ++++++++++++++----- interfaces/kits/taihe/fileuri/BUILD.gn | 5 +- .../taihe/fileuri/idl/ohos.file.fileuri.taihe | 23 ++++-- .../kits/taihe/fileuri/idl/ohos.fileuri.taihe | 20 +++++ .../taihe/fileuri/include/fileuri_taihe.h | 9 ++- .../kits/taihe/fileuri/src/fileuri_taihe.cpp | 10 +-- 6 files changed, 112 insertions(+), 34 deletions(-) create mode 100644 interfaces/kits/taihe/fileuri/idl/ohos.fileuri.taihe diff --git a/interfaces/kits/taihe/fileshare/src/fileshare_taihe.cpp b/interfaces/kits/taihe/fileshare/src/fileshare_taihe.cpp index 65f4a3cb6..5f101495b 100644 --- a/interfaces/kits/taihe/fileshare/src/fileshare_taihe.cpp +++ b/interfaces/kits/taihe/fileshare/src/fileshare_taihe.cpp @@ -52,6 +52,44 @@ const std::string FILE_NOPS = ""; const std::string FILE_READ = "r"; const std::string FILE_WRITE = "w"; +static int32_t ErrorCodeConversion(int32_t errorCode) +{ + int32_t errCode = ERR_UNKNOWN; + switch (errorCode) { + case static_cast(ERR_OK): + errCode = ERR_OK; + break; + case static_cast(ERR_PERMISSION_ERROR): + errCode = ERR_PERMISSION_ERROR; + break; + case static_cast(ERR_PARAMS): + errCode = ERR_PARAMS; + break; + case EPERM: + errCode = ERR_EPERM; + break; + default: + break; + } + return errCode; +} + +static std::string GetErrorMessage(int32_t errorCode) +{ + switch (errorCode) { + case ERR_DEVICE_NOT_SUPPORTED: + return "The device doesn't support this api"; + case ERR_EPERM: + return "Operation not permitted"; + case ERR_PERMISSION_ERROR: + return "Permission verification failed"; + case ERR_PARAMS: + return "Parameter error"; + default: + return "Unknown error"; + } +} + ohos::fileshare::fileShare::PolicyInfo MakePolicyInfo(taihe::string_view uri, int32_t operationMode) { return {uri, operationMode}; @@ -120,22 +158,24 @@ void ActivatePermissionSync(taihe::array_view uriPolicies; if (GetUriPoliciesArg(policies, uriPolicies)) { LOGE("Failed to get URI policies"); - taihe::set_business_error(OHOS::FileManagement::LibN::E_PARAMS, "Failed to get URI policies"); + taihe::set_business_error(ErrorCodeConversion(OHOS::FileManagement::LibN::E_PARAMS), + GetErrorMessage(OHOS::FileManagement::LibN::E_PARAMS)); return; } std::shared_ptr arg = std::make_shared(); if (arg == nullptr) { LOGE("PolicyErrorArgs make make_shared failed"); - taihe::set_business_error(OHOS::FileManagement::LibN::E_UNKNOWN_ERROR, - "PolicyErrorArgs make make_shared failed"); + taihe::set_business_error(ErrorCodeConversion(OHOS::FileManagement::LibN::E_UNKNOWN_ERROR), + GetErrorMessage(OHOS::FileManagement::LibN::E_UNKNOWN_ERROR)); return; } - arg->errNo = OHOS::AppFileService::FilePermission::ActivatePermission(uriPolicies, arg->errorResults); + auto errCode = OHOS::AppFileService::FilePermission::ActivatePermission(uriPolicies, arg->errorResults); + arg->errNo = ErrorCodeConversion(errCode); if (arg->errNo) { LOGE("Activation failed"); - taihe::set_business_error(arg->errNo, "Activation failed"); + taihe::set_business_error(arg->errNo, GetErrorMessage(arg->errNo)); } } @@ -144,22 +184,24 @@ void DeactivatePermissionSync(taihe::array_view uriPolicies; if (GetUriPoliciesArg(policies, uriPolicies)) { LOGE("Failed to get URI policies"); - taihe::set_business_error(OHOS::FileManagement::LibN::E_PARAMS, "Failed to get URI policies"); + taihe::set_business_error(ErrorCodeConversion(OHOS::FileManagement::LibN::E_PARAMS), + GetErrorMessage(OHOS::FileManagement::LibN::E_PARAMS)); return; } std::shared_ptr arg = std::make_shared(); if (arg == nullptr) { LOGE("PolicyErrorArgs make make_shared failed"); - taihe::set_business_error(OHOS::FileManagement::LibN::E_UNKNOWN_ERROR, - "PolicyErrorArgs make make_shared failed"); + taihe::set_business_error(ErrorCodeConversion(OHOS::FileManagement::LibN::E_UNKNOWN_ERROR), + GetErrorMessage(OHOS::FileManagement::LibN::E_UNKNOWN_ERROR)); return; } - arg->errNo = OHOS::AppFileService::FilePermission::DeactivatePermission(uriPolicies, arg->errorResults); + auto errCode = OHOS::AppFileService::FilePermission::DeactivatePermission(uriPolicies, arg->errorResults); + arg->errNo = ErrorCodeConversion(errCode); if (arg->errNo) { LOGE("Deactivation failed"); - taihe::set_business_error(arg->errNo, "Deactivation failed"); + taihe::set_business_error(arg->errNo, GetErrorMessage(arg->errNo)); return; } } @@ -304,8 +346,8 @@ void GrantUriPermissionSync(taihe::string_view uri, taihe::string_view bundleNam LOGD("fileShare::GrantUriPermission begin!"); if (!IsSystemApp()) { LOGE("fileShare::GrantUriPermission is not System App!"); - taihe::set_business_error(OHOS::FileManagement::LibN::E_PERMISSION_SYS, - "fileShare::GrantUriPermission is not System App!"); + taihe::set_business_error(ErrorCodeConversion(OHOS::FileManagement::LibN::E_PERMISSION_SYS), + GetErrorMessage(OHOS::FileManagement::LibN::E_PERMISSION_SYS)); return; } @@ -334,7 +376,7 @@ void GrantUriPermissionSync(taihe::string_view uri, taihe::string_view bundleNam int ret = DoGrantUriPermission(uriPermInfo); if (ret < 0) { LOGE("fileShare::GrantUriPermission DoGrantUriPermission failed with %{public}d", ret); - taihe::set_business_error(-ret, "fileShare::GrantUriPermission failed"); + taihe::set_business_error(ErrorCodeConversion(-ret), GetErrorMessage(-ret)); } } @@ -344,16 +386,16 @@ taihe::array CheckPathPermissionSync(int32_t tokenID, { if (!IsSystemApp()) { LOGE("fileShare::CheckPathPermissionSync is not System App!"); - taihe::set_business_error(OHOS::FileManagement::LibN::E_PERMISSION_SYS, - "fileShare::CheckPathPermissionSync is not System App!"); + taihe::set_business_error(ErrorCodeConversion(OHOS::FileManagement::LibN::E_PERMISSION_SYS), + GetErrorMessage(OHOS::FileManagement::LibN::E_PERMISSION_SYS)); return taihe::array::make(0); } int32_t callerTokenId = static_cast(OHOS::IPCSkeleton::GetCallingTokenID()); if (tokenID != callerTokenId) { if (!CheckTokenIdPermission(callerTokenId, "ohos.permission.CHECK_SANDBOX_POLICY")) { - taihe::set_business_error(OHOS::FileManagement::LibN::E_PERMISSION, - "fileShare::CheckPathPermissionSync checkPermission failed!"); + taihe::set_business_error(ErrorCodeConversion(OHOS::FileManagement::LibN::E_PERMISSION), + GetErrorMessage(OHOS::FileManagement::LibN::E_PERMISSION)); return taihe::array::make(0); } } @@ -380,8 +422,7 @@ taihe::array CheckPathPermissionSync(int32_t tokenID, taihe::set_business_error(arg->errNo, "Activation failed."); return taihe::array::make(0); } - taihe::array result(taihe::copy_data_t{}, arg->resultData.begin(), arg->resultData.size()); - return result; + return taihe::array(taihe::copy_data_t{}, arg->resultData.begin(), arg->resultData.size()); } } // namespace diff --git a/interfaces/kits/taihe/fileuri/BUILD.gn b/interfaces/kits/taihe/fileuri/BUILD.gn index f2f815cf4..f638ebf16 100644 --- a/interfaces/kits/taihe/fileuri/BUILD.gn +++ b/interfaces/kits/taihe/fileuri/BUILD.gn @@ -21,7 +21,10 @@ subsystem_name = "filemanagement" taihe_generated_file_path = "$taihe_file_path/out/$subsystem_name/$part_name/fileuri" copy_taihe_idl("copy_taihe") { - sources = [ "${app_file_service_path}/interfaces/kits/taihe/fileuri/idl/ohos.file.fileuri.taihe" ] + sources = [ + "${app_file_service_path}/interfaces/kits/taihe/fileuri/idl/ohos.file.fileuri.taihe", + "${app_file_service_path}/interfaces/kits/taihe/fileuri/idl/ohos.fileuri.taihe" + ] } ohos_taihe("run_taihe") { diff --git a/interfaces/kits/taihe/fileuri/idl/ohos.file.fileuri.taihe b/interfaces/kits/taihe/fileuri/idl/ohos.file.fileuri.taihe index b2c25a848..9b5488718 100644 --- a/interfaces/kits/taihe/fileuri/idl/ohos.file.fileuri.taihe +++ b/interfaces/kits/taihe/fileuri/idl/ohos.file.fileuri.taihe @@ -20,12 +20,25 @@ static { loadLibrary("file_fileuri_taihe.z"); } """) @class -interface FileUri { - @get("name") - getName(): String; +interface FileUriInner { + @get getName(): String; } -@ctor("FileUri") -function makeFileUri(name: String): FileUri; +function createFileUri(name: String): FileUriInner; function getUriFromPath(path: String): String; + +@!sts_inject(""" + +export class FileUri extends uri.URI{ + inner: FileUriInner; + constructor(uri: String) { + super(uri); + this.inner = createFileUri(uri); + } + get name(): string { + return this.inner.name; + } +} + +""") \ No newline at end of file diff --git a/interfaces/kits/taihe/fileuri/idl/ohos.fileuri.taihe b/interfaces/kits/taihe/fileuri/idl/ohos.fileuri.taihe new file mode 100644 index 000000000..e732e5d8d --- /dev/null +++ b/interfaces/kits/taihe/fileuri/idl/ohos.fileuri.taihe @@ -0,0 +1,20 @@ +/* +* Copyright (c) 2025 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 +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +@!namespace("@ohos.file.fileuri") + +@!sts_inject(""" +import uri from '@ohos.uri'; +""") \ No newline at end of file diff --git a/interfaces/kits/taihe/fileuri/include/fileuri_taihe.h b/interfaces/kits/taihe/fileuri/include/fileuri_taihe.h index a6bc30905..f9e94dc88 100644 --- a/interfaces/kits/taihe/fileuri/include/fileuri_taihe.h +++ b/interfaces/kits/taihe/fileuri/include/fileuri_taihe.h @@ -21,14 +21,15 @@ #include "ohos.file.fileuri.impl.hpp" #include "taihe/runtime.hpp" #include "file_uri.h" +#include "uri.h" namespace ANI::FileUri { -class FileUriImpl { +class FileUriInner { public: - FileUriImpl() = delete; + FileUriInner() = delete; - FileUriImpl(taihe::string_view name); + FileUriInner(taihe::string_view name); std::string getName(); @@ -36,7 +37,7 @@ private: OHOS::Uri uri_; }; -ohos::file::fileuri::FileUri makeFileUri(taihe::string_view name); +ohos::file::fileuri::FileUriInner createFileUri(taihe::string_view name); std::string getUriFromPath(taihe::string_view path); } // ANI::FileUri diff --git a/interfaces/kits/taihe/fileuri/src/fileuri_taihe.cpp b/interfaces/kits/taihe/fileuri/src/fileuri_taihe.cpp index 783f8b682..59aaf85fa 100644 --- a/interfaces/kits/taihe/fileuri/src/fileuri_taihe.cpp +++ b/interfaces/kits/taihe/fileuri/src/fileuri_taihe.cpp @@ -23,13 +23,13 @@ namespace ANI::FileUri { const std::string FILE_SCHEME_PREFIX_TAIHE = "file://"; const std::string FILE_FILEURI_FAILED = ""; -FileUriImpl::FileUriImpl(taihe::string_view name) +FileUriInner::FileUriInner(taihe::string_view name) : uri_((std::string(name.c_str()).find(FILE_SCHEME_PREFIX_TAIHE) == 0) ? std::string(name.c_str()) : OHOS::AppFileService::CommonFunc::GetUriFromPath(std::string(name.c_str()))) { } -std::string FileUriImpl::getName() +std::string FileUriInner::getName() { std::string sandboxPath = OHOS::AppFileService::SandboxHelper::Decode(uri_.GetPath()); size_t posLast = sandboxPath.find_last_of("/"); @@ -42,9 +42,9 @@ std::string FileUriImpl::getName() return sandboxPath.substr(posLast + 1); } -ohos::file::fileuri::FileUri makeFileUri(taihe::string_view name) +ohos::file::fileuri::FileUriInner createFileUri(taihe::string_view name) { - return taihe::make_holder(name); + return taihe::make_holder(name); } std::string getUriFromPath(taihe::string_view path) @@ -55,5 +55,5 @@ std::string getUriFromPath(taihe::string_view path) } } // namespace ANI::FileUri -TH_EXPORT_CPP_API_makeFileUri(ANI::FileUri::makeFileUri); +TH_EXPORT_CPP_API_createFileUri(ANI::FileUri::createFileUri); TH_EXPORT_CPP_API_getUriFromPath(ANI::FileUri::getUriFromPath); -- Gitee