diff --git a/interfaces/kits/taihe/fileshare/src/fileshare_taihe.cpp b/interfaces/kits/taihe/fileshare/src/fileshare_taihe.cpp index 65f4a3cb65fb3bf3814c3b4bf15bf91388d08066..5f101495b0da1ac460e48027b986efade5748eda 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 f2f815cf48d74051f2e976d3c1c56c5c44ba653c..f638ebf1615b0d1539c734df268ac7a71adfe613 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 b2c25a8481a8a97a545e1b760ee18586f1f1af1b..9b54887185b9fcaaeaa0c8e8914e3105c0aaf5e1 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 0000000000000000000000000000000000000000..e732e5d8da6ab6142ff62e952de4c5f70eb05a4c --- /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 a6bc3090531e8a2b36b5b3fad1293fa5ed548eed..f9e94dc88a944a6b9ba489ac6ef42466c9373e42 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 783f8b682000be0681ceb36c23c3bb9a5ac115b0..59aaf85faaf8fde3d5d93e0b5430f08ba8bfc34f 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);