From f1d4895c96b9c7465ab7c854c993d9f7b2bf1303 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Sat, 6 May 2023 02:09:15 +0000 Subject: [PATCH 01/48] add scanfile Signed-off-by: CaoChuan --- .../include/js_file_access_ext_ability.h | 2 + .../src/js_file_access_ext_ability.cpp | 83 +++++++++++++++++++ 2 files changed, 85 insertions(+) diff --git a/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h b/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h index 097771a2..3548e582 100644 --- a/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h +++ b/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h @@ -68,6 +68,8 @@ public: int Rename(const Uri &sourceFile, const std::string &displayName, Uri &newFile) override; int ListFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, const FileFilter &filter, std::vector &fileInfoVec) override; + int ScanFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, const FileFilter &filter, + std::vector &fileInfoVec) override; int GetFileInfoFromUri(const Uri &selectFile, FileInfo &fileInfo) override; int GetRoots(std::vector &rootInfoVec) override; int Access(const Uri &uri, bool &isExist) override; 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 231cc6ff..3fa4154d 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 @@ -882,6 +882,89 @@ int JsFileAccessExtAbility::ListFile(const FileInfo &fileInfo, const int64_t off return ERR_OK; } +int JsFileAccessExtAbility::ScanFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, + const FileFilter &filter, std::vector &fileInfoVec) +{ + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "ScanFile"); + auto value = std::make_shared>>(); + if (value == nullptr) { + HILOG_ERROR("ScanFile value is nullptr."); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_GETRESULT; + } + + auto argParser = + [fileInfo, offset, maxCount, filter](NativeEngine &engine, NativeValue *argv[], size_t &argc) -> bool { + NativeValue *uri = engine.CreateString(fileInfo.uri.c_str(), fileInfo.uri.length()); + if (uri == nullptr) { + HILOG_ERROR("create sourceFile uri native js value fail."); + return false; + } + + NativeValue *nativeOffset = engine.CreateNumber(offset); + if (nativeOffset == nullptr) { + HILOG_ERROR("create nativeMaxNum native js value fail."); + return false; + } + + NativeValue *nativeMaxCount = engine.CreateNumber(maxCount); + if (nativeMaxCount == nullptr) { + HILOG_ERROR("create nativeMaxNum native js value fail."); + return false; + } + + NativeValue* nativeFilter = nullptr; + if (filter.GetHasFilter()) { + int ret = MakeJsNativeFileFilter(engine, filter, nativeFilter); + if (ret != ERR_OK) { + HILOG_ERROR("Create js NativeValue fail."); + return ret; + } + } else { + nativeFilter = engine.CreateNull(); + if (nativeFilter == nullptr) { + HILOG_ERROR("Create js NativeValue fail."); + return E_GETRESULT; + } + } + + argv[ARGC_ZERO] = uri; + argv[ARGC_ONE] = nativeOffset; + argv[ARGC_TWO] = nativeMaxCount; + argv[ARGC_THREE] = nativeFilter; + argc = ARGC_FOUR; + return true; + }; + auto retParser = [value](NativeEngine &engine, NativeValue *result) -> bool { + Value> fileInfo; + bool ret = ParserListFileJsResult(engine, result, fileInfo); + if (!ret) { + HILOG_ERROR("Parser js value fail."); + return ret; + } + + *value = std::move(fileInfo); + return true; + }; + + auto errCode = CallJsMethod("ScanFile", jsRuntime_, jsObj_.get(), argParser, retParser); + if (errCode != ERR_OK) { + HILOG_ERROR("CallJsMethod error, code:%{public}d.", errCode); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return errCode; + } + + if (value->code != ERR_OK) { + HILOG_ERROR("fileio fail."); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return value->code; + } + + fileInfoVec = std::move(value->data); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ERR_OK; +} + static bool ParserGetRootsJsResult(NativeEngine &engine, NativeValue *nativeValue, Value> &result) { NativeObject *obj = ConvertNativeValueTo(nativeValue); -- Gitee From e70f5c5dd80f4dc4fe846a5f658f7c514b5c0964 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Mon, 8 May 2023 10:46:32 +0800 Subject: [PATCH 02/48] add check filter Signed-off-by: CaoChuan --- .../FileExtensionAbility.ts | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index 0300dea7..95dec823 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -392,6 +392,69 @@ export default class FileExtAbility extends Extension { }; } + checkOnlyMimeTypeFilter(filter) : boolean { + let suffixArray = filter.GetProperty("suffix"); + if (suffixArray.length > 0) { + return false; + } + + let displayNameArray = filter.GetProperty("displayName"); + if (displayNameArray.length > 0) { + return false; + } + + let fileSizeOver = filter.GetProperty("fileSizeOver"); + if (fileSizeOver != undefined) { + return false; + } + + let lastModifiedAfter = filter.GetProperty("lastModifiedAfter"); + if (lastModifiedAfter != undefined) { + return false; + } + return true; + } + + checkSuffix(suffix, filter) : boolean { + let suffixArray = filter.GetProperty("suffix"); + if (suffixArray.length == 0) { + return true; + } else if (suffixArray.indexOf(suffix) !=- 1) { + return true; + } + return false; + } + + checkDisplayName(displayName, filter) : boolean { + let displayNameArray = filter.GetProperty("displayName"); + if (displayNameArray.length == 0) { + return true; + } else if (displayNameArray.indexOf(displayName) !=- 1) { + return true; + } + return false; + } + + checkFileSizeOver(fileSize, filter) : boolean { + let fileSizeOver = filter.GetProperty("fileSizeOver"); + if (fileSizeOver == undefined) { + return true; + } else if (fileSize > fileSizeOver) { + return true; + } + return false; + } + + checkLastModifiedAfter(lastModified, filter) : boolean { + let lastModifiedAfter = filter.GetProperty("lastModifiedAfter"); + if (lastModifiedAfter == undefined) { + return true; + } else if (lastModified > lastModifiedAfter) { + return true; + } + return false; + } + listFile(sourceFileUri, offset, count, filter) { if (!this.checkUri(sourceFileUri)) { return { -- Gitee From 6fe1c5cc59b65cfd837fd5037f56ec2d4a3c6237 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Mon, 8 May 2023 16:41:20 +0800 Subject: [PATCH 03/48] modify list file Signed-off-by: CaoChuan --- .../FileExtensionAbility.ts | 120 ++++++++++++------ 1 file changed, 84 insertions(+), 36 deletions(-) diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index 95dec823..a9dc49f1 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -36,7 +36,9 @@ const ERR_ERROR = -1; const E_EXIST = 13900015; const E_NOEXIST = 13900002; const E_URIS = 14300002; +const E_FILTER = 14300003; const E_GETRESULT = 14300004; +const E_GET_FILE_INFOS = 14300005; export default class FileExtAbility extends Extension { onCreate(want): void { @@ -455,59 +457,105 @@ export default class FileExtAbility extends Extension { return false; } - listFile(sourceFileUri, offset, count, filter) { - if (!this.checkUri(sourceFileUri)) { - return { - infos: [], - code: E_URIS, - }; + filterFile(dirent, stat, filter) : boolean { + let displayName = dirent.name; + if (!this.checkDisplayName (displayName, filter)) { + return false; } - let infos = []; - let path = this.getPath(sourceFileUri); - let statPath = fs.statSync(path); - if (!statPath.isDirectory()) { - return { - infos: [], - code: E_GETRESULT, - }; + + let suffixNum = displayName.lastIndexOf("."); + let suffix = displayName.substring(suffixNum, displayName.length); + if (!this.checkSuffix(suffix, filter)) { + return false; + } + + let lastModified = stat.mtime; + if (!this.checkLastModifiedAfter(lastModified, filter)) { + return false; + } + + let fileSize = stat.size; + if(!this.checkFileSizeOver(fileSize, filter)) { + return false; + } + return true; + } + + buildInfo(sourceFileUri, dirent, stat) { + let mode = documentFlag.SUPPORTS_READ | documentFlag.SUPPORTS_WRITE; + if (stat.isDirectory()) { + mode |= documentFlag.REPRESENTS_DIR; + } else { + mode |= documentFlag.REPRESENTS_FILE; + } + + let info = { + uri: this.genNewFileUri(sourceFileUri, dirent.name), + fileName: dirent.name, + mode: mode, + size: stat.size, + mtime: stat.mtime, + mimeType: '', } + return info; + } + + getFileInfos(sourceFileUri, offset, count, filter) { + let infos = [] + let i = 0; + let hasNextFile = true; try { - let fileName = fs.listFileSync(path); - for (let i = 0; i < fileName.length; i++) { + let path = this.getPath(sourceFileUri); + let dir = fileio.opendirSync(path); + while (hasNextFile) { + let dirent = dir.readSync(); if (offset > i) { + i++; continue; } + let stat = fileio.statSync(path + '/' + dirent.name); + if (this.filterFile(dirent, stat, filter)) { + let info = buildInfo(sourceFileUri, dirent, stat); + infos.push(info); + } + i++; if (i === (offset + count)) { + hasNextFile = false; break; } - let mode = documentFlag.SUPPORTS_READ | documentFlag.SUPPORTS_WRITE; - let stat = fs.statSync(path + '/' + fileName[i]); - if (stat.isDirectory()) { - mode |= documentFlag.REPRESENTS_DIR; - } else { - mode |= documentFlag.REPRESENTS_FILE; - } - infos.push({ - uri: this.genNewFileUri(sourceFileUri, fileName[i]), - fileName: fileName[i], - mode: mode, - size: stat.size, - mtime: stat.mtime, - mimeType: '', - }); } - } catch (e) { - hilog.error(DOMAIN_CODE, TAG, 'listFile error ' + e.message); + dir.closeSync(); + } catch (error) { + hasNextFile = false; + hilog.error(DOMAIN_CODE, TAG, 'getFileInfos error ' + e.message); return { infos: [], - code: E_GETRESULT, - }; + code: E_GET_FILE_INFOS, + } } return { infos: infos, code: ERR_OK, - }; + }; + } + + listFile(sourceFileUri, offset, count, filter) { + if (!this.checkUri(sourceFileUri)) { + return { + infos: [], + code: E_URIS, + }; + } + + if (this.checkOnlyMimeTypeFilter(filter)) { + return { + infos: [], + code: E_FILTER, + }; + } + + return getFileInfos(sourceFileUri, offset, count, filter); } getFileInfoFromUri(selectFileUri) { -- Gitee From 343d71f8be4a94d2238804217ae67615944f1ae4 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Mon, 8 May 2023 18:55:54 +0800 Subject: [PATCH 04/48] modify check displayName Signed-off-by: CaoChuan --- .../ets/FileExtensionAbility/FileExtensionAbility.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index a9dc49f1..137442f4 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -431,9 +431,14 @@ export default class FileExtAbility extends Extension { let displayNameArray = filter.GetProperty("displayName"); if (displayNameArray.length == 0) { return true; - } else if (displayNameArray.indexOf(displayName) !=- 1) { - return true; - } + } else { + let len = displayNameArray.length; + for (let i = 0; i < len; i++) { + if (displayName.lastIndexOf(displayNameArray[i]) != -1) { + return true; + } + } + } return false; } -- Gitee From c19012be71a80a9a4fdc5dcbc57b333536d754af Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Tue, 9 May 2023 10:12:15 +0800 Subject: [PATCH 05/48] modify get data from filter Signed-off-by: CaoChuan --- .../main/ets/FileExtensionAbility/FileExtensionAbility.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index 137442f4..2caaca4c 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -395,6 +395,10 @@ export default class FileExtAbility extends Extension { } checkOnlyMimeTypeFilter(filter) : boolean { + if (filter == undefined) { + return false; + } + let suffixArray = filter.GetProperty("suffix"); if (suffixArray.length > 0) { return false; @@ -463,6 +467,10 @@ export default class FileExtAbility extends Extension { } filterFile(dirent, stat, filter) : boolean { + if (filter == undefined) { + return true; + } + let displayName = dirent.name; if (!this.checkDisplayName (displayName, filter)) { return false; -- Gitee From 1e0e6132840c93cae78364788bfbf99036e3bac6 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Tue, 9 May 2023 11:46:36 +0800 Subject: [PATCH 06/48] modify error Signed-off-by: CaoChuan --- .../main/ets/FileExtensionAbility/FileExtensionAbility.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index 2caaca4c..69e974a0 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -523,13 +523,13 @@ export default class FileExtAbility extends Extension { let dir = fileio.opendirSync(path); while (hasNextFile) { let dirent = dir.readSync(); + let stat = fileio.statSync(path + '/' + dirent.name); if (offset > i) { i++; continue; } - let stat = fileio.statSync(path + '/' + dirent.name); if (this.filterFile(dirent, stat, filter)) { - let info = buildInfo(sourceFileUri, dirent, stat); + let info = this.buildInfo(sourceFileUri, dirent, stat); infos.push(info); } i++; @@ -568,7 +568,7 @@ export default class FileExtAbility extends Extension { }; } - return getFileInfos(sourceFileUri, offset, count, filter); + return this.getFileInfos(sourceFileUri, offset, count, filter); } getFileInfoFromUri(selectFileUri) { -- Gitee From 88fdfdc45bef6322e8537b4008eedd34df7262be Mon Sep 17 00:00:00 2001 From: caochuan Date: Fri, 12 May 2023 15:48:57 +0800 Subject: [PATCH 07/48] feat: add shared memory for listFile interface Signed-off-by: caochuan --- .../kits/js/src/common/file_info_result_set.h | 224 ++++++++++++++++++ 1 file changed, 224 insertions(+) create mode 100644 interfaces/kits/js/src/common/file_info_result_set.h diff --git a/interfaces/kits/js/src/common/file_info_result_set.h b/interfaces/kits/js/src/common/file_info_result_set.h new file mode 100644 index 00000000..4241fff3 --- /dev/null +++ b/interfaces/kits/js/src/common/file_info_result_set.h @@ -0,0 +1,224 @@ +/* + * 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 + * + * 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. + */ +#ifndef FILE_INFO_RESULT_SET_H +#define FILE_INFO_RESULT_SET_H + +#include +#include +#include +#include +#include +#include +#include + +#include "parcel.h" +#include "ashmem.h" +#include "file_access_extension_info.h" +#include "hilog_wrapper.h" +#include "ipc_file_descriptor.h" +#include "securec.h" + +namespace OHOS { +namespace DistributedFS { +namespace { + const int64_t FILEINFO_SIZE = sizeof(OHOS::FileAccessFwk::FileInfo); + const int64_t DEFAULT_FILE_COUNT = 1000; + const int32_t ERR_OK = 0; +} +class FileInfoResultSet : public Parcelable { +public: + FileInfoResultSet() = default; + ~FileInfoResultSet() + { + DestroySharedMemory(); + } + + int CreatSharedMemory(std::string sharedMemoryName, int64_t count) + { + /* + auto *resultSet = new (std::nothrow) FileInfoResultSet(count); + if (resultSet == nullptr) { + return { resultSet, -1 }; + }*/ + + int64_t memSize = maxCount_ * FILEINFO_SIZE; + int memFd_ = AshmemCreate(sharedMemoryName.c_str(), memSize); + if (memFd_ < 0) { + HILOG_ERROR("Create shared memory error, code: %{public}d", memFd_); + return memFd_; + } + + int ret = AshmemSetProt(memFd_, PROT_READ | PROT_WRITE); + if (ret < 0) { + HILOG_ERROR("Set shared memory protection mask error, code: %{public}d", ret); + ::close(memFd_); + return ret; + } + + memAddr_ = ::mmap(nullptr, memSize, PROT_READ | PROT_WRITE, MAP_SHARED, memFd_, 0); + if (memAddr_ == MAP_FAILED) { + ::close(memFd_); + ret = errno; + HILOG_ERROR("Shared memory map error, code: %{public}d", ret); + return ret; + } + return ERR_OK; + } + + void DestroySharedMemory() + { + if (memAddr_ != nullptr) { + ::munmap(memAddr_, maxCount_ * FILEINFO_SIZE); + ::close(memFd_); + memAddr_ = nullptr; + } + } + + bool WriteFileInfos(const OHOS::FileAccessFwk::FileInfo *infos, int64_t count) + { + int64_t leftSpaceCount = maxCount_ - currentCount_; + if (count > leftSpaceCount) { + HILOG_ERROR("Shared memory cannot hold current data"); + return false; + } + + int64_t memSize = count * FILEINFO_SIZE; + void *startAddr = static_cast(memAddr_) + currentCount_ * FILEINFO_SIZE; + if (memcpy_s(startAddr, memSize, infos, memSize) != ERR_OK) { + HILOG_ERROR("Shared memory write error"); + return false; + } + currentCount_ += count; + return true; + } + + bool ReadFileInfos(OHOS::FileAccessFwk::FileInfo *infos, int64_t count) + { + int64_t leftInfoCount = currentCount_ - offsetCount_; + if (count > leftInfoCount) { + HILOG_ERROR("Left count of FileInfo in shared memory is %{public}" PRId64, leftInfoCount); + return false; + } + + int64_t memSize = count * FILEINFO_SIZE; + void *startAddr = static_cast(memAddr_) + offsetCount_ * FILEINFO_SIZE; + if (memcpy_s(infos, memSize, startAddr, memSize) != ERR_OK) { + HILOG_ERROR("Shared memory read error"); + return false; + } + offsetCount_ += count; + return true; + } + + int64_t GetOffsetCount() + { + return offsetCount_; + } + + int64_t GetCurrentCount() + { + return currentCount_; + } + + int64_t GetMaxCount() + { + return maxCount_; + } + + bool Marshalling(Parcel &parcel) const + { + if (!WriteFileDescriptor(parcel, memFd_)) { + return false; + } + if (!parcel.WritePointer(reinterpret_cast(memAddr_))) { + return false; + } + if (!parcel.WriteInt64(offsetCount_)) { + return false; + } + if (!parcel.WriteInt64(currentCount_)) { + return false; + } + if (!parcel.WriteInt64(maxCount_)) { + return false; + } + return true; + } + + static FileInfoResultSet* Unmarshalling(Parcel &parcel) + { + auto *obj = new (std::nothrow) FileInfoResultSet(); + if (obj != nullptr && !obj->ReadFromParcel(parcel)) { + delete obj; + obj = nullptr; + } + return obj; + } + + bool ReadFromParcel(Parcel &parcel) + { + if (!ReadFileDescriptor(parcel)) { + return false; + } + + memAddr_ = reinterpret_cast(parcel.ReadPointer()); + if (memAddr_ != nullptr) { + return false; + } + offsetCount_ = parcel.ReadInt64(); + currentCount_ = parcel.ReadInt64(); + maxCount_ = parcel.ReadInt64(); + return true; + } +private: + bool WriteFileDescriptor(Parcel &parcel, int fd) const + { + if (fd < 0) { + return false; + } + int dupFd = dup(fd); + if (dupFd < 0) { + return false; + } + sptr descriptor = new IPCFileDescriptor(dupFd); + if (descriptor == nullptr) { + return false; + } + return parcel.WriteObject(descriptor); + } + + int ReadFileDescriptor(Parcel &parcel) + { + sptr descriptor = parcel.ReadObject(); + if (descriptor == nullptr) { + return false; + } + int fd = descriptor->GetFd(); + if (fd < 0) { + return false; + } + memFd_ = dup(fd); + return true; + } + + int memFd_ = -1; + void *memAddr_ = nullptr; + int64_t offsetCount_ = 0; + int64_t currentCount_ = 0; + int64_t maxCount_ = DEFAULT_FILE_COUNT; +}; +} // namespace DistributedFS +} // namespace OHOS +#endif // FILE_INFO_RESULT_SET_H \ No newline at end of file -- Gitee From e6be3d4fb4ff39f96f55c5c412759dc2c5f57580 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Fri, 12 May 2023 17:31:58 +0800 Subject: [PATCH 08/48] modify ListFile Signed-off-by: CaoChuan --- .../file_info/file_info_entity.h | 2 +- .../file_info/file_iterator_entity.h | 2 +- .../root_info/napi_root_info_exporter.cpp | 4 +- .../include/js_file_access_ext_ability.h | 3 +- .../src/js_file_access_ext_ability.cpp | 90 ++--------------- interfaces/kits/js/src/common/file_filter.h | 4 +- .../FileExtensionAbility.ts | 71 ++++++++++---- test/unittest/external_file_access_test.cpp | 98 +++++++++++++++++++ 8 files changed, 168 insertions(+), 106 deletions(-) diff --git a/frameworks/js/napi/file_access_module/file_info/file_info_entity.h b/frameworks/js/napi/file_access_module/file_info/file_info_entity.h index 3450af5b..1bccfa9e 100644 --- a/frameworks/js/napi/file_access_module/file_info/file_info_entity.h +++ b/frameworks/js/napi/file_access_module/file_info/file_info_entity.h @@ -27,7 +27,7 @@ using namespace DistributedFS; struct FileInfoEntity { FileAccessHelper *fileAccessHelper { nullptr }; FileInfo fileInfo; - FileFilter filter { {}, {}, {}, 0, 0, false, false }; + FileFilter filter { {}, {}, {}, -1, -1, false, false }; }; } // namespace FileAccessFwk } // namespace OHOS diff --git a/frameworks/js/napi/file_access_module/file_info/file_iterator_entity.h b/frameworks/js/napi/file_access_module/file_info/file_iterator_entity.h index b945eb29..99088ee2 100644 --- a/frameworks/js/napi/file_access_module/file_info/file_iterator_entity.h +++ b/frameworks/js/napi/file_access_module/file_info/file_iterator_entity.h @@ -36,7 +36,7 @@ struct FileIteratorEntity { std::vector fileInfoVec; int64_t offset { 0 }; uint64_t pos { 0 }; - FileFilter filter { {}, {}, {}, 0, 0, false, false }; + FileFilter filter { {}, {}, {}, -1, -1, false, false }; int flag { 0 }; }; } // namespace FileAccessFwk diff --git a/frameworks/js/napi/file_access_module/root_info/napi_root_info_exporter.cpp b/frameworks/js/napi/file_access_module/root_info/napi_root_info_exporter.cpp index f8ee7085..bec44d2c 100644 --- a/frameworks/js/napi/file_access_module/root_info/napi_root_info_exporter.cpp +++ b/frameworks/js/napi/file_access_module/root_info/napi_root_info_exporter.cpp @@ -89,7 +89,7 @@ napi_value NapiRootInfoExporter::ListFile(napi_env env, napi_callback_info info) return nullptr; } - FileFilter filter({}, {}, {}, 0, 0, false, false); + FileFilter filter({}, {}, {}, -1, -1, false, false); if (funcArg.GetArgc() == NARG_CNT::ONE) { auto ret = GetFileFilterParam(NVal(env, funcArg.GetArg(NARG_POS::FIRST)), filter); if (ret != ERR_OK) { @@ -152,7 +152,7 @@ napi_value NapiRootInfoExporter::ScanFile(napi_env env, napi_callback_info info) return nullptr; } - FileFilter filter({}, {}, {}, 0, 0, false, false); + FileFilter filter({}, {}, {}, -1, -1, false, false); if (funcArg.GetArgc() == NARG_CNT::ONE) { auto ret = GetFileFilterParam(NVal(env, funcArg.GetArg(NARG_POS::FIRST)), filter); if (ret != ERR_OK) { diff --git a/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h b/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h index 3548e582..affce377 100644 --- a/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h +++ b/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h @@ -80,7 +80,8 @@ private: int CallJsMethod(const std::string &funcName, JsRuntime &jsRuntime, NativeReference *jsObj, InputArgsParser argParser, ResultValueParser retParser); void GetSrcPath(std::string &srcPath); - + int FilterFile(const std::string &methodName, const FileInfo &fileInfo, const int64_t offset, + const int64_t maxCount, const FileFilter &filter, std::vector &fileInfoVec); JsRuntime &jsRuntime_; std::shared_ptr jsObj_; }; 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 3fa4154d..f0be584f 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 @@ -799,13 +799,13 @@ static int MakeJsNativeFileFilter(NativeEngine &engine, const FileFilter &filter return ERR_OK; } -int JsFileAccessExtAbility::ListFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, - const FileFilter &filter, std::vector &fileInfoVec) +int JsFileAccessExtAbility::FilterFile(const std::string &methodName, const FileInfo &fileInfo, const int64_t offset, + const int64_t maxCount, const FileFilter &filter, std::vector &fileInfoVec) { StartTrace(HITRACE_TAG_FILEMANAGEMENT, "ListFile"); auto value = std::make_shared>>(); if (value == nullptr) { - HILOG_ERROR("ListFile value is nullptr."); + HILOG_ERROR("FilterFile value is nullptr."); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return E_GETRESULT; } @@ -864,7 +864,7 @@ int JsFileAccessExtAbility::ListFile(const FileInfo &fileInfo, const int64_t off return true; }; - auto errCode = CallJsMethod("listFile", jsRuntime_, jsObj_.get(), argParser, retParser); + auto errCode = CallJsMethod(methodName, jsRuntime_, jsObj_.get(), argParser, retParser); if (errCode != ERR_OK) { HILOG_ERROR("CallJsMethod error, code:%{public}d.", errCode); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); @@ -882,87 +882,17 @@ int JsFileAccessExtAbility::ListFile(const FileInfo &fileInfo, const int64_t off return ERR_OK; } -int JsFileAccessExtAbility::ScanFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, +int JsFileAccessExtAbility::ListFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, const FileFilter &filter, std::vector &fileInfoVec) { - StartTrace(HITRACE_TAG_FILEMANAGEMENT, "ScanFile"); - auto value = std::make_shared>>(); - if (value == nullptr) { - HILOG_ERROR("ScanFile value is nullptr."); - FinishTrace(HITRACE_TAG_FILEMANAGEMENT); - return E_GETRESULT; - } - - auto argParser = - [fileInfo, offset, maxCount, filter](NativeEngine &engine, NativeValue *argv[], size_t &argc) -> bool { - NativeValue *uri = engine.CreateString(fileInfo.uri.c_str(), fileInfo.uri.length()); - if (uri == nullptr) { - HILOG_ERROR("create sourceFile uri native js value fail."); - return false; - } - - NativeValue *nativeOffset = engine.CreateNumber(offset); - if (nativeOffset == nullptr) { - HILOG_ERROR("create nativeMaxNum native js value fail."); - return false; - } - - NativeValue *nativeMaxCount = engine.CreateNumber(maxCount); - if (nativeMaxCount == nullptr) { - HILOG_ERROR("create nativeMaxNum native js value fail."); - return false; - } - - NativeValue* nativeFilter = nullptr; - if (filter.GetHasFilter()) { - int ret = MakeJsNativeFileFilter(engine, filter, nativeFilter); - if (ret != ERR_OK) { - HILOG_ERROR("Create js NativeValue fail."); - return ret; - } - } else { - nativeFilter = engine.CreateNull(); - if (nativeFilter == nullptr) { - HILOG_ERROR("Create js NativeValue fail."); - return E_GETRESULT; - } - } - - argv[ARGC_ZERO] = uri; - argv[ARGC_ONE] = nativeOffset; - argv[ARGC_TWO] = nativeMaxCount; - argv[ARGC_THREE] = nativeFilter; - argc = ARGC_FOUR; - return true; + return FilterFile("ListFile", fileInfo, offset, maxCount, filter, fileInfoVec); }; - auto retParser = [value](NativeEngine &engine, NativeValue *result) -> bool { - Value> fileInfo; - bool ret = ParserListFileJsResult(engine, result, fileInfo); - if (!ret) { - HILOG_ERROR("Parser js value fail."); - return ret; - } - *value = std::move(fileInfo); - return true; - }; - - auto errCode = CallJsMethod("ScanFile", jsRuntime_, jsObj_.get(), argParser, retParser); - if (errCode != ERR_OK) { - HILOG_ERROR("CallJsMethod error, code:%{public}d.", errCode); - FinishTrace(HITRACE_TAG_FILEMANAGEMENT); - return errCode; - } - if (value->code != ERR_OK) { - HILOG_ERROR("fileio fail."); - FinishTrace(HITRACE_TAG_FILEMANAGEMENT); - return value->code; - } - - fileInfoVec = std::move(value->data); - FinishTrace(HITRACE_TAG_FILEMANAGEMENT); - return ERR_OK; +int JsFileAccessExtAbility::ScanFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, + const FileFilter &filter, std::vector &fileInfoVec) +{ + return FilterFile("ScanFile", fileInfo, offset, maxCount, filter, fileInfoVec); } static bool ParserGetRootsJsResult(NativeEngine &engine, NativeValue *nativeValue, Value> &result) diff --git a/interfaces/kits/js/src/common/file_filter.h b/interfaces/kits/js/src/common/file_filter.h index 694b6f0d..7a6fda8a 100644 --- a/interfaces/kits/js/src/common/file_filter.h +++ b/interfaces/kits/js/src/common/file_filter.h @@ -164,8 +164,8 @@ private: std::vector suffix_ = std::vector(); std::vector displayName_ = std::vector(); std::vector mimeType_ = std::vector(); - int64_t fileSizeOver_ = 0; - double lastModifiedAfter_ = 0; + int64_t fileSizeOver_ = -1; + double lastModifiedAfter_ = -1; bool excludeMedia_ = false; bool hasFilter_ = false; }; diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index 69e974a0..a0bd2ad1 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -399,41 +399,51 @@ export default class FileExtAbility extends Extension { return false; } - let suffixArray = filter.GetProperty("suffix"); - if (suffixArray.length > 0) { + let suffixArray = filter["suffix"]; + if (suffixArray != undefined && suffixArray.length > 0) { return false; } - let displayNameArray = filter.GetProperty("displayName"); - if (displayNameArray.length > 0) { + let displayNameArray = filter["displayName"]; + if (displayNameArray != undefined && displayNameArray.length > 0) { return false; } - let fileSizeOver = filter.GetProperty("fileSizeOver"); - if (fileSizeOver != undefined) { + let fileSizeOver = filter["fileSizeOver"]; + if (fileSizeOver != undefined && fileSizeOver >= 0) { return false; } - let lastModifiedAfter = filter.GetProperty("lastModifiedAfter"); - if (lastModifiedAfter != undefined) { + let lastModifiedAfter = filter["lastModifiedAfter"]; + if (lastModifiedAfter != undefined && lastModifiedAfter>= 0) { return false; } + + let mimeTypeArray = filter["mimeType"]; + if (mimeTypeArray != undefined && mimeTypeArray.length > 0) { return true; } + return false; + } checkSuffix(suffix, filter) : boolean { - let suffixArray = filter.GetProperty("suffix"); - if (suffixArray.length == 0) { + let suffixArray = filter["suffix"]; + if (suffixArray == undefined || suffixArray.length == 0) { return true; - } else if (suffixArray.indexOf(suffix) !=- 1) { + } else { + let len = suffixArray.length; + for (let i = 0; i < len; i++) { + if (suffix == suffixArray[i]) { return true; + } + } } return false; } checkDisplayName(displayName, filter) : boolean { - let displayNameArray = filter.GetProperty("displayName"); - if (displayNameArray.length == 0) { + let displayNameArray = filter["displayName"]; + if (displayNameArray == undefined || displayNameArray.length == 0) { return true; } else { let len = displayNameArray.length; @@ -447,8 +457,8 @@ export default class FileExtAbility extends Extension { } checkFileSizeOver(fileSize, filter) : boolean { - let fileSizeOver = filter.GetProperty("fileSizeOver"); - if (fileSizeOver == undefined) { + let fileSizeOver = filter["fileSizeOver"]; + if (fileSizeOver == undefined || fileSizeOver < 0) { return true; } else if (fileSize > fileSizeOver) { return true; @@ -457,8 +467,8 @@ export default class FileExtAbility extends Extension { } checkLastModifiedAfter(lastModified, filter) : boolean { - let lastModifiedAfter = filter.GetProperty("lastModifiedAfter"); - if (lastModifiedAfter == undefined) { + let lastModifiedAfter = filter["lastModifiedAfter"]; + if (lastModifiedAfter == undefined || lastModifiedAfter < 0) { return true; } else if (lastModified > lastModifiedAfter) { return true; @@ -476,8 +486,8 @@ export default class FileExtAbility extends Extension { return false; } - let suffixNum = displayName.lastIndexOf("."); - let suffix = displayName.substring(suffixNum, displayName.length); + let suffixIndex = displayName.lastIndexOf("."); + let suffix = displayName.substring(suffixIndex, displayName.length); if (!this.checkSuffix(suffix, filter)) { return false; } @@ -568,6 +578,29 @@ export default class FileExtAbility extends Extension { }; } + let data = { + scanFile: false, + infos: [], + i: 0, + }; + + return this.getFileInfos(sourceFileUri, offset, count, filter, data); + } + + scanFile(sourceFileUri, offset, count, filter) { + if (!this.checkUri(sourceFileUri)) { + return { + infos: [], + code: E_URIS, + }; + } + if (this.checkOnlyMimeTypeFilter(filter)) { + return { + infos: [], + code: E_FILTER, + }; + } + return this.getFileInfos(sourceFileUri, offset, count, filter); } diff --git a/test/unittest/external_file_access_test.cpp b/test/unittest/external_file_access_test.cpp index 2067e101..12a870d4 100644 --- a/test/unittest/external_file_access_test.cpp +++ b/test/unittest/external_file_access_test.cpp @@ -2302,6 +2302,104 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0005, testing::e GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0005"; } +double GetTime() +{ + struct timespec t{}; + t.tv_sec = 0; + t.tv_nsec = 0; + clock_gettime(CLOCK_REALTIME, &t); + return (double)(t.tv_sec); +} + +void ListFileInfo(std::vector fileInfoVec) +{ + for (auto fileInfo : fileInfoVec) { + GTEST_LOG_(INFO) << "ListFile_0006 ListFileInfo uri:" << fileInfo.uri << ",relativePath" << fileInfo.relativePath << ",displayName:" << fileInfo.fileName; + } +} + +/** + * @tc.number: user_file_service_external_file_access_ListFile_0006 + * @tc.name: external_file_access_ListFile_0006 + * @tc.desc: Test function of ListFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000H0387 + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0006, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ListFile_0006"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "test", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri1(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0006.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0006.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri3(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0006.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0006.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0006_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + ListFileInfo(fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 5); + + FileFilter filter1({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, -1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter1, fileInfoVec); + ListFileInfo(fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 4); + + FileFilter filter2({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, 1, 0, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter2, fileInfoVec); + ListFileInfo(fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 0); + + FileFilter filter3({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, 1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter3, fileInfoVec); + ListFileInfo(fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 4); + + double time = GetTime(); + FileFilter filter4({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, time, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter4, fileInfoVec); + ListFileInfo(fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 0); + + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_ListFile_0000 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0000"; +} + /** * @tc.number: user_file_service_external_file_access_GetRoots_0000 * @tc.name: external_file_access_GetRoots_0000 -- Gitee From 9e2733a9d33a28fcf06610cacbe94b42105dde81 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Sat, 13 May 2023 12:03:37 +0800 Subject: [PATCH 09/48] git add list file and tdd Signed-off-by: CaoChuan --- .../file_info/napi_file_info_exporter.cpp | 4 +- .../js/napi/file_access_module/napi_utils.cpp | 10 +- .../src/js_file_access_ext_ability.cpp | 118 ++++++++++++++---- .../FileExtensionAbility.ts | 21 ++-- .../medialibrary_file_access_test.cpp | 102 +++++++++++++-- 5 files changed, 208 insertions(+), 47 deletions(-) diff --git a/frameworks/js/napi/file_access_module/file_info/napi_file_info_exporter.cpp b/frameworks/js/napi/file_access_module/file_info/napi_file_info_exporter.cpp index 676fd18e..7336f2d6 100644 --- a/frameworks/js/napi/file_access_module/file_info/napi_file_info_exporter.cpp +++ b/frameworks/js/napi/file_access_module/file_info/napi_file_info_exporter.cpp @@ -87,7 +87,7 @@ napi_value NapiFileInfoExporter::ListFile(napi_env env, napi_callback_info info) return nullptr; } - FileFilter filter({}, {}, {}, 0, 0, false, false); + FileFilter filter({}, {}, {}, -1, -1, false, false); if (funcArg.GetArgc() == NARG_CNT::ONE) { auto ret = GetFileFilterParam(NVal(env, funcArg.GetArg(NARG_POS::FIRST)), filter); if (ret != ERR_OK) { @@ -152,7 +152,7 @@ napi_value NapiFileInfoExporter::ScanFile(napi_env env, napi_callback_info info) return nullptr; } - FileFilter filter({}, {}, {}, 0, 0, false, false); + FileFilter filter({}, {}, {}, -1, -1, false, false); if (funcArg.GetArgc() == NARG_CNT::ONE) { auto ret = GetFileFilterParam(NVal(env, funcArg.GetArg(NARG_POS::FIRST)), filter); if (ret != ERR_OK) { diff --git a/frameworks/js/napi/file_access_module/napi_utils.cpp b/frameworks/js/napi/file_access_module/napi_utils.cpp index e093c886..7d9b3595 100644 --- a/frameworks/js/napi/file_access_module/napi_utils.cpp +++ b/frameworks/js/napi/file_access_module/napi_utils.cpp @@ -113,7 +113,10 @@ int GetFileFilterParam(const NVal &argv, FileFilter &filter) HILOG_ERROR("FileFilter get fileSizeOver param fail."); return EINVAL; } - + if(fileSizeOver < 0) { + HILOG_ERROR("FileFilter fileSizeOver need more than 0."); + return EINVAL; + } filter.SetFileSizeOver(fileSizeOver); filter.SetHasFilter(true); } @@ -125,7 +128,10 @@ int GetFileFilterParam(const NVal &argv, FileFilter &filter) HILOG_ERROR("FileFilter get lastModifiedAfter param fail."); return EINVAL; } - + if(lastModifiedAfter < 0) { + HILOG_ERROR("FileFilter lastModifiedAfter need more than 0."); + return EINVAL; + } filter.SetLastModifiedAfter(lastModifiedAfter); filter.SetHasFilter(true); } 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 f0be584f..38f3299c 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 @@ -697,7 +697,7 @@ static int MakeStringNativeArray(NativeEngine &engine, std::vector } bool ret = false; - for (uint32_t i = 0; i < nativeArray->GetLength(); i++) { + for (uint32_t i = 0; i < inputArray.size(); i++) { NativeValue* nativeValue = engine.CreateString(inputArray[i].c_str(), inputArray[i].length()); if (nativeValue == nullptr) { HILOG_ERROR("Create NativeValue fail."); @@ -716,9 +716,9 @@ static int MakeStringNativeArray(NativeEngine &engine, std::vector static int MakeJsNativeFileFilter(NativeEngine &engine, const FileFilter &filter, NativeValue *nativeFilter) { - nativeFilter = engine.CreateObject(); - if (nativeFilter == nullptr) { - HILOG_ERROR("Create js NativeValue fail."); + NativeObject *objFilter = ConvertNativeValueTo(nativeFilter); + if (objFilter == nullptr) { + HILOG_ERROR("Convert js object fail."); return E_GETRESULT; } @@ -779,12 +779,6 @@ static int MakeJsNativeFileFilter(NativeEngine &engine, const FileFilter &filter return E_GETRESULT; } - NativeObject *objFilter = ConvertNativeValueTo(nativeFilter); - if (objFilter == nullptr) { - HILOG_ERROR("Convert js object fail."); - return E_GETRESULT; - } - bool ret = objFilter->SetProperty("suffix", suffixArray); ret = ret && objFilter->SetProperty("displayName", displayNameArray); ret = ret && objFilter->SetProperty("mimeType", mimeTypeArray); @@ -799,13 +793,13 @@ static int MakeJsNativeFileFilter(NativeEngine &engine, const FileFilter &filter return ERR_OK; } -int JsFileAccessExtAbility::FilterFile(const std::string &methodName, const FileInfo &fileInfo, const int64_t offset, - const int64_t maxCount, const FileFilter &filter, std::vector &fileInfoVec) +int JsFileAccessExtAbility::ListFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, + const FileFilter &filter, std::vector &fileInfoVec) { StartTrace(HITRACE_TAG_FILEMANAGEMENT, "ListFile"); auto value = std::make_shared>>(); if (value == nullptr) { - HILOG_ERROR("FilterFile value is nullptr."); + HILOG_ERROR("ListFile value is nullptr."); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return E_GETRESULT; } @@ -830,8 +824,13 @@ int JsFileAccessExtAbility::FilterFile(const std::string &methodName, const File return false; } - NativeValue* nativeFilter = nullptr; + NativeValue *nativeFilter = nullptr; if (filter.GetHasFilter()) { + nativeFilter = engine.CreateObject(); + if (nativeFilter == nullptr) { + HILOG_ERROR("Create js NativeValue fail."); + return false; + } int ret = MakeJsNativeFileFilter(engine, filter, nativeFilter); if (ret != ERR_OK) { HILOG_ERROR("Create js NativeValue fail."); @@ -852,6 +851,7 @@ int JsFileAccessExtAbility::FilterFile(const std::string &methodName, const File argc = ARGC_FOUR; return true; }; + auto retParser = [value](NativeEngine &engine, NativeValue *result) -> bool { Value> fileInfo; bool ret = ParserListFileJsResult(engine, result, fileInfo); @@ -864,7 +864,7 @@ int JsFileAccessExtAbility::FilterFile(const std::string &methodName, const File return true; }; - auto errCode = CallJsMethod(methodName, jsRuntime_, jsObj_.get(), argParser, retParser); + auto errCode = CallJsMethod("listFile", jsRuntime_, jsObj_.get(), argParser, retParser); if (errCode != ERR_OK) { HILOG_ERROR("CallJsMethod error, code:%{public}d.", errCode); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); @@ -882,17 +882,93 @@ int JsFileAccessExtAbility::FilterFile(const std::string &methodName, const File return ERR_OK; } -int JsFileAccessExtAbility::ListFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, +int JsFileAccessExtAbility::ScanFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, const FileFilter &filter, std::vector &fileInfoVec) { - return FilterFile("ListFile", fileInfo, offset, maxCount, filter, fileInfoVec); + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "ScanFile"); + auto value = std::make_shared>>(); + if (value == nullptr) { + HILOG_ERROR("ScanFile value is nullptr."); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_GETRESULT; + } + + auto argParser = + [fileInfo, offset, maxCount, filter](NativeEngine &engine, NativeValue *argv[], size_t &argc) -> bool { + NativeValue *uri = engine.CreateString(fileInfo.uri.c_str(), fileInfo.uri.length()); + if (uri == nullptr) { + HILOG_ERROR("create sourceFile uri native js value fail."); + return false; + } + + NativeValue *nativeOffset = engine.CreateNumber(offset); + if (nativeOffset == nullptr) { + HILOG_ERROR("create nativeMaxNum native js value fail."); + return false; + } + + NativeValue *nativeMaxCount = engine.CreateNumber(maxCount); + if (nativeMaxCount == nullptr) { + HILOG_ERROR("create nativeMaxNum native js value fail."); + return false; + } + + NativeValue* nativeFilter = nullptr; + if (filter.GetHasFilter()) { + nativeFilter = engine.CreateObject(); + if (nativeFilter == nullptr) { + HILOG_ERROR("Create js NativeValue fail."); + return E_GETRESULT; + } + int ret = MakeJsNativeFileFilter(engine, filter, nativeFilter); + if (ret != ERR_OK) { + HILOG_ERROR("Create js NativeValue fail."); + return ret; + } + } else { + nativeFilter = engine.CreateNull(); + if (nativeFilter == nullptr) { + HILOG_ERROR("Create js NativeValue fail."); + return E_GETRESULT; + } + } + + argv[ARGC_ZERO] = uri; + argv[ARGC_ONE] = nativeOffset; + argv[ARGC_TWO] = nativeMaxCount; + argv[ARGC_THREE] = nativeFilter; + argc = ARGC_FOUR; + return true; }; + auto retParser = [value](NativeEngine &engine, NativeValue *result) -> bool { + Value> fileInfo; + bool ret = ParserListFileJsResult(engine, result, fileInfo); + if (!ret) { + HILOG_ERROR("Parser js value fail."); + return ret; + } -int JsFileAccessExtAbility::ScanFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, - const FileFilter &filter, std::vector &fileInfoVec) -{ - return FilterFile("ScanFile", fileInfo, offset, maxCount, filter, fileInfoVec); + *value = std::move(fileInfo); + return true; + }; + + auto errCode = CallJsMethod("scanFile", jsRuntime_, jsObj_.get(), argParser, retParser); + if (errCode != ERR_OK) { + HILOG_ERROR("CallJsMethod error, code:%{public}d.", errCode); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return errCode; + } + + if (value->code != ERR_OK) { + HILOG_ERROR("fileio fail."); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return value->code; + } + + fileInfoVec = std::move(value->data); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ERR_OK; } static bool ParserGetRootsJsResult(NativeEngine &engine, NativeValue *nativeValue, Value> &result) diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index a0bd2ad1..e47814dc 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -421,8 +421,8 @@ export default class FileExtAbility extends Extension { let mimeTypeArray = filter["mimeType"]; if (mimeTypeArray != undefined && mimeTypeArray.length > 0) { - return true; - } + return true; + } return false; } @@ -434,8 +434,8 @@ export default class FileExtAbility extends Extension { let len = suffixArray.length; for (let i = 0; i < len; i++) { if (suffix == suffixArray[i]) { - return true; - } + return true; + } } } return false; @@ -480,12 +480,11 @@ export default class FileExtAbility extends Extension { if (filter == undefined) { return true; } - + let displayName = dirent.name; - if (!this.checkDisplayName (displayName, filter)) { + if (!this.checkDisplayName(displayName, filter)) { return false; } - let suffixIndex = displayName.lastIndexOf("."); let suffix = displayName.substring(suffixIndex, displayName.length); if (!this.checkSuffix(suffix, filter)) { @@ -531,8 +530,8 @@ export default class FileExtAbility extends Extension { try { let path = this.getPath(sourceFileUri); let dir = fileio.opendirSync(path); - while (hasNextFile) { - let dirent = dir.readSync(); + let dirent; + while (((dirent = dir.readSync()) != undefined) && hasNextFile) { let stat = fileio.statSync(path + '/' + dirent.name); if (offset > i) { i++; @@ -549,9 +548,9 @@ export default class FileExtAbility extends Extension { } } dir.closeSync(); - } catch (error) { + } catch (e) { hasNextFile = false; - hilog.error(DOMAIN_CODE, TAG, 'getFileInfos error ' + e.message); + hilog.error(DOMAIN_CODE, TAG, 'getFileInfos error ' + e); return { infos: [], code: E_GET_FILE_INFOS, diff --git a/test/unittest/medialibrary_file_access_test.cpp b/test/unittest/medialibrary_file_access_test.cpp index a6b2a61b..da40adab 100644 --- a/test/unittest/medialibrary_file_access_test.cpp +++ b/test/unittest/medialibrary_file_access_test.cpp @@ -2086,7 +2086,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ListFile_0001, testing:: int64_t offset = 0; int64_t maxCount = 1000; vector fileInfoVec; - FileFilter filter({}, {}, {}, 0, 0, false, false); + FileFilter filter({}, {}, {}, -1, -1, false, false); int result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), OHOS::FileAccessFwk::ERR_OK); @@ -2122,7 +2122,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ListFile_0002, testing:: int64_t offset = 0; int64_t maxCount = 1000; vector fileInfoVec; - FileFilter filter({}, {}, {}, 0, 0, false, false); + FileFilter filter({}, {}, {}, -1, -1, false, false); result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), OHOS::FileAccessFwk::ERR_OK); @@ -2192,7 +2192,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ListFile_0004, testing:: int64_t offset = 0; int64_t maxCount = 1000; std::vector fileInfoVec; - FileFilter filter({".txt"}, {}, {}, 0, 0, false, true); + FileFilter filter({".txt"}, {}, {}, -1, 1, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 1); @@ -2247,7 +2247,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ListFile_0005, testing:: int64_t maxCount = 1000; std::vector fileInfoVec; g_num = 0; - FileFilter filter({".txt"}, {}, {}, 0, 0, false, true); + FileFilter filter({".txt"}, {}, {}, -1, -1, false, true); for (int j = 0; j < INIT_THREADS_NUMBER; j++) { std::thread execthread(ListFileTdd, g_fah, fileInfo, offset, maxCount, filter, fileInfoVec); execthread.join(); @@ -2261,6 +2261,86 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ListFile_0005, testing:: GTEST_LOG_(INFO) << "FileAccessHelperTest-end medialibrary_file_access_ListFile_0005"; } +double GetTime() +{ + struct timespec t{}; + t.tv_sec = 0; + t.tv_nsec = 0; + clock_gettime(CLOCK_REALTIME, &t); + return (double)(t.tv_sec); +} + +/** + * @tc.number: user_file_service_medialibrary_file_access_ListFile_0006 + * @tc.name: medialibrary_file_access_ListFile_0006 + * @tc.desc: Test function of ListFile interface for ERROR which add filter. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000HB855 + */ +HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ListFile_0006, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileAccessHelperTest-begin medialibrary_file_access_ListFile_0006"; + try { + Uri newDirUriTest(""); + int result = g_fah->Mkdir(g_newDirUri, "ListFile0006", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri1(""); + result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_0006.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_0006.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri3(""); + result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_01_0006.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_01_0006.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_01_0006_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter({".txt", ".docx"}, {}, {}, 0, 0, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 5); + + FileFilter filter1({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, 0, 0, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter1, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 4); + + FileFilter filter2({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, 1, 0, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter2, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 0); + + FileFilter filter3({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, 0, 1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter3, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 4); + + double time = GetTime(); + FileFilter filter4({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, 0, time, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter4, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 0); + + result = g_fah->Delete(newDirUriTest); + EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); + } catch (...) { + GTEST_LOG_(ERROR) << "medialibrary_file_access_ListFile_0006 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileAccessHelperTest-end medialibrary_file_access_ListFile_0006"; +} + /** * @tc.number: user_file_service_medialibrary_file_access_ScanFile_0000 * @tc.name: medialibrary_file_access_ScanFile_0000 @@ -2287,7 +2367,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ScanFile_0000, testing:: int64_t offset = 0; int64_t maxCount = 1000; std::vector fileInfoVec; - FileFilter filter({".q1w2e3r4"}, {}, {}, 0, 0, false, true); + FileFilter filter({".q1w2e3r4"}, {}, {}, -1, -1, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_GE(fileInfoVec.size(), 1); @@ -2326,7 +2406,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ScanFile_0001, testing:: int64_t offset = 0; int64_t maxCount = 1000; std::vector fileInfoVec; - FileFilter filter({}, {}, {}, 0, 0, false, false); + FileFilter filter({}, {}, {}, -1, -1, false, false); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_GE(fileInfoVec.size(), 2); @@ -2367,11 +2447,11 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ScanFile_0002, testing:: int64_t offset = 0; int64_t maxCount = 1000; std::vector fileInfoVec; - FileFilter filter({".q1w2e3r4"}, {}, {}, 0, 0, false, true); + FileFilter filter({".q1w2e3r4"}, {}, {}, -1, -1, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 1); - FileFilter filter1({".q1w2e3r4", ".txt"}, {}, {}, 0, 0, false, true); + FileFilter filter1({".q1w2e3r4", ".txt"}, {}, {}, -1, -1, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter1, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 2); @@ -2408,7 +2488,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ScanFile_0003, testing:: int64_t offset = 0; int64_t maxCount = 1000; std::vector fileInfoVec; - FileFilter filter({".q1w2e3r4"}, {}, {}, 0, 0, false, true); + FileFilter filter({".q1w2e3r4"}, {}, {}, -1, -1, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 1); @@ -2462,7 +2542,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ScanFile_0004, testing:: int64_t offset = 0; int64_t maxCount = 1000; std::vector fileInfoVec; - FileFilter filter({".q1w2e3r4"}, {}, {}, 0, 0, false, true); + FileFilter filter({".q1w2e3r4"}, {}, {}, -1, -1, false, true); g_num = 0; for (int j = 0; j < INIT_THREADS_NUMBER; j++) { std::thread execthread(ScanFileTdd, fileInfo, offset, maxCount, filter, fileInfoVec); @@ -2542,7 +2622,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ScanFile_0005, testing:: int64_t offset = 0; int64_t maxCount = 1000; std::vector fileInfoVec; - FileFilter filter({".q1w2e3r4"}, {}, {}, 0, 0, false, true); + FileFilter filter({".q1w2e3r4"}, {}, {}, -1, -1, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::E_IPCS); EXPECT_EQ(fileInfoVec.size(), 0); -- Gitee From d4f64a395169ffa730adbe712e79ccf9dacd3761 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Sat, 13 May 2023 14:20:23 +0800 Subject: [PATCH 10/48] modify case Signed-off-by: CaoChuan --- test/unittest/medialibrary_file_access_test.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/unittest/medialibrary_file_access_test.cpp b/test/unittest/medialibrary_file_access_test.cpp index da40adab..c3b75af4 100644 --- a/test/unittest/medialibrary_file_access_test.cpp +++ b/test/unittest/medialibrary_file_access_test.cpp @@ -2307,28 +2307,28 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ListFile_0006, testing:: int64_t offset = 0; int64_t maxCount = 1000; std::vector fileInfoVec; - FileFilter filter({".txt", ".docx"}, {}, {}, 0, 0, false, true); + FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 5); - FileFilter filter1({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, 0, 0, false, true); + FileFilter filter1({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, -1, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter1, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 4); - FileFilter filter2({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, 1, 0, false, true); + FileFilter filter2({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, 0, 0, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter2, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 0); - FileFilter filter3({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, 0, 1, false, true); + FileFilter filter3({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, 1, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter3, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 4); double time = GetTime(); - FileFilter filter4({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, 0, time, false, true); + FileFilter filter4({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, time, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter4, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 0); -- Gitee From 60140a40ba7076f2420b684eed72a9b022b2e548 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Sat, 13 May 2023 20:26:10 +0800 Subject: [PATCH 11/48] temp commit Signed-off-by: CaoChuan --- .../FileExtensionAbility.ts | 141 +++++++++++++++--- 1 file changed, 123 insertions(+), 18 deletions(-) diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index e47814dc..62434850 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -522,39 +522,142 @@ export default class FileExtAbility extends Extension { return info; } + + + hasFilter(filter) : boolean { + if(filter == undefined) { + return false; + } - getFileInfos(sourceFileUri, offset, count, filter) { - let infos = [] - let i = 0; + let displayNameArray = filter["displayName"]; + if (displayNameArray != undefined && displayNameArray.length > 0) { + return true; + } + + let suffixArray = filter["suffix"]; + if (suffixArray != undefined && suffixArray.length > 0) { + return true; + } + + let lastModifiedAfter = filter["lastModifiedAfter"]; + if (lastModifiedAfter != undefined && lastModifiedAfter >=0) { + return true; + } + + let fileSizeOver = filter["fileSizeOver"]; + if (fileSizeOver != undefined && fileSizeOver >=0) { + return true; + } + + return false; + } + + getFilesWithoutFilter(path, offset, count, data) { let hasNextFile = true; + let infos = []; + let dirent; + let i = 0; try { - let path = this.getPath(sourceFileUri); let dir = fileio.opendirSync(path); - let dirent; while (((dirent = dir.readSync()) != undefined) && hasNextFile) { let stat = fileio.statSync(path + '/' + dirent.name); if (offset > i) { i++; + data.offset = i; continue; + } else if (offset == i) { + data.offset = offset; } - if (this.filterFile(dirent, stat, filter)) { - let info = this.buildInfo(sourceFileUri, dirent, stat); - infos.push(info); - } - i++; - if (i === (offset + count)) { + let info = this.buildInfo(sourceFileUri, dirent, stat); + infos.push(info); + if (infos.length === count) { hasNextFile = false; - break; + break; + } + } + dir.closeSync(); + } catch (e) { + hilog.error(DOMAIN_CODE, TAG, 'getFileWithFilter error ' + e); + dir.closeSync(); + return { + infos: [], + code: E_GET_FILE_INFOS, + }; + } + return { + infos: infos, + code: ERR_OK, + }; + } + + getFilesWithFilter(path, offset, count, filter, data) { + let hasNextFile = true; + let infos = []; + let dirent; + let i = 0; + try { + let dir = fileio.opendirSync(path); + while (((dirent = dir.readSync()) != undefined) && hasNextFile) { + if (!dirent.isDirectory) { + let stat = fileio.statSync(path + '/' + dirent.name); + if (this.filterFile(dirent, stat, filter)) { + if (offset > i) { + i++; + data.offset = i; + continue; + } else if (offset == i) { + data.offset = offset; + } + let info = this.buildInfo(path, dirent, stat); + infos.push(info); + if (infos.length === count) { + hasNextFile = false; + break; + } + } + } else { + let folderPath = path + '/' + dirent.name; + let leftOffset = offset - data.offset; + let letfCount = count - infos.length; + getFilesWithFilter(); } } dir.closeSync(); + } catch (e) { + hilog.error(DOMAIN_CODE, TAG, 'getFileWithFilter error ' + e); + dir.closeSync(); + return { + infos: [], + code: E_GET_FILE_INFOS, + }; + } + return { + infos: infos, + code: ERR_OK, + }; + } + + getFileInfos(sourceFileUri, offset, count, filter, data) { + let infos = []; + try { + let path = this.getPath(sourceFileUri); + let isDirectory = fileio.statSync(path).isDirectory(); + if (!isDirectory) { + if (this.hasFilter(filter)) { + infos = this.getFilesWithFilter(path, offset, count, filter, data); + } else { + infos = this.getFilesWithoutFilter(path, offset, count, data); + } + } else { + infos = this.getFilesWithoutFilter(path, offset, count, data); + } } catch (e) { hasNextFile = false; hilog.error(DOMAIN_CODE, TAG, 'getFileInfos error ' + e); return { infos: [], code: E_GET_FILE_INFOS, - } + }; } return { infos: infos, @@ -578,9 +681,7 @@ export default class FileExtAbility extends Extension { } let data = { - scanFile: false, - infos: [], - i: 0, + offset: 0, }; return this.getFileInfos(sourceFileUri, offset, count, filter, data); @@ -599,8 +700,12 @@ export default class FileExtAbility extends Extension { code: E_FILTER, }; } - - return this.getFileInfos(sourceFileUri, offset, count, filter); + let data = { + recursion: true, + infos: [], + i: 0, + }; + return this.getFileInfos(sourceFileUri, offset, count, filter, data); } getFileInfoFromUri(selectFileUri) { -- Gitee From 03b0eb5fa89ae6993332416dac11a095e8af9e78 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Sun, 14 May 2023 09:42:55 +0800 Subject: [PATCH 12/48] tmp commit Signed-off-by: CaoChuan --- .../FileExtensionAbility.ts | 69 ++--- test/unittest/external_file_access_test.cpp | 270 +++++++++++++++++- 2 files changed, 304 insertions(+), 35 deletions(-) diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index 62434850..7ca72b09 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -512,7 +512,7 @@ export default class FileExtAbility extends Extension { } let info = { - uri: this.genNewFileUri(sourceFileUri, dirent.name), + //uri: this.genNewFileUri(sourceFileUri, dirent.name), fileName: dirent.name, mode: mode, size: stat.size, @@ -554,26 +554,33 @@ export default class FileExtAbility extends Extension { getFilesWithoutFilter(path, offset, count, data) { let hasNextFile = true; - let infos = []; let dirent; + let leftOffset = offset; + let leftCount = count; let i = 0; try { let dir = fileio.opendirSync(path); while (((dirent = dir.readSync()) != undefined) && hasNextFile) { - let stat = fileio.statSync(path + '/' + dirent.name); + let fileName = path + '/' + dirent.name; + let stat = fileio.statSync(fileName); if (offset > i) { i++; - data.offset = i; + leftOffset--; continue; } else if (offset == i) { - data.offset = offset; + leftOffset = 0; } let info = this.buildInfo(sourceFileUri, dirent, stat); - infos.push(info); - if (infos.length === count) { + data.infos.push(info); + leftCount--; + if (data.infos.length === count) { hasNextFile = false; - break; - } + leftCount = 0; + break; + } + if (dirent.isDirectory() && data.recursion) { + getFilesWithoutFilter(fileName, leftOffset, leftCount, data); + } } dir.closeSync(); } catch (e) { @@ -585,41 +592,42 @@ export default class FileExtAbility extends Extension { }; } return { - infos: infos, + infos: data.infos, code: ERR_OK, }; } getFilesWithFilter(path, offset, count, filter, data) { let hasNextFile = true; - let infos = []; let dirent; let i = 0; + let leftOffset = offset; + let leftCount = count; try { let dir = fileio.opendirSync(path); while (((dirent = dir.readSync()) != undefined) && hasNextFile) { - if (!dirent.isDirectory) { - let stat = fileio.statSync(path + '/' + dirent.name); + let fileName = path + "/" + dirent.name; + if (!dirent.isDirectory()) { + let stat = fileio.statSync(fileName); if (this.filterFile(dirent, stat, filter)) { if (offset > i) { i++; - data.offset = i; + leftOffset--; continue; } else if (offset == i) { - data.offset = offset; + leftOffset = 0; } let info = this.buildInfo(path, dirent, stat); - infos.push(info); - if (infos.length === count) { + data.infos.push(info); + leftCount--; + if (data.infos.length === count) { + leftCount = 0; hasNextFile = false; break; } } - } else { - let folderPath = path + '/' + dirent.name; - let leftOffset = offset - data.offset; - let letfCount = count - infos.length; - getFilesWithFilter(); + } else if (dirent.isDirectory() && data.recursion){ + getFilesWithFilter(fileName, leftOffset, letfCount, filter, data); } } dir.closeSync(); @@ -641,13 +649,8 @@ export default class FileExtAbility extends Extension { let infos = []; try { let path = this.getPath(sourceFileUri); - let isDirectory = fileio.statSync(path).isDirectory(); - if (!isDirectory) { - if (this.hasFilter(filter)) { - infos = this.getFilesWithFilter(path, offset, count, filter, data); - } else { - infos = this.getFilesWithoutFilter(path, offset, count, data); - } + if (this.hasFilter(filter)) { + infos = this.getFilesWithFilter(path, offset, count, filter, data); } else { infos = this.getFilesWithoutFilter(path, offset, count, data); } @@ -660,7 +663,7 @@ export default class FileExtAbility extends Extension { }; } return { - infos: infos, + infos: data.infos, code: ERR_OK, }; } @@ -681,7 +684,8 @@ export default class FileExtAbility extends Extension { } let data = { - offset: 0, + infos: [], + recursion: false, }; return this.getFileInfos(sourceFileUri, offset, count, filter, data); @@ -701,9 +705,8 @@ export default class FileExtAbility extends Extension { }; } let data = { + infos:[], recursion: true, - infos: [], - i: 0, }; return this.getFileInfos(sourceFileUri, offset, count, filter, data); } diff --git a/test/unittest/external_file_access_test.cpp b/test/unittest/external_file_access_test.cpp index 12a870d4..c21a4ec0 100644 --- a/test/unittest/external_file_access_test.cpp +++ b/test/unittest/external_file_access_test.cpp @@ -2395,9 +2395,275 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0006, testing::e EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); } } catch (...) { - GTEST_LOG_(ERROR) << "external_file_access_ListFile_0000 occurs an exception."; + GTEST_LOG_(ERROR) << "external_file_access_ListFile_0006 occurs an exception."; } - GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0000"; + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0006"; +} + +/** + * @tc.number: user_file_service_external_file_access_ListFile_0007 + * @tc.name: external_file_access_ListFile_0007 + * @tc.desc: Test function of ListFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000H0387 + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0007, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ListFile_0007"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "test", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri1(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0007.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0007.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri3(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0007.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0007.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0007_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 4; + int64_t maxCount = 2; + std::vector fileInfoVec; + FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + ListFileInfo(fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 1); + + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_ListFile_0007 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0007"; +} + +/** + * @tc.number: user_file_service_external_file_access_ScanFile_0000 + * @tc.name: external_file_access_ScanFile_0000 + * @tc.desc: Test function of ListFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000H0387 + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0000, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ScanFile_0000"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "test", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri forlderUriTest(""); + result = g_fah->Mkdir(newDirUriTest, "test", forlderUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + Uri testUri1(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0000.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0000.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + Uri testUri3(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0000.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0000.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0000_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + ListFileInfo(fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 5); + + FileFilter filter1({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, -1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter1, fileInfoVec); + ListFileInfo(fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 4); + + FileFilter filter2({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, 1, 0, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter2, fileInfoVec); + ListFileInfo(fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 0); + + FileFilter filter3({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, 1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter3, fileInfoVec); + ListFileInfo(fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 4); + + double time = GetTime(); + FileFilter filter4({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, time, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter4, fileInfoVec); + ListFileInfo(fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 0); + + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_ScanFile_0000 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ScanFile_0000"; +} + +/** + * @tc.number: user_file_service_external_file_access_ScanFile_0001 + * @tc.name: external_file_access_ScanFile_0001 + * @tc.desc: Test function of ListFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000H0387 + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0001, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ScanFile_0001"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "test", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri forlderUriTest(""); + result = g_fah->Mkdir(newDirUriTest, "test", forlderUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + Uri testUri1(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0001.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0001.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + Uri testUri3(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0001.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0001.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0001_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter; + result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + ListFileInfo(fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 6); + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_ScanFile_0001 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ScanFile_0001"; +} + +/** + * @tc.number: user_file_service_external_file_access_ScanFile_0002 + * @tc.name: external_file_access_ScanFile_0002 + * @tc.desc: Test function of ListFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000H0387 + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0002, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ScanFile_0002"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "test", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri forlderUriTest(""); + result = g_fah->Mkdir(newDirUriTest, "test", forlderUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + Uri testUri1(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0002.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0002.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + Uri testUri3(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0002.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0002.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0002_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 3; + int64_t maxCount = 3; + std::vector fileInfoVec; + FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + ListFileInfo(fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 2); + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_ScanFile_0002 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ScanFile_0002"; } /** -- Gitee From 509716a2a2b124728235e083a1f70297263d1c59 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Sun, 14 May 2023 11:07:34 +0800 Subject: [PATCH 13/48] temp commit Signed-off-by: CaoChuan --- .../FileExtensionAbility.ts | 44 ++++++++++++++----- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index 7ca72b09..73c790ab 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -553,6 +553,7 @@ export default class FileExtAbility extends Extension { } getFilesWithoutFilter(path, offset, count, data) { + hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter path:' + path); let hasNextFile = true; let dirent; let leftOffset = offset; @@ -570,8 +571,9 @@ export default class FileExtAbility extends Extension { } else if (offset == i) { leftOffset = 0; } - let info = this.buildInfo(sourceFileUri, dirent, stat); + let info = this.buildInfo(path, dirent, stat); data.infos.push(info); + hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter data.infos.length' + data.infos.length); leftCount--; if (data.infos.length === count) { hasNextFile = false; @@ -579,6 +581,8 @@ export default class FileExtAbility extends Extension { break; } if (dirent.isDirectory() && data.recursion) { + hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter leftOffset:' + leftOffset + ",leftCount:" + leftCount); + hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter recursion'); getFilesWithoutFilter(fileName, leftOffset, leftCount, data); } } @@ -587,17 +591,16 @@ export default class FileExtAbility extends Extension { hilog.error(DOMAIN_CODE, TAG, 'getFileWithFilter error ' + e); dir.closeSync(); return { - infos: [], code: E_GET_FILE_INFOS, }; } return { - infos: data.infos, code: ERR_OK, }; } getFilesWithFilter(path, offset, count, filter, data) { + hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter path:' + path); let hasNextFile = true; let dirent; let i = 0; @@ -608,8 +611,10 @@ export default class FileExtAbility extends Extension { while (((dirent = dir.readSync()) != undefined) && hasNextFile) { let fileName = path + "/" + dirent.name; if (!dirent.isDirectory()) { + hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter isFile'); let stat = fileio.statSync(fileName); if (this.filterFile(dirent, stat, filter)) { + hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter filterOK-1 file:' + fileName); if (offset > i) { i++; leftOffset--; @@ -617,8 +622,10 @@ export default class FileExtAbility extends Extension { } else if (offset == i) { leftOffset = 0; } + hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter filterOK-2 file:' + fileName); let info = this.buildInfo(path, dirent, stat); data.infos.push(info); + hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter data.infos.length' + data.infos.length); leftCount--; if (data.infos.length === count) { leftCount = 0; @@ -627,6 +634,8 @@ export default class FileExtAbility extends Extension { } } } else if (dirent.isDirectory() && data.recursion){ + hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter recursion'); + hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter leftOffset:' + leftOffset + ",leftCount:" + leftCount); getFilesWithFilter(fileName, leftOffset, letfCount, filter, data); } } @@ -635,25 +644,26 @@ export default class FileExtAbility extends Extension { hilog.error(DOMAIN_CODE, TAG, 'getFileWithFilter error ' + e); dir.closeSync(); return { - infos: [], code: E_GET_FILE_INFOS, }; } return { - infos: infos, code: ERR_OK, }; } getFileInfos(sourceFileUri, offset, count, filter, data) { - let infos = []; try { let path = this.getPath(sourceFileUri); + let ret; if (this.hasFilter(filter)) { - infos = this.getFilesWithFilter(path, offset, count, filter, data); + hilog.error(DOMAIN_CODE, TAG, 'getFileInfos filter'); + ret = this.getFilesWithFilter(path, offset, count, filter, data); } else { - infos = this.getFilesWithoutFilter(path, offset, count, data); + hilog.error(DOMAIN_CODE, TAG, 'getFileInfos no filter'); + ret = this.getFilesWithoutFilter(path, offset, count, data); } + hilog.error(DOMAIN_CODE, TAG, 'getFileInfos infos.length ' + data.infos.length); } catch (e) { hasNextFile = false; hilog.error(DOMAIN_CODE, TAG, 'getFileInfos error ' + e); @@ -662,13 +672,23 @@ export default class FileExtAbility extends Extension { code: E_GET_FILE_INFOS, }; } - return { - infos: data.infos, - code: ERR_OK, - }; + if (ret == ERR_OK) { + hilog.error(DOMAIN_CODE, TAG, 'getFileInfos ret == ERR_OK infos.length ' + data.infos.length); + return { + infos: data.infos, + code: ERR_OK, + }; + } else { + hilog.error(DOMAIN_CODE, TAG, 'getFileInfos ret != ERR_OK'); + return { + infos: [], + code: E_GET_FILE_INFOS, + }; + } } listFile(sourceFileUri, offset, count, filter) { + hilog.error(DOMAIN_CODE, TAG, 'getFileInfoFromUri sourceFileUri ' + sourceFileUri); if (!this.checkUri(sourceFileUri)) { return { infos: [], -- Gitee From 5d23c4eedf5de514928ccb2373055af7d2ac6664 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Sun, 14 May 2023 16:06:04 +0800 Subject: [PATCH 14/48] modify bug Signed-off-by: CaoChuan --- .../FileExtensionAbility.ts | 58 ++++++++----------- test/unittest/external_file_access_test.cpp | 16 ++--- 2 files changed, 33 insertions(+), 41 deletions(-) diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index 73c790ab..cded8c41 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -556,106 +556,96 @@ export default class FileExtAbility extends Extension { hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter path:' + path); let hasNextFile = true; let dirent; - let leftOffset = offset; - let leftCount = count; let i = 0; try { let dir = fileio.opendirSync(path); while (((dirent = dir.readSync()) != undefined) && hasNextFile) { + hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter dirent.name' + dirent.name); let fileName = path + '/' + dirent.name; let stat = fileio.statSync(fileName); if (offset > i) { i++; - leftOffset--; + data.leftOffset--; continue; } else if (offset == i) { - leftOffset = 0; + data.leftOffset = 0; } let info = this.buildInfo(path, dirent, stat); data.infos.push(info); hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter data.infos.length' + data.infos.length); - leftCount--; + data.leftCount--; if (data.infos.length === count) { hasNextFile = false; - leftCount = 0; + data.leftCount = 0; break; } if (dirent.isDirectory() && data.recursion) { hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter leftOffset:' + leftOffset + ",leftCount:" + leftCount); hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter recursion'); - getFilesWithoutFilter(fileName, leftOffset, leftCount, data); + this.getFilesWithoutFilter(fileName, leftOffset, leftCount, data); } } dir.closeSync(); } catch (e) { - hilog.error(DOMAIN_CODE, TAG, 'getFileWithFilter error ' + e); + hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter error ' + e); dir.closeSync(); - return { - code: E_GET_FILE_INFOS, - }; + return E_GET_FILE_INFOS; } - return { - code: ERR_OK, - }; + return ERR_OK; } getFilesWithFilter(path, offset, count, filter, data) { hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter path:' + path); let hasNextFile = true; let dirent; - let i = 0; - let leftOffset = offset; - let leftCount = count; try { + let i = 0; let dir = fileio.opendirSync(path); while (((dirent = dir.readSync()) != undefined) && hasNextFile) { let fileName = path + "/" + dirent.name; + hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter fileName:' + fileName + ",data.recursion:" + data.recursion); if (!dirent.isDirectory()) { hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter isFile'); let stat = fileio.statSync(fileName); if (this.filterFile(dirent, stat, filter)) { - hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter filterOK-1 file:' + fileName); + hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter filterOK-1 file:' + fileName + ",i:" + i + ",offset:" + offset + ",leftOffset:" + data.leftOffset); if (offset > i) { i++; - leftOffset--; + data.leftOffset--; continue; } else if (offset == i) { - leftOffset = 0; + data.leftOffset = 0; } hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter filterOK-2 file:' + fileName); let info = this.buildInfo(path, dirent, stat); data.infos.push(info); hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter data.infos.length' + data.infos.length); - leftCount--; + data.leftCount--; if (data.infos.length === count) { - leftCount = 0; + data.leftCount = 0; hasNextFile = false; break; } } } else if (dirent.isDirectory() && data.recursion){ hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter recursion'); - hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter leftOffset:' + leftOffset + ",leftCount:" + leftCount); - getFilesWithFilter(fileName, leftOffset, letfCount, filter, data); + hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter leftOffset:' + data.leftOffset + ",leftCount:" + data.leftCount); + this.getFilesWithFilter(fileName, data.leftOffset, data.leftCount, filter, data); } } dir.closeSync(); } catch (e) { hilog.error(DOMAIN_CODE, TAG, 'getFileWithFilter error ' + e); dir.closeSync(); - return { - code: E_GET_FILE_INFOS, - }; + return E_GET_FILE_INFOS; } - return { - code: ERR_OK, - }; + return ERR_OK; } getFileInfos(sourceFileUri, offset, count, filter, data) { + let ret; try { let path = this.getPath(sourceFileUri); - let ret; if (this.hasFilter(filter)) { hilog.error(DOMAIN_CODE, TAG, 'getFileInfos filter'); ret = this.getFilesWithFilter(path, offset, count, filter, data); @@ -665,7 +655,6 @@ export default class FileExtAbility extends Extension { } hilog.error(DOMAIN_CODE, TAG, 'getFileInfos infos.length ' + data.infos.length); } catch (e) { - hasNextFile = false; hilog.error(DOMAIN_CODE, TAG, 'getFileInfos error ' + e); return { infos: [], @@ -688,7 +677,7 @@ export default class FileExtAbility extends Extension { } listFile(sourceFileUri, offset, count, filter) { - hilog.error(DOMAIN_CODE, TAG, 'getFileInfoFromUri sourceFileUri ' + sourceFileUri); + hilog.error(DOMAIN_CODE, TAG, 'listFile sourceFileUri ' + sourceFileUri); if (!this.checkUri(sourceFileUri)) { return { infos: [], @@ -706,12 +695,15 @@ export default class FileExtAbility extends Extension { let data = { infos: [], recursion: false, + leftCount: count, + leftOffset: offset, }; return this.getFileInfos(sourceFileUri, offset, count, filter, data); } scanFile(sourceFileUri, offset, count, filter) { + hilog.error(DOMAIN_CODE, TAG, 'scanFile sourceFileUri ' + sourceFileUri); if (!this.checkUri(sourceFileUri)) { return { infos: [], diff --git a/test/unittest/external_file_access_test.cpp b/test/unittest/external_file_access_test.cpp index c21a4ec0..3d4ad3fe 100644 --- a/test/unittest/external_file_access_test.cpp +++ b/test/unittest/external_file_access_test.cpp @@ -2505,32 +2505,32 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0000, testing::e int64_t maxCount = 1000; std::vector fileInfoVec; FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); - result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); ListFileInfo(fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 5); FileFilter filter1({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, -1, false, true); - result = g_fah->ListFile(fileInfo, offset, maxCount, filter1, fileInfoVec); + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter1, fileInfoVec); ListFileInfo(fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 4); FileFilter filter2({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, 1, 0, false, true); - result = g_fah->ListFile(fileInfo, offset, maxCount, filter2, fileInfoVec); + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter2, fileInfoVec); ListFileInfo(fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 0); FileFilter filter3({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, 1, false, true); - result = g_fah->ListFile(fileInfo, offset, maxCount, filter3, fileInfoVec); + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter3, fileInfoVec); ListFileInfo(fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 4); double time = GetTime(); FileFilter filter4({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, time, false, true); - result = g_fah->ListFile(fileInfo, offset, maxCount, filter4, fileInfoVec); + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter4, fileInfoVec); ListFileInfo(fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 0); @@ -2592,7 +2592,7 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0001, testing::e int64_t maxCount = 1000; std::vector fileInfoVec; FileFilter filter; - result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); ListFileInfo(fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 6); @@ -2653,10 +2653,10 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0002, testing::e int64_t maxCount = 3; std::vector fileInfoVec; FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); - result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); ListFileInfo(fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 2); + EXPECT_EQ(fileInfoVec.size(), 3); result = g_fah->Delete(newDirUriTest); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); } -- Gitee From 767d7c2740eaf2b20e960ba2d208cf0bc3012520 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Sun, 14 May 2023 16:58:52 +0800 Subject: [PATCH 15/48] modify no filter bug Signed-off-by: CaoChuan --- .../FileExtensionAbility/FileExtensionAbility.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index cded8c41..3e7ce5eb 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -556,9 +556,10 @@ export default class FileExtAbility extends Extension { hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter path:' + path); let hasNextFile = true; let dirent; - let i = 0; + let dir; try { - let dir = fileio.opendirSync(path); + let i = 0; + dir = fileio.opendirSync(path); while (((dirent = dir.readSync()) != undefined) && hasNextFile) { hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter dirent.name' + dirent.name); let fileName = path + '/' + dirent.name; @@ -580,9 +581,10 @@ export default class FileExtAbility extends Extension { break; } if (dirent.isDirectory() && data.recursion) { - hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter leftOffset:' + leftOffset + ",leftCount:" + leftCount); + hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter leftOffset:' + data.leftOffset + ",leftCount:" + + data.leftCount); hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter recursion'); - this.getFilesWithoutFilter(fileName, leftOffset, leftCount, data); + this.getFilesWithoutFilter(fileName, data.leftOffset, data.leftCount, data); } } dir.closeSync(); @@ -598,9 +600,10 @@ export default class FileExtAbility extends Extension { hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter path:' + path); let hasNextFile = true; let dirent; + let dir; try { let i = 0; - let dir = fileio.opendirSync(path); + dir = fileio.opendirSync(path); while (((dirent = dir.readSync()) != undefined) && hasNextFile) { let fileName = path + "/" + dirent.name; hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter fileName:' + fileName + ",data.recursion:" + data.recursion); -- Gitee From 45809ebf000c624834ecde28b42e30eb020b1cdb Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Sun, 14 May 2023 17:06:59 +0800 Subject: [PATCH 16/48] modify uri Signed-off-by: CaoChuan --- .../FileExtensionAbility/FileExtensionAbility.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index 3e7ce5eb..cdf1dec8 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -503,7 +503,7 @@ export default class FileExtAbility extends Extension { return true; } - buildInfo(sourceFileUri, dirent, stat) { + buildInfo(parentUri, fileName, dirent, stat) { let mode = documentFlag.SUPPORTS_READ | documentFlag.SUPPORTS_WRITE; if (stat.isDirectory()) { mode |= documentFlag.REPRESENTS_DIR; @@ -512,7 +512,7 @@ export default class FileExtAbility extends Extension { } let info = { - //uri: this.genNewFileUri(sourceFileUri, dirent.name), + uri: this.genNewFileUri(parentUri, fileName), fileName: dirent.name, mode: mode, size: stat.size, @@ -552,7 +552,7 @@ export default class FileExtAbility extends Extension { return false; } - getFilesWithoutFilter(path, offset, count, data) { + getFilesWithoutFilter(parentUri, path, offset, count, data) { hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter path:' + path); let hasNextFile = true; let dirent; @@ -571,7 +571,7 @@ export default class FileExtAbility extends Extension { } else if (offset == i) { data.leftOffset = 0; } - let info = this.buildInfo(path, dirent, stat); + let info = this.buildInfo(parentUri, path, dirent, stat); data.infos.push(info); hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter data.infos.length' + data.infos.length); data.leftCount--; @@ -596,7 +596,7 @@ export default class FileExtAbility extends Extension { return ERR_OK; } - getFilesWithFilter(path, offset, count, filter, data) { + getFilesWithFilter(parentUri, path, offset, count, filter, data) { hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter path:' + path); let hasNextFile = true; let dirent; @@ -620,7 +620,7 @@ export default class FileExtAbility extends Extension { data.leftOffset = 0; } hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter filterOK-2 file:' + fileName); - let info = this.buildInfo(path, dirent, stat); + let info = this.buildInfo(parentUri, path, dirent, stat); data.infos.push(info); hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter data.infos.length' + data.infos.length); data.leftCount--; @@ -651,10 +651,10 @@ export default class FileExtAbility extends Extension { let path = this.getPath(sourceFileUri); if (this.hasFilter(filter)) { hilog.error(DOMAIN_CODE, TAG, 'getFileInfos filter'); - ret = this.getFilesWithFilter(path, offset, count, filter, data); + ret = this.getFilesWithFilter(sourceFileUri, path, offset, count, filter, data); } else { hilog.error(DOMAIN_CODE, TAG, 'getFileInfos no filter'); - ret = this.getFilesWithoutFilter(path, offset, count, data); + ret = this.getFilesWithoutFilter(sourceFileUri, path, offset, count, data); } hilog.error(DOMAIN_CODE, TAG, 'getFileInfos infos.length ' + data.infos.length); } catch (e) { -- Gitee From c0519a7ead6883861a2d04f7c687290e04a9a403 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Mon, 15 May 2023 11:21:56 +0800 Subject: [PATCH 17/48] modify uri Signed-off-by: CaoChuan --- .../kits/js/src/common/file_info_result_set.h | 224 ------------------ .../FileExtensionAbility.ts | 22 +- 2 files changed, 12 insertions(+), 234 deletions(-) delete mode 100644 interfaces/kits/js/src/common/file_info_result_set.h diff --git a/interfaces/kits/js/src/common/file_info_result_set.h b/interfaces/kits/js/src/common/file_info_result_set.h deleted file mode 100644 index 4241fff3..00000000 --- a/interfaces/kits/js/src/common/file_info_result_set.h +++ /dev/null @@ -1,224 +0,0 @@ -/* - * 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 - * - * 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. - */ -#ifndef FILE_INFO_RESULT_SET_H -#define FILE_INFO_RESULT_SET_H - -#include -#include -#include -#include -#include -#include -#include - -#include "parcel.h" -#include "ashmem.h" -#include "file_access_extension_info.h" -#include "hilog_wrapper.h" -#include "ipc_file_descriptor.h" -#include "securec.h" - -namespace OHOS { -namespace DistributedFS { -namespace { - const int64_t FILEINFO_SIZE = sizeof(OHOS::FileAccessFwk::FileInfo); - const int64_t DEFAULT_FILE_COUNT = 1000; - const int32_t ERR_OK = 0; -} -class FileInfoResultSet : public Parcelable { -public: - FileInfoResultSet() = default; - ~FileInfoResultSet() - { - DestroySharedMemory(); - } - - int CreatSharedMemory(std::string sharedMemoryName, int64_t count) - { - /* - auto *resultSet = new (std::nothrow) FileInfoResultSet(count); - if (resultSet == nullptr) { - return { resultSet, -1 }; - }*/ - - int64_t memSize = maxCount_ * FILEINFO_SIZE; - int memFd_ = AshmemCreate(sharedMemoryName.c_str(), memSize); - if (memFd_ < 0) { - HILOG_ERROR("Create shared memory error, code: %{public}d", memFd_); - return memFd_; - } - - int ret = AshmemSetProt(memFd_, PROT_READ | PROT_WRITE); - if (ret < 0) { - HILOG_ERROR("Set shared memory protection mask error, code: %{public}d", ret); - ::close(memFd_); - return ret; - } - - memAddr_ = ::mmap(nullptr, memSize, PROT_READ | PROT_WRITE, MAP_SHARED, memFd_, 0); - if (memAddr_ == MAP_FAILED) { - ::close(memFd_); - ret = errno; - HILOG_ERROR("Shared memory map error, code: %{public}d", ret); - return ret; - } - return ERR_OK; - } - - void DestroySharedMemory() - { - if (memAddr_ != nullptr) { - ::munmap(memAddr_, maxCount_ * FILEINFO_SIZE); - ::close(memFd_); - memAddr_ = nullptr; - } - } - - bool WriteFileInfos(const OHOS::FileAccessFwk::FileInfo *infos, int64_t count) - { - int64_t leftSpaceCount = maxCount_ - currentCount_; - if (count > leftSpaceCount) { - HILOG_ERROR("Shared memory cannot hold current data"); - return false; - } - - int64_t memSize = count * FILEINFO_SIZE; - void *startAddr = static_cast(memAddr_) + currentCount_ * FILEINFO_SIZE; - if (memcpy_s(startAddr, memSize, infos, memSize) != ERR_OK) { - HILOG_ERROR("Shared memory write error"); - return false; - } - currentCount_ += count; - return true; - } - - bool ReadFileInfos(OHOS::FileAccessFwk::FileInfo *infos, int64_t count) - { - int64_t leftInfoCount = currentCount_ - offsetCount_; - if (count > leftInfoCount) { - HILOG_ERROR("Left count of FileInfo in shared memory is %{public}" PRId64, leftInfoCount); - return false; - } - - int64_t memSize = count * FILEINFO_SIZE; - void *startAddr = static_cast(memAddr_) + offsetCount_ * FILEINFO_SIZE; - if (memcpy_s(infos, memSize, startAddr, memSize) != ERR_OK) { - HILOG_ERROR("Shared memory read error"); - return false; - } - offsetCount_ += count; - return true; - } - - int64_t GetOffsetCount() - { - return offsetCount_; - } - - int64_t GetCurrentCount() - { - return currentCount_; - } - - int64_t GetMaxCount() - { - return maxCount_; - } - - bool Marshalling(Parcel &parcel) const - { - if (!WriteFileDescriptor(parcel, memFd_)) { - return false; - } - if (!parcel.WritePointer(reinterpret_cast(memAddr_))) { - return false; - } - if (!parcel.WriteInt64(offsetCount_)) { - return false; - } - if (!parcel.WriteInt64(currentCount_)) { - return false; - } - if (!parcel.WriteInt64(maxCount_)) { - return false; - } - return true; - } - - static FileInfoResultSet* Unmarshalling(Parcel &parcel) - { - auto *obj = new (std::nothrow) FileInfoResultSet(); - if (obj != nullptr && !obj->ReadFromParcel(parcel)) { - delete obj; - obj = nullptr; - } - return obj; - } - - bool ReadFromParcel(Parcel &parcel) - { - if (!ReadFileDescriptor(parcel)) { - return false; - } - - memAddr_ = reinterpret_cast(parcel.ReadPointer()); - if (memAddr_ != nullptr) { - return false; - } - offsetCount_ = parcel.ReadInt64(); - currentCount_ = parcel.ReadInt64(); - maxCount_ = parcel.ReadInt64(); - return true; - } -private: - bool WriteFileDescriptor(Parcel &parcel, int fd) const - { - if (fd < 0) { - return false; - } - int dupFd = dup(fd); - if (dupFd < 0) { - return false; - } - sptr descriptor = new IPCFileDescriptor(dupFd); - if (descriptor == nullptr) { - return false; - } - return parcel.WriteObject(descriptor); - } - - int ReadFileDescriptor(Parcel &parcel) - { - sptr descriptor = parcel.ReadObject(); - if (descriptor == nullptr) { - return false; - } - int fd = descriptor->GetFd(); - if (fd < 0) { - return false; - } - memFd_ = dup(fd); - return true; - } - - int memFd_ = -1; - void *memAddr_ = nullptr; - int64_t offsetCount_ = 0; - int64_t currentCount_ = 0; - int64_t maxCount_ = DEFAULT_FILE_COUNT; -}; -} // namespace DistributedFS -} // namespace OHOS -#endif // FILE_INFO_RESULT_SET_H \ No newline at end of file diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index cdf1dec8..1bb68cd5 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -503,16 +503,17 @@ export default class FileExtAbility extends Extension { return true; } - buildInfo(parentUri, fileName, dirent, stat) { + buildInfo(fileName, dirent, stat) { let mode = documentFlag.SUPPORTS_READ | documentFlag.SUPPORTS_WRITE; if (stat.isDirectory()) { mode |= documentFlag.REPRESENTS_DIR; } else { mode |= documentFlag.REPRESENTS_FILE; } - + + let uri = FILE_PREFIX_NAME + BUNDLE_NAME + fileName; let info = { - uri: this.genNewFileUri(parentUri, fileName), + uri: uri, fileName: dirent.name, mode: mode, size: stat.size, @@ -523,7 +524,6 @@ export default class FileExtAbility extends Extension { return info; } - hasFilter(filter) : boolean { if(filter == undefined) { return false; @@ -552,7 +552,7 @@ export default class FileExtAbility extends Extension { return false; } - getFilesWithoutFilter(parentUri, path, offset, count, data) { + getFilesWithoutFilter(path, offset, count, data) { hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter path:' + path); let hasNextFile = true; let dirent; @@ -571,7 +571,7 @@ export default class FileExtAbility extends Extension { } else if (offset == i) { data.leftOffset = 0; } - let info = this.buildInfo(parentUri, path, dirent, stat); + let info = this.buildInfo(fileName, dirent, stat); data.infos.push(info); hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter data.infos.length' + data.infos.length); data.leftCount--; @@ -596,7 +596,7 @@ export default class FileExtAbility extends Extension { return ERR_OK; } - getFilesWithFilter(parentUri, path, offset, count, filter, data) { + getFilesWithFilter(path, offset, count, filter, data) { hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter path:' + path); let hasNextFile = true; let dirent; @@ -620,7 +620,7 @@ export default class FileExtAbility extends Extension { data.leftOffset = 0; } hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter filterOK-2 file:' + fileName); - let info = this.buildInfo(parentUri, path, dirent, stat); + let info = this.buildInfo(fileName, dirent, stat); data.infos.push(info); hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter data.infos.length' + data.infos.length); data.leftCount--; @@ -651,10 +651,10 @@ export default class FileExtAbility extends Extension { let path = this.getPath(sourceFileUri); if (this.hasFilter(filter)) { hilog.error(DOMAIN_CODE, TAG, 'getFileInfos filter'); - ret = this.getFilesWithFilter(sourceFileUri, path, offset, count, filter, data); + ret = this.getFilesWithFilter(path, offset, count, filter, data); } else { hilog.error(DOMAIN_CODE, TAG, 'getFileInfos no filter'); - ret = this.getFilesWithoutFilter(sourceFileUri, path, offset, count, data); + ret = this.getFilesWithoutFilter(path, offset, count, data); } hilog.error(DOMAIN_CODE, TAG, 'getFileInfos infos.length ' + data.infos.length); } catch (e) { @@ -722,6 +722,8 @@ export default class FileExtAbility extends Extension { let data = { infos:[], recursion: true, + leftCount: count, + leftOffset: offset, }; return this.getFileInfos(sourceFileUri, offset, count, filter, data); } -- Gitee From 97e49b16540b8bec391da3906eda7512abb78d97 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Mon, 15 May 2023 11:31:35 +0800 Subject: [PATCH 18/48] remove log modify tdd Signed-off-by: CaoChuan --- .../FileExtensionAbility.ts | 37 ++++--------------- test/unittest/external_file_access_test.cpp | 20 ---------- 2 files changed, 8 insertions(+), 49 deletions(-) diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index 1bb68cd5..9597f7e2 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -38,7 +38,6 @@ const E_NOEXIST = 13900002; const E_URIS = 14300002; const E_FILTER = 14300003; const E_GETRESULT = 14300004; -const E_GET_FILE_INFOS = 14300005; export default class FileExtAbility extends Extension { onCreate(want): void { @@ -553,7 +552,6 @@ export default class FileExtAbility extends Extension { } getFilesWithoutFilter(path, offset, count, data) { - hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter path:' + path); let hasNextFile = true; let dirent; let dir; @@ -561,7 +559,6 @@ export default class FileExtAbility extends Extension { let i = 0; dir = fileio.opendirSync(path); while (((dirent = dir.readSync()) != undefined) && hasNextFile) { - hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter dirent.name' + dirent.name); let fileName = path + '/' + dirent.name; let stat = fileio.statSync(fileName); if (offset > i) { @@ -573,7 +570,6 @@ export default class FileExtAbility extends Extension { } let info = this.buildInfo(fileName, dirent, stat); data.infos.push(info); - hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter data.infos.length' + data.infos.length); data.leftCount--; if (data.infos.length === count) { hasNextFile = false; @@ -581,23 +577,19 @@ export default class FileExtAbility extends Extension { break; } if (dirent.isDirectory() && data.recursion) { - hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter leftOffset:' + data.leftOffset + ",leftCount:" + - data.leftCount); - hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter recursion'); this.getFilesWithoutFilter(fileName, data.leftOffset, data.leftCount, data); } } dir.closeSync(); } catch (e) { - hilog.error(DOMAIN_CODE, TAG, 'getFilesWithoutFilter error ' + e); + hilog.error(DOMAIN_CODE, TAG, 'get files without filter error ' + e); dir.closeSync(); - return E_GET_FILE_INFOS; + return E_GETRESULT; } return ERR_OK; } getFilesWithFilter(path, offset, count, filter, data) { - hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter path:' + path); let hasNextFile = true; let dirent; let dir; @@ -606,12 +598,9 @@ export default class FileExtAbility extends Extension { dir = fileio.opendirSync(path); while (((dirent = dir.readSync()) != undefined) && hasNextFile) { let fileName = path + "/" + dirent.name; - hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter fileName:' + fileName + ",data.recursion:" + data.recursion); if (!dirent.isDirectory()) { - hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter isFile'); let stat = fileio.statSync(fileName); if (this.filterFile(dirent, stat, filter)) { - hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter filterOK-1 file:' + fileName + ",i:" + i + ",offset:" + offset + ",leftOffset:" + data.leftOffset); if (offset > i) { i++; data.leftOffset--; @@ -619,10 +608,8 @@ export default class FileExtAbility extends Extension { } else if (offset == i) { data.leftOffset = 0; } - hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter filterOK-2 file:' + fileName); let info = this.buildInfo(fileName, dirent, stat); data.infos.push(info); - hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter data.infos.length' + data.infos.length); data.leftCount--; if (data.infos.length === count) { data.leftCount = 0; @@ -631,16 +618,14 @@ export default class FileExtAbility extends Extension { } } } else if (dirent.isDirectory() && data.recursion){ - hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter recursion'); - hilog.error(DOMAIN_CODE, TAG, 'getFilesWithFilter leftOffset:' + data.leftOffset + ",leftCount:" + data.leftCount); this.getFilesWithFilter(fileName, data.leftOffset, data.leftCount, filter, data); } } dir.closeSync(); } catch (e) { - hilog.error(DOMAIN_CODE, TAG, 'getFileWithFilter error ' + e); + hilog.error(DOMAIN_CODE, TAG, 'get files with filter error ' + e); dir.closeSync(); - return E_GET_FILE_INFOS; + return E_GETRESULT; } return ERR_OK; } @@ -650,37 +635,32 @@ export default class FileExtAbility extends Extension { try { let path = this.getPath(sourceFileUri); if (this.hasFilter(filter)) { - hilog.error(DOMAIN_CODE, TAG, 'getFileInfos filter'); ret = this.getFilesWithFilter(path, offset, count, filter, data); } else { - hilog.error(DOMAIN_CODE, TAG, 'getFileInfos no filter'); ret = this.getFilesWithoutFilter(path, offset, count, data); } - hilog.error(DOMAIN_CODE, TAG, 'getFileInfos infos.length ' + data.infos.length); } catch (e) { - hilog.error(DOMAIN_CODE, TAG, 'getFileInfos error ' + e); + hilog.error(DOMAIN_CODE, TAG, 'get fileInfos error ' + e); return { infos: [], - code: E_GET_FILE_INFOS, + code: E_GETRESULT, }; } if (ret == ERR_OK) { - hilog.error(DOMAIN_CODE, TAG, 'getFileInfos ret == ERR_OK infos.length ' + data.infos.length); return { infos: data.infos, code: ERR_OK, }; } else { - hilog.error(DOMAIN_CODE, TAG, 'getFileInfos ret != ERR_OK'); + hilog.error(DOMAIN_CODE, TAG, 'get fileInfos error'); return { infos: [], - code: E_GET_FILE_INFOS, + code: E_GETRESULT, }; } } listFile(sourceFileUri, offset, count, filter) { - hilog.error(DOMAIN_CODE, TAG, 'listFile sourceFileUri ' + sourceFileUri); if (!this.checkUri(sourceFileUri)) { return { infos: [], @@ -706,7 +686,6 @@ export default class FileExtAbility extends Extension { } scanFile(sourceFileUri, offset, count, filter) { - hilog.error(DOMAIN_CODE, TAG, 'scanFile sourceFileUri ' + sourceFileUri); if (!this.checkUri(sourceFileUri)) { return { infos: [], diff --git a/test/unittest/external_file_access_test.cpp b/test/unittest/external_file_access_test.cpp index 3d4ad3fe..215411f9 100644 --- a/test/unittest/external_file_access_test.cpp +++ b/test/unittest/external_file_access_test.cpp @@ -2311,13 +2311,6 @@ double GetTime() return (double)(t.tv_sec); } -void ListFileInfo(std::vector fileInfoVec) -{ - for (auto fileInfo : fileInfoVec) { - GTEST_LOG_(INFO) << "ListFile_0006 ListFileInfo uri:" << fileInfo.uri << ",relativePath" << fileInfo.relativePath << ",displayName:" << fileInfo.fileName; - } -} - /** * @tc.number: user_file_service_external_file_access_ListFile_0006 * @tc.name: external_file_access_ListFile_0006 @@ -2362,32 +2355,27 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0006, testing::e std::vector fileInfoVec; FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); - ListFileInfo(fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 5); FileFilter filter1({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, -1, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter1, fileInfoVec); - ListFileInfo(fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 4); FileFilter filter2({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, 1, 0, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter2, fileInfoVec); - ListFileInfo(fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 0); FileFilter filter3({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, 1, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter3, fileInfoVec); - ListFileInfo(fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 4); double time = GetTime(); FileFilter filter4({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, time, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter4, fileInfoVec); - ListFileInfo(fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 0); @@ -2444,7 +2432,6 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0007, testing::e std::vector fileInfoVec; FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); - ListFileInfo(fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 1); @@ -2506,32 +2493,27 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0000, testing::e std::vector fileInfoVec; FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); - ListFileInfo(fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 5); FileFilter filter1({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, -1, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter1, fileInfoVec); - ListFileInfo(fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 4); FileFilter filter2({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, 1, 0, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter2, fileInfoVec); - ListFileInfo(fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 0); FileFilter filter3({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, 1, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter3, fileInfoVec); - ListFileInfo(fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 4); double time = GetTime(); FileFilter filter4({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, time, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter4, fileInfoVec); - ListFileInfo(fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 0); @@ -2593,7 +2575,6 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0001, testing::e std::vector fileInfoVec; FileFilter filter; result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); - ListFileInfo(fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 6); result = g_fah->Delete(newDirUriTest); @@ -2654,7 +2635,6 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0002, testing::e std::vector fileInfoVec; FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); - ListFileInfo(fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 3); result = g_fah->Delete(newDirUriTest); -- Gitee From a916626fde3bd629fb028bc117f753a71a194f4b Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Mon, 15 May 2023 15:55:49 +0800 Subject: [PATCH 19/48] modify offset of ListFile and ScanFile Signed-off-by: CaoChuan --- .../FileExtensionAbility.ts | 62 +++++++++---------- 1 file changed, 29 insertions(+), 33 deletions(-) diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index 9597f7e2..8eaafb2b 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -551,93 +551,87 @@ export default class FileExtAbility extends Extension { return false; } - getFilesWithoutFilter(path, offset, count, data) { + getFilesWithoutFilter(path, data) { let hasNextFile = true; let dirent; let dir; try { - let i = 0; dir = fileio.opendirSync(path); while (((dirent = dir.readSync()) != undefined) && hasNextFile) { let fileName = path + '/' + dirent.name; let stat = fileio.statSync(fileName); - if (offset > i) { - i++; - data.leftOffset--; + if (data.offset > data.i) { + data.i++; continue; - } else if (offset == i) { - data.leftOffset = 0; } let info = this.buildInfo(fileName, dirent, stat); data.infos.push(info); - data.leftCount--; - if (data.infos.length === count) { + if (data.infos.length === data.count) { hasNextFile = false; - data.leftCount = 0; break; } if (dirent.isDirectory() && data.recursion) { - this.getFilesWithoutFilter(fileName, data.leftOffset, data.leftCount, data); + this.getFilesWithoutFilter(fileName, data); } } dir.closeSync(); } catch (e) { hilog.error(DOMAIN_CODE, TAG, 'get files without filter error ' + e); - dir.closeSync(); + if (dir != undefined) { + ir.closeSync(); + } + hasNextFile = false; return E_GETRESULT; } return ERR_OK; } - getFilesWithFilter(path, offset, count, filter, data) { + getFilesWithFilter(path, filter, data) { let hasNextFile = true; let dirent; let dir; try { - let i = 0; dir = fileio.opendirSync(path); while (((dirent = dir.readSync()) != undefined) && hasNextFile) { let fileName = path + "/" + dirent.name; if (!dirent.isDirectory()) { let stat = fileio.statSync(fileName); if (this.filterFile(dirent, stat, filter)) { - if (offset > i) { - i++; - data.leftOffset--; + if (data.offset > data.i) { + data.i++; continue; - } else if (offset == i) { - data.leftOffset = 0; } let info = this.buildInfo(fileName, dirent, stat); data.infos.push(info); - data.leftCount--; - if (data.infos.length === count) { - data.leftCount = 0; + if (data.infos.length === data.count) { hasNextFile = false; break; } } } else if (dirent.isDirectory() && data.recursion){ - this.getFilesWithFilter(fileName, data.leftOffset, data.leftCount, filter, data); + this.getFilesWithFilter(fileName, filter, data); } } dir.closeSync(); } catch (e) { hilog.error(DOMAIN_CODE, TAG, 'get files with filter error ' + e); - dir.closeSync(); + if (dir != undefined) { + dir.closeSync(); + } + hasNextFile = false; return E_GETRESULT; } return ERR_OK; } - getFileInfos(sourceFileUri, offset, count, filter, data) { + getFileInfos(sourceFileUri, filter, data) { let ret; try { let path = this.getPath(sourceFileUri); if (this.hasFilter(filter)) { - ret = this.getFilesWithFilter(path, offset, count, filter, data); + ret = this.getFilesWithFilter(path, filter, data); } else { - ret = this.getFilesWithoutFilter(path, offset, count, data); + ret = this.getFilesWithoutFilter(path, data); } } catch (e) { hilog.error(DOMAIN_CODE, TAG, 'get fileInfos error ' + e); @@ -678,11 +672,12 @@ export default class FileExtAbility extends Extension { let data = { infos: [], recursion: false, - leftCount: count, - leftOffset: offset, + count: count, + offset: offset, + i: 0, }; - return this.getFileInfos(sourceFileUri, offset, count, filter, data); + return this.getFileInfos(sourceFileUri, filter, data); } scanFile(sourceFileUri, offset, count, filter) { @@ -701,10 +696,11 @@ export default class FileExtAbility extends Extension { let data = { infos:[], recursion: true, - leftCount: count, - leftOffset: offset, + count: count, + offset: offset, + i: 0, }; - return this.getFileInfos(sourceFileUri, offset, count, filter, data); + return this.getFileInfos(sourceFileUri, filter, data); } getFileInfoFromUri(selectFileUri) { -- Gitee From c450d308dc842701bc5c70586afb6ff71f54aaf9 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Mon, 15 May 2023 15:58:06 +0800 Subject: [PATCH 20/48] modify scanFile and listFile offse Signed-off-by: CaoChuan --- test/unittest/external_file_access_test.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/unittest/external_file_access_test.cpp b/test/unittest/external_file_access_test.cpp index 215411f9..074cbdcb 100644 --- a/test/unittest/external_file_access_test.cpp +++ b/test/unittest/external_file_access_test.cpp @@ -2428,7 +2428,7 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0007, testing::e FileInfo fileInfo; fileInfo.uri = newDirUriTest.ToString(); int64_t offset = 4; - int64_t maxCount = 2; + int64_t maxCount = 1; std::vector fileInfoVec; FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); @@ -2636,7 +2636,7 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0002, testing::e FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 3); + EXPECT_EQ(fileInfoVec.size(), 2); result = g_fah->Delete(newDirUriTest); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); } -- Gitee From 46182c1dfb8d5fc85e35b0668e70e33f1ae143af Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Mon, 15 May 2023 16:38:53 +0800 Subject: [PATCH 21/48] modify format Signed-off-by: CaoChuan --- .../FileExtensionAbility.ts | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index 8eaafb2b..e8fd67d9 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -394,32 +394,32 @@ export default class FileExtAbility extends Extension { } checkOnlyMimeTypeFilter(filter) : boolean { - if (filter == undefined) { + if (filter === undefined) { return false; } let suffixArray = filter["suffix"]; - if (suffixArray != undefined && suffixArray.length > 0) { + if (suffixArray !== undefined && suffixArray.length > 0) { return false; } let displayNameArray = filter["displayName"]; - if (displayNameArray != undefined && displayNameArray.length > 0) { + if (displayNameArray !== undefined && displayNameArray.length > 0) { return false; } let fileSizeOver = filter["fileSizeOver"]; - if (fileSizeOver != undefined && fileSizeOver >= 0) { + if (fileSizeOver !== undefined && fileSizeOver >= 0) { return false; } let lastModifiedAfter = filter["lastModifiedAfter"]; - if (lastModifiedAfter != undefined && lastModifiedAfter>= 0) { + if (lastModifiedAfter !== undefined && lastModifiedAfter>= 0) { return false; } let mimeTypeArray = filter["mimeType"]; - if (mimeTypeArray != undefined && mimeTypeArray.length > 0) { + if (mimeTypeArray !== undefined && mimeTypeArray.length > 0) { return true; } return false; @@ -427,12 +427,12 @@ export default class FileExtAbility extends Extension { checkSuffix(suffix, filter) : boolean { let suffixArray = filter["suffix"]; - if (suffixArray == undefined || suffixArray.length == 0) { + if (suffixArray === undefined || suffixArray.length === 0) { return true; } else { let len = suffixArray.length; for (let i = 0; i < len; i++) { - if (suffix == suffixArray[i]) { + if (suffix === suffixArray[i]) { return true; } } @@ -442,12 +442,12 @@ export default class FileExtAbility extends Extension { checkDisplayName(displayName, filter) : boolean { let displayNameArray = filter["displayName"]; - if (displayNameArray == undefined || displayNameArray.length == 0) { + if (displayNameArray === undefined || displayNameArray.length === 0) { return true; } else { let len = displayNameArray.length; for (let i = 0; i < len; i++) { - if (displayName.lastIndexOf(displayNameArray[i]) != -1) { + if (displayName.lastIndexOf(displayNameArray[i]) !== -1) { return true; } } @@ -457,7 +457,7 @@ export default class FileExtAbility extends Extension { checkFileSizeOver(fileSize, filter) : boolean { let fileSizeOver = filter["fileSizeOver"]; - if (fileSizeOver == undefined || fileSizeOver < 0) { + if (fileSizeOver === undefined || fileSizeOver < 0) { return true; } else if (fileSize > fileSizeOver) { return true; @@ -467,7 +467,7 @@ export default class FileExtAbility extends Extension { checkLastModifiedAfter(lastModified, filter) : boolean { let lastModifiedAfter = filter["lastModifiedAfter"]; - if (lastModifiedAfter == undefined || lastModifiedAfter < 0) { + if (lastModifiedAfter === undefined || lastModifiedAfter < 0) { return true; } else if (lastModified > lastModifiedAfter) { return true; @@ -476,7 +476,7 @@ export default class FileExtAbility extends Extension { } filterFile(dirent, stat, filter) : boolean { - if (filter == undefined) { + if (filter === undefined) { return true; } @@ -484,7 +484,7 @@ export default class FileExtAbility extends Extension { if (!this.checkDisplayName(displayName, filter)) { return false; } - let suffixIndex = displayName.lastIndexOf("."); + let suffixIndex = displayName.lastIndexOf("."); let suffix = displayName.substring(suffixIndex, displayName.length); if (!this.checkSuffix(suffix, filter)) { return false; @@ -496,7 +496,7 @@ export default class FileExtAbility extends Extension { } let fileSize = stat.size; - if(!this.checkFileSizeOver(fileSize, filter)) { + if (!this.checkFileSizeOver(fileSize, filter)) { return false; } return true; @@ -524,27 +524,27 @@ export default class FileExtAbility extends Extension { } hasFilter(filter) : boolean { - if(filter == undefined) { + if (filter === undefined) { return false; } let displayNameArray = filter["displayName"]; - if (displayNameArray != undefined && displayNameArray.length > 0) { + if (displayNameArray !== undefined && displayNameArray.length > 0) { return true; } let suffixArray = filter["suffix"]; - if (suffixArray != undefined && suffixArray.length > 0) { + if (suffixArray !== undefined && suffixArray.length > 0) { return true; } let lastModifiedAfter = filter["lastModifiedAfter"]; - if (lastModifiedAfter != undefined && lastModifiedAfter >=0) { + if (lastModifiedAfter !== undefined && lastModifiedAfter >=0) { return true; } let fileSizeOver = filter["fileSizeOver"]; - if (fileSizeOver != undefined && fileSizeOver >=0) { + if (fileSizeOver !== undefined && fileSizeOver >=0) { return true; } @@ -557,7 +557,7 @@ export default class FileExtAbility extends Extension { let dir; try { dir = fileio.opendirSync(path); - while (((dirent = dir.readSync()) != undefined) && hasNextFile) { + while (((dirent = dir.readSync()) !== undefined) && hasNextFile) { let fileName = path + '/' + dirent.name; let stat = fileio.statSync(fileName); if (data.offset > data.i) { @@ -577,7 +577,7 @@ export default class FileExtAbility extends Extension { dir.closeSync(); } catch (e) { hilog.error(DOMAIN_CODE, TAG, 'get files without filter error ' + e); - if (dir != undefined) { + if (dir !== undefined) { ir.closeSync(); } hasNextFile = false; @@ -615,7 +615,7 @@ export default class FileExtAbility extends Extension { dir.closeSync(); } catch (e) { hilog.error(DOMAIN_CODE, TAG, 'get files with filter error ' + e); - if (dir != undefined) { + if (dir !== undefined) { dir.closeSync(); } hasNextFile = false; @@ -640,7 +640,7 @@ export default class FileExtAbility extends Extension { code: E_GETRESULT, }; } - if (ret == ERR_OK) { + if (ret === ERR_OK) { return { infos: data.infos, code: ERR_OK, -- Gitee From 6895650ad2ab0a19e6399e7cfe2914ef28321870 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Mon, 15 May 2023 17:36:56 +0800 Subject: [PATCH 22/48] modify format Signed-off-by: CaoChuan --- .../js/napi/file_access_module/napi_utils.cpp | 4 +- test/unittest/external_file_access_test.cpp | 405 ++++++++++-------- 2 files changed, 230 insertions(+), 179 deletions(-) diff --git a/frameworks/js/napi/file_access_module/napi_utils.cpp b/frameworks/js/napi/file_access_module/napi_utils.cpp index 7d9b3595..339a3729 100644 --- a/frameworks/js/napi/file_access_module/napi_utils.cpp +++ b/frameworks/js/napi/file_access_module/napi_utils.cpp @@ -113,7 +113,7 @@ int GetFileFilterParam(const NVal &argv, FileFilter &filter) HILOG_ERROR("FileFilter get fileSizeOver param fail."); return EINVAL; } - if(fileSizeOver < 0) { + if (fileSizeOver < 0) { HILOG_ERROR("FileFilter fileSizeOver need more than 0."); return EINVAL; } @@ -128,7 +128,7 @@ int GetFileFilterParam(const NVal &argv, FileFilter &filter) HILOG_ERROR("FileFilter get lastModifiedAfter param fail."); return EINVAL; } - if(lastModifiedAfter < 0) { + if (lastModifiedAfter < 0) { HILOG_ERROR("FileFilter lastModifiedAfter need more than 0."); return EINVAL; } diff --git a/test/unittest/external_file_access_test.cpp b/test/unittest/external_file_access_test.cpp index 074cbdcb..07a2e104 100644 --- a/test/unittest/external_file_access_test.cpp +++ b/test/unittest/external_file_access_test.cpp @@ -2311,6 +2311,58 @@ double GetTime() return (double)(t.tv_sec); } +void initListFile6(Uri newDirUriTest) +{ + Uri testUri1(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0006.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0006.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri3(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0006.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0006.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0006_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); +} + +void ListFileFilter6(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 5); + + FileFilter filter1({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, -1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter1, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 4); + + FileFilter filter2({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, 1, 0, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter2, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 0); + + FileFilter filter3({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, 1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter3, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 4); + + double time = GetTime(); + FileFilter filter4({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, time, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter4, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 0); +} /** * @tc.number: user_file_service_external_file_access_ListFile_0006 * @tc.name: external_file_access_ListFile_0006 @@ -2332,52 +2384,9 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0006, testing::e Uri newDirUriTest(""); result = g_fah->Mkdir(parentUri, "test", newDirUriTest); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri1(""); - result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0006.txt", testUri1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri2(""); - result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0006.docx", testUri2); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri3(""); - result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0006.txt", testUri3); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri4(""); - result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0006.docx", testUri4); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri5(""); - result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0006_01.docx", testUri5); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - FileInfo fileInfo; - fileInfo.uri = newDirUriTest.ToString(); - int64_t offset = 0; - int64_t maxCount = 1000; - std::vector fileInfoVec; - FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); - result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 5); - - FileFilter filter1({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, -1, false, true); - result = g_fah->ListFile(fileInfo, offset, maxCount, filter1, fileInfoVec); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 4); - - FileFilter filter2({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, 1, 0, false, true); - result = g_fah->ListFile(fileInfo, offset, maxCount, filter2, fileInfoVec); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 0); - - FileFilter filter3({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, 1, false, true); - result = g_fah->ListFile(fileInfo, offset, maxCount, filter3, fileInfoVec); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 4); - - double time = GetTime(); - FileFilter filter4({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, time, false, true); - result = g_fah->ListFile(fileInfo, offset, maxCount, filter4, fileInfoVec); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 0); + initListFile6(newDirUriTest); + ListFileFilter6(newDirUriTest); result = g_fah->Delete(newDirUriTest); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); @@ -2388,6 +2397,38 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0006, testing::e GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0006"; } +void InitListFile7(Uri newDirUriTest) +{ + Uri testUri1(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0007.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0007.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri3(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0007.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0007.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0007_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); +} + +void ListFileFilter7(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 4; + int64_t maxCount = 1; + std::vector fileInfoVec; + FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 1); +} + /** * @tc.number: user_file_service_external_file_access_ListFile_0007 * @tc.name: external_file_access_ListFile_0007 @@ -2409,31 +2450,9 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0007, testing::e Uri newDirUriTest(""); result = g_fah->Mkdir(parentUri, "test", newDirUriTest); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri1(""); - result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0007.txt", testUri1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri2(""); - result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0007.docx", testUri2); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri3(""); - result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0007.txt", testUri3); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri4(""); - result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0007.docx", testUri4); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri5(""); - result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0007_01.docx", testUri5); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - - FileInfo fileInfo; - fileInfo.uri = newDirUriTest.ToString(); - int64_t offset = 4; - int64_t maxCount = 1; - std::vector fileInfoVec; - FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); - result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 1); + + InitListFile7(newDirUriTest); + ListFileFilter7(newDirUriTest); result = g_fah->Delete(newDirUriTest); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); @@ -2444,6 +2463,64 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0007, testing::e GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0007"; } + +void InitScanFile0(Uri newDirUriTest) { + + Uri forlderUriTest(""); + result = g_fah->Mkdir(newDirUriTest, "test", forlderUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + Uri testUri1(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0000.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0000.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + Uri testUri3(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0000.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0000.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0000_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); +} + +void ScanFileFilter0(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 5); + + FileFilter filter1({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, -1, false, true); + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter1, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 4); + + FileFilter filter2({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, 1, 0, false, true); + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter2, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 0); + + FileFilter filter3({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, 1, false, true); + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter3, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 4); + + double time = GetTime(); + FileFilter filter4({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, time, false, true); + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter4, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 0); +} /** * @tc.number: user_file_service_external_file_access_ScanFile_0000 * @tc.name: external_file_access_ScanFile_0000 @@ -2465,57 +2542,9 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0000, testing::e Uri newDirUriTest(""); result = g_fah->Mkdir(parentUri, "test", newDirUriTest); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri forlderUriTest(""); - result = g_fah->Mkdir(newDirUriTest, "test", forlderUriTest); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri1(""); - result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0000.txt", testUri1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri2(""); - result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0000.docx", testUri2); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - - Uri testUri3(""); - result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0000.txt", testUri3); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri4(""); - result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0000.docx", testUri4); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri5(""); - result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0000_01.docx", testUri5); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - - FileInfo fileInfo; - fileInfo.uri = newDirUriTest.ToString(); - int64_t offset = 0; - int64_t maxCount = 1000; - std::vector fileInfoVec; - FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); - result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 5); - - FileFilter filter1({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, -1, false, true); - result = g_fah->ScanFile(fileInfo, offset, maxCount, filter1, fileInfoVec); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 4); - - FileFilter filter2({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, 1, 0, false, true); - result = g_fah->ScanFile(fileInfo, offset, maxCount, filter2, fileInfoVec); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 0); - - FileFilter filter3({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, 1, false, true); - result = g_fah->ScanFile(fileInfo, offset, maxCount, filter3, fileInfoVec); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 4); - - double time = GetTime(); - FileFilter filter4({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, time, false, true); - result = g_fah->ScanFile(fileInfo, offset, maxCount, filter4, fileInfoVec); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 0); + InitScanFile0(newDirUriTest); + ScanFileFilter0(newDirUriTest); result = g_fah->Delete(newDirUriTest); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); @@ -2526,6 +2555,43 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0000, testing::e GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ScanFile_0000"; } +void InitScanFile1(Uri newDirUriTest) +{ + Uri forlderUriTest(""); + result = g_fah->Mkdir(newDirUriTest, "test", forlderUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + Uri testUri1(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0001.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0001.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + Uri testUri3(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0001.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0001.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0001_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); +} + +void ScanFileFilter1(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter; + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 6); +} + /** * @tc.number: user_file_service_external_file_access_ScanFile_0001 * @tc.name: external_file_access_ScanFile_0001 @@ -2543,40 +2609,14 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0001, testing::e int result = g_fah->GetRoots(info); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); for (size_t i = 0; i < info.size(); i++) { - Uri parentUri(info[i].uri); + Uri parentUri(info.uri); Uri newDirUriTest(""); result = g_fah->Mkdir(parentUri, "test", newDirUriTest); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri forlderUriTest(""); - result = g_fah->Mkdir(newDirUriTest, "test", forlderUriTest); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri1(""); - result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0001.txt", testUri1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri2(""); - result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0001.docx", testUri2); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - - Uri testUri3(""); - result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0001.txt", testUri3); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri4(""); - result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0001.docx", testUri4); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri5(""); - result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0001_01.docx", testUri5); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + InitScanFile1(newDirUriTest); + ScanFileFilter1(newDirUriTest); - FileInfo fileInfo; - fileInfo.uri = newDirUriTest.ToString(); - int64_t offset = 0; - int64_t maxCount = 1000; - std::vector fileInfoVec; - FileFilter filter; - result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 6); result = g_fah->Delete(newDirUriTest); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); } @@ -2586,6 +2626,43 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0001, testing::e GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ScanFile_0001"; } +void InitScanFile2(Uri newDirUriTest) +{ + Uri forlderUriTest(""); + result = g_fah->Mkdir(newDirUriTest, "test", forlderUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + Uri testUri1(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0002.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0002.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + Uri testUri3(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0002.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0002.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0002_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); +} + +void ScanFileFilter2(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 3; + int64_t maxCount = 3; + std::vector fileInfoVec; + FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 2); +} + /** * @tc.number: user_file_service_external_file_access_ScanFile_0002 * @tc.name: external_file_access_ScanFile_0002 @@ -2607,36 +2684,10 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0002, testing::e Uri newDirUriTest(""); result = g_fah->Mkdir(parentUri, "test", newDirUriTest); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri forlderUriTest(""); - result = g_fah->Mkdir(newDirUriTest, "test", forlderUriTest); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri1(""); - result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0002.txt", testUri1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri2(""); - result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0002.docx", testUri2); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + InitScanFile2(newDirUriTest); + ScanFileFilter2(newDirUriTest); - Uri testUri3(""); - result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0002.txt", testUri3); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri4(""); - result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0002.docx", testUri4); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri5(""); - result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0002_01.docx", testUri5); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - - FileInfo fileInfo; - fileInfo.uri = newDirUriTest.ToString(); - int64_t offset = 3; - int64_t maxCount = 3; - std::vector fileInfoVec; - FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); - result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 2); result = g_fah->Delete(newDirUriTest); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); } -- Gitee From b87eb46d0c81ab0f69ff3fd71cbeec0a056fdc58 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Mon, 15 May 2023 18:57:59 +0800 Subject: [PATCH 23/48] modify format Signed-off-by: CaoChuan --- .../js/napi/file_access_module/napi_utils.cpp | 4 +- .../FileExtensionAbility.ts | 32 ++++++------- test/unittest/external_file_access_test.cpp | 48 ++++++++++--------- 3 files changed, 44 insertions(+), 40 deletions(-) diff --git a/frameworks/js/napi/file_access_module/napi_utils.cpp b/frameworks/js/napi/file_access_module/napi_utils.cpp index 339a3729..3a4dad9f 100644 --- a/frameworks/js/napi/file_access_module/napi_utils.cpp +++ b/frameworks/js/napi/file_access_module/napi_utils.cpp @@ -115,7 +115,7 @@ int GetFileFilterParam(const NVal &argv, FileFilter &filter) } if (fileSizeOver < 0) { HILOG_ERROR("FileFilter fileSizeOver need more than 0."); - return EINVAL; + return EINVAL; } filter.SetFileSizeOver(fileSizeOver); filter.SetHasFilter(true); @@ -130,7 +130,7 @@ int GetFileFilterParam(const NVal &argv, FileFilter &filter) } if (lastModifiedAfter < 0) { HILOG_ERROR("FileFilter lastModifiedAfter need more than 0."); - return EINVAL; + return EINVAL; } filter.SetLastModifiedAfter(lastModifiedAfter); filter.SetHasFilter(true); diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index e8fd67d9..d2d5e7b2 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -398,27 +398,27 @@ export default class FileExtAbility extends Extension { return false; } - let suffixArray = filter["suffix"]; + let suffixArray = filter.suffix; if (suffixArray !== undefined && suffixArray.length > 0) { return false; } - let displayNameArray = filter["displayName"]; + let displayNameArray = filter.displayName; if (displayNameArray !== undefined && displayNameArray.length > 0) { return false; } - let fileSizeOver = filter["fileSizeOver"]; + let fileSizeOver = filter.fileSizeOver; if (fileSizeOver !== undefined && fileSizeOver >= 0) { return false; } - let lastModifiedAfter = filter["lastModifiedAfter"]; + let lastModifiedAfter = filter.lastModifiedAfter; if (lastModifiedAfter !== undefined && lastModifiedAfter>= 0) { return false; } - let mimeTypeArray = filter["mimeType"]; + let mimeTypeArray = filter.mimeType; if (mimeTypeArray !== undefined && mimeTypeArray.length > 0) { return true; } @@ -426,7 +426,7 @@ export default class FileExtAbility extends Extension { } checkSuffix(suffix, filter) : boolean { - let suffixArray = filter["suffix"]; + let suffixArray = filter.suffix; if (suffixArray === undefined || suffixArray.length === 0) { return true; } else { @@ -441,7 +441,7 @@ export default class FileExtAbility extends Extension { } checkDisplayName(displayName, filter) : boolean { - let displayNameArray = filter["displayName"]; + let displayNameArray = filter.displayName; if (displayNameArray === undefined || displayNameArray.length === 0) { return true; } else { @@ -451,12 +451,12 @@ export default class FileExtAbility extends Extension { return true; } } - } + } return false; } checkFileSizeOver(fileSize, filter) : boolean { - let fileSizeOver = filter["fileSizeOver"]; + let fileSizeOver = filter.fileSizeOver; if (fileSizeOver === undefined || fileSizeOver < 0) { return true; } else if (fileSize > fileSizeOver) { @@ -466,7 +466,7 @@ export default class FileExtAbility extends Extension { } checkLastModifiedAfter(lastModified, filter) : boolean { - let lastModifiedAfter = filter["lastModifiedAfter"]; + let lastModifiedAfter = filter.lastModifiedAfter; if (lastModifiedAfter === undefined || lastModifiedAfter < 0) { return true; } else if (lastModified > lastModifiedAfter) { @@ -484,7 +484,7 @@ export default class FileExtAbility extends Extension { if (!this.checkDisplayName(displayName, filter)) { return false; } - let suffixIndex = displayName.lastIndexOf("."); + let suffixIndex = displayName.lastIndexOf('.'); let suffix = displayName.substring(suffixIndex, displayName.length); if (!this.checkSuffix(suffix, filter)) { return false; @@ -528,22 +528,22 @@ export default class FileExtAbility extends Extension { return false; } - let displayNameArray = filter["displayName"]; + let displayNameArray = filter.displayName; if (displayNameArray !== undefined && displayNameArray.length > 0) { return true; } - let suffixArray = filter["suffix"]; + let suffixArray = filter.suffix; if (suffixArray !== undefined && suffixArray.length > 0) { return true; } - let lastModifiedAfter = filter["lastModifiedAfter"]; + let lastModifiedAfter = filter.lastModifiedAfter; if (lastModifiedAfter !== undefined && lastModifiedAfter >=0) { return true; } - let fileSizeOver = filter["fileSizeOver"]; + let fileSizeOver = filter.fileSizeOver; if (fileSizeOver !== undefined && fileSizeOver >=0) { return true; } @@ -593,7 +593,7 @@ export default class FileExtAbility extends Extension { try { dir = fileio.opendirSync(path); while (((dirent = dir.readSync()) != undefined) && hasNextFile) { - let fileName = path + "/" + dirent.name; + let fileName = path + '/' + dirent.name; if (!dirent.isDirectory()) { let stat = fileio.statSync(fileName); if (this.filterFile(dirent, stat, filter)) { diff --git a/test/unittest/external_file_access_test.cpp b/test/unittest/external_file_access_test.cpp index 07a2e104..837953bf 100644 --- a/test/unittest/external_file_access_test.cpp +++ b/test/unittest/external_file_access_test.cpp @@ -44,6 +44,10 @@ int g_num = 0; const int UID_TRANSFORM_TMP = 20000000; const int UID_DEFAULT = 0; shared_ptr g_context = nullptr; +const int FILE_COUNT_2 = 2; +const int FILE_COUNT_4 = 4; +const int FILE_COUNT_5 = 5; +const int FILE_COUNT_6 = 6; void SetNativeToken() { @@ -2314,7 +2318,7 @@ double GetTime() void initListFile6(Uri newDirUriTest) { Uri testUri1(""); - result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0006.txt", testUri1); + int result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0006.txt", testUri1); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); Uri testUri2(""); result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0006.docx", testUri2); @@ -2338,14 +2342,14 @@ void ListFileFilter6(Uri newDirUriTest) int64_t maxCount = 1000; std::vector fileInfoVec; FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); - result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + int result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 5); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_5); FileFilter filter1({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, -1, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter1, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 4); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); FileFilter filter2({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, 1, 0, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter2, fileInfoVec); @@ -2355,7 +2359,7 @@ void ListFileFilter6(Uri newDirUriTest) FileFilter filter3({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, 1, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter3, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 4); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); double time = GetTime(); FileFilter filter4({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, time, false, true); @@ -2400,7 +2404,7 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0006, testing::e void InitListFile7(Uri newDirUriTest) { Uri testUri1(""); - result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0007.txt", testUri1); + int result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0007.txt", testUri1); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); Uri testUri2(""); result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0007.docx", testUri2); @@ -2424,7 +2428,7 @@ void ListFileFilter7(Uri newDirUriTest) int64_t maxCount = 1; std::vector fileInfoVec; FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); - result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + int result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 1); } @@ -2464,10 +2468,10 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0007, testing::e } -void InitScanFile0(Uri newDirUriTest) { - +void InitScanFile0(Uri newDirUriTest) +{ Uri forlderUriTest(""); - result = g_fah->Mkdir(newDirUriTest, "test", forlderUriTest); + int result = g_fah->Mkdir(newDirUriTest, "test", forlderUriTest); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); Uri testUri1(""); @@ -2489,21 +2493,21 @@ void InitScanFile0(Uri newDirUriTest) { } void ScanFileFilter0(Uri newDirUriTest) -{ +{ FileInfo fileInfo; fileInfo.uri = newDirUriTest.ToString(); int64_t offset = 0; int64_t maxCount = 1000; std::vector fileInfoVec; FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); - result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + int result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 5); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_5); FileFilter filter1({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, -1, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter1, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 4); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); FileFilter filter2({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, 1, 0, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter2, fileInfoVec); @@ -2513,7 +2517,7 @@ void ScanFileFilter0(Uri newDirUriTest) FileFilter filter3({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, 1, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter3, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 4); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); double time = GetTime(); FileFilter filter4({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, time, false, true); @@ -2558,7 +2562,7 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0000, testing::e void InitScanFile1(Uri newDirUriTest) { Uri forlderUriTest(""); - result = g_fah->Mkdir(newDirUriTest, "test", forlderUriTest); + int result = g_fah->Mkdir(newDirUriTest, "test", forlderUriTest); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); Uri testUri1(""); @@ -2587,9 +2591,9 @@ void ScanFileFilter1(Uri newDirUriTest) int64_t maxCount = 1000; std::vector fileInfoVec; FileFilter filter; - result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + int result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 6); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_6); } /** @@ -2609,7 +2613,7 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0001, testing::e int result = g_fah->GetRoots(info); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); for (size_t i = 0; i < info.size(); i++) { - Uri parentUri(info.uri); + Uri parentUri(info[i].uri); Uri newDirUriTest(""); result = g_fah->Mkdir(parentUri, "test", newDirUriTest); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); @@ -2629,7 +2633,7 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0001, testing::e void InitScanFile2(Uri newDirUriTest) { Uri forlderUriTest(""); - result = g_fah->Mkdir(newDirUriTest, "test", forlderUriTest); + int result = g_fah->Mkdir(newDirUriTest, "test", forlderUriTest); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); Uri testUri1(""); @@ -2658,9 +2662,9 @@ void ScanFileFilter2(Uri newDirUriTest) int64_t maxCount = 3; std::vector fileInfoVec; FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); - result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + int result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 2); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_2); } /** -- Gitee From 4f0d41e169e6b8f9207ba0558b142a54c432976b Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Mon, 15 May 2023 19:27:04 +0800 Subject: [PATCH 24/48] modify format Signed-off-by: CaoChuan --- .../FileExtensionAbility.ts | 8 +- .../medialibrary_file_access_test.cpp | 102 ++++++++++-------- 2 files changed, 60 insertions(+), 50 deletions(-) diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index d2d5e7b2..94d620d2 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -484,7 +484,7 @@ export default class FileExtAbility extends Extension { if (!this.checkDisplayName(displayName, filter)) { return false; } - let suffixIndex = displayName.lastIndexOf('.'); + let suffixIndex = displayName.lastIndexOf('.'); let suffix = displayName.substring(suffixIndex, displayName.length); if (!this.checkSuffix(suffix, filter)) { return false; @@ -539,12 +539,12 @@ export default class FileExtAbility extends Extension { } let lastModifiedAfter = filter.lastModifiedAfter; - if (lastModifiedAfter !== undefined && lastModifiedAfter >=0) { + if (lastModifiedAfter !== undefined && lastModifiedAfter >= 0) { return true; } let fileSizeOver = filter.fileSizeOver; - if (fileSizeOver !== undefined && fileSizeOver >=0) { + if (fileSizeOver !== undefined && fileSizeOver >= 0) { return true; } @@ -592,7 +592,7 @@ export default class FileExtAbility extends Extension { let dir; try { dir = fileio.opendirSync(path); - while (((dirent = dir.readSync()) != undefined) && hasNextFile) { + while (((dirent = dir.readSync()) !== undefined) && hasNextFile) { let fileName = path + '/' + dirent.name; if (!dirent.isDirectory()) { let stat = fileio.statSync(fileName); diff --git a/test/unittest/medialibrary_file_access_test.cpp b/test/unittest/medialibrary_file_access_test.cpp index c3b75af4..f1de6ba3 100644 --- a/test/unittest/medialibrary_file_access_test.cpp +++ b/test/unittest/medialibrary_file_access_test.cpp @@ -2270,6 +2270,59 @@ double GetTime() return (double)(t.tv_sec); } +void InitListFile6(Uri newDirUriTest) +{ + Uri testUri1(""); + result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_0006.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_0006.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri3(""); + result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_01_0006.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_01_0006.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_01_0006_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); +} + +void ListFileFilter6(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 5); + + FileFilter filter1({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, -1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter1, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 4); + + FileFilter filter2({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, 0, 0, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter2, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 0); + + FileFilter filter3({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, 1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter3, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 4); + + double time = GetTime(); + FileFilter filter4({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, time, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter4, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 0); + +} /** * @tc.number: user_file_service_medialibrary_file_access_ListFile_0006 * @tc.name: medialibrary_file_access_ListFile_0006 @@ -2286,53 +2339,10 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ListFile_0006, testing:: Uri newDirUriTest(""); int result = g_fah->Mkdir(g_newDirUri, "ListFile0006", newDirUriTest); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri1(""); - result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_0006.txt", testUri1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri2(""); - result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_0006.docx", testUri2); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri3(""); - result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_01_0006.txt", testUri3); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri4(""); - result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_01_0006.docx", testUri4); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri testUri5(""); - result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_01_0006_01.docx", testUri5); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - - FileInfo fileInfo; - fileInfo.uri = newDirUriTest.ToString(); - int64_t offset = 0; - int64_t maxCount = 1000; - std::vector fileInfoVec; - FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); - result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 5); - - FileFilter filter1({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, -1, false, true); - result = g_fah->ListFile(fileInfo, offset, maxCount, filter1, fileInfoVec); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 4); - - FileFilter filter2({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, 0, 0, false, true); - result = g_fah->ListFile(fileInfo, offset, maxCount, filter2, fileInfoVec); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 0); - - FileFilter filter3({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, 1, false, true); - result = g_fah->ListFile(fileInfo, offset, maxCount, filter3, fileInfoVec); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 4); - - double time = GetTime(); - FileFilter filter4({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, time, false, true); - result = g_fah->ListFile(fileInfo, offset, maxCount, filter4, fileInfoVec); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 0); + InitListFile6(newDirUriTest); + ListFileFilter6(newDirUriTest); + result = g_fah->Delete(newDirUriTest); EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); } catch (...) { -- Gitee From ce4894e1bd557e7a1dfc6ddf0301d2c7a915ef4e Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Mon, 15 May 2023 20:09:09 +0800 Subject: [PATCH 25/48] modify format Signed-off-by: CaoChuan --- test/unittest/medialibrary_file_access_test.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/test/unittest/medialibrary_file_access_test.cpp b/test/unittest/medialibrary_file_access_test.cpp index f1de6ba3..8caa9b99 100644 --- a/test/unittest/medialibrary_file_access_test.cpp +++ b/test/unittest/medialibrary_file_access_test.cpp @@ -43,7 +43,10 @@ shared_ptr g_fah = nullptr; Uri g_newDirUri(""); const int UID_TRANSFORM_TMP = 20000000; const int UID_DEFAULT = 0; - +const int FILE_COUNT_2 = 2; +const int FILE_COUNT_4 = 4; +const int FILE_COUNT_5 = 5; +const int FILE_COUNT_6 = 6; void SetNativeToken() { uint64_t tokenId; @@ -2299,12 +2302,12 @@ void ListFileFilter6(Uri newDirUriTest) FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 5); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_5); FileFilter filter1({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, -1, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter1, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 4); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); FileFilter filter2({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, 0, 0, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter2, fileInfoVec); @@ -2314,14 +2317,13 @@ void ListFileFilter6(Uri newDirUriTest) FileFilter filter3({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, 1, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter3, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 4); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); double time = GetTime(); FileFilter filter4({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, time, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter4, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 0); - } /** * @tc.number: user_file_service_medialibrary_file_access_ListFile_0006 -- Gitee From 5a77017e63dc05d1451518f0550e823474821501 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Mon, 15 May 2023 20:38:04 +0800 Subject: [PATCH 26/48] modify format Signed-off-by: CaoChuan --- .../src/main/ets/FileExtensionAbility/FileExtensionAbility.ts | 4 ++-- test/unittest/external_file_access_test.cpp | 2 +- test/unittest/medialibrary_file_access_test.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index 94d620d2..548187b0 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -414,7 +414,7 @@ export default class FileExtAbility extends Extension { } let lastModifiedAfter = filter.lastModifiedAfter; - if (lastModifiedAfter !== undefined && lastModifiedAfter>= 0) { + if (lastModifiedAfter !== undefined && lastModifiedAfter >= 0) { return false; } @@ -608,7 +608,7 @@ export default class FileExtAbility extends Extension { break; } } - } else if (dirent.isDirectory() && data.recursion){ + } else if (dirent.isDirectory() && data.recursion) { this.getFilesWithFilter(fileName, filter, data); } } diff --git a/test/unittest/external_file_access_test.cpp b/test/unittest/external_file_access_test.cpp index 837953bf..0c756af7 100644 --- a/test/unittest/external_file_access_test.cpp +++ b/test/unittest/external_file_access_test.cpp @@ -2312,7 +2312,7 @@ double GetTime() t.tv_sec = 0; t.tv_nsec = 0; clock_gettime(CLOCK_REALTIME, &t); - return (double)(t.tv_sec); + return static_cast(t.tv_sec); } void initListFile6(Uri newDirUriTest) diff --git a/test/unittest/medialibrary_file_access_test.cpp b/test/unittest/medialibrary_file_access_test.cpp index 8caa9b99..5066b8ef 100644 --- a/test/unittest/medialibrary_file_access_test.cpp +++ b/test/unittest/medialibrary_file_access_test.cpp @@ -2270,7 +2270,7 @@ double GetTime() t.tv_sec = 0; t.tv_nsec = 0; clock_gettime(CLOCK_REALTIME, &t); - return (double)(t.tv_sec); + return static_cast(t.tv_sec); } void InitListFile6(Uri newDirUriTest) -- Gitee From 110a506f37c35033890b157bbc0595adc2cad73e Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Mon, 15 May 2023 20:48:49 +0800 Subject: [PATCH 27/48] modify format Signed-off-by: CaoChuan --- .../src/main/ets/FileExtensionAbility/FileExtensionAbility.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index 548187b0..6e8aac4e 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -518,7 +518,7 @@ export default class FileExtAbility extends Extension { size: stat.size, mtime: stat.mtime, mimeType: '', - } + }; return info; } -- Gitee From f06b5119e90cb30904f2fa05e46fc5ee358071f8 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Mon, 15 May 2023 21:56:55 +0800 Subject: [PATCH 28/48] modify filter param Signed-off-by: CaoChuan --- .../include/js_file_access_ext_ability.h | 6 + .../src/js_file_access_ext_ability.cpp | 143 ++++++++---------- 2 files changed, 65 insertions(+), 84 deletions(-) diff --git a/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h b/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h index affce377..dfc6dbeb 100644 --- a/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h +++ b/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h @@ -47,6 +47,12 @@ struct CallJsParam { {} }; +struct FilterParam { + FileInfo fileInfo; + int64_t offset; + int64_t maxCount; +} + class JsFileAccessExtAbility : public FileAccessExtAbility { public: JsFileAccessExtAbility(JsRuntime &jsRuntime); 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 38f3299c..f5b5ee61 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 @@ -793,6 +793,55 @@ static int MakeJsNativeFileFilter(NativeEngine &engine, const FileFilter &filter return ERR_OK; } +bool BuildFilterParam(NativeEngine &engine, const FilterParam ¶m, NativeValue *argv[], size_t &argc) +{ + NativeValue *uri = engine.CreateString(fileInfo.uri.c_str(), fileInfo.uri.length()); + if (uri == nullptr) { + HILOG_ERROR("create sourceFile uri native js value fail."); + return false; + } + + NativeValue *nativeOffset = engine.CreateNumber(offset); + if (nativeOffset == nullptr) { + HILOG_ERROR("create nativeMaxNum native js value fail."); + return false; + } + + NativeValue *nativeMaxCount = engine.CreateNumber(maxCount); + if (nativeMaxCount == nullptr) { + HILOG_ERROR("create nativeMaxNum native js value fail."); + return false; + } + + NativeValue *nativeFilter = nullptr; + if (filter.GetHasFilter()) { + nativeFilter = engine.CreateObject(); + if (nativeFilter == nullptr) { + HILOG_ERROR("Create js NativeValue fail."); + return false; + } + int ret = MakeJsNativeFileFilter(engine, filter, nativeFilter); + if (ret != ERR_OK) { + HILOG_ERROR("Create js NativeValue fail."); + return false; + } + } else { + nativeFilter = engine.CreateNull(); + if (nativeFilter == nullptr) { + HILOG_ERROR("Create js NativeValue fail."); + return false; + } + } + + argv[ARGC_ZERO] = uri; + argv[ARGC_ONE] = nativeOffset; + argv[ARGC_TWO] = nativeMaxCount; + argv[ARGC_THREE] = nativeFilter; + argc = ARGC_FOUR; + + return true; +} + int JsFileAccessExtAbility::ListFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, const FileFilter &filter, std::vector &fileInfoVec) { @@ -806,49 +855,12 @@ int JsFileAccessExtAbility::ListFile(const FileInfo &fileInfo, const int64_t off auto argParser = [fileInfo, offset, maxCount, filter](NativeEngine &engine, NativeValue *argv[], size_t &argc) -> bool { - NativeValue *uri = engine.CreateString(fileInfo.uri.c_str(), fileInfo.uri.length()); - if (uri == nullptr) { - HILOG_ERROR("create sourceFile uri native js value fail."); - return false; - } + struct FilterParam param; + param.fileInfo = fileInfo; + param.offset = offset; + param.maxCount = maxCount; - NativeValue *nativeOffset = engine.CreateNumber(offset); - if (nativeOffset == nullptr) { - HILOG_ERROR("create nativeMaxNum native js value fail."); - return false; - } - - NativeValue *nativeMaxCount = engine.CreateNumber(maxCount); - if (nativeMaxCount == nullptr) { - HILOG_ERROR("create nativeMaxNum native js value fail."); - return false; - } - - NativeValue *nativeFilter = nullptr; - if (filter.GetHasFilter()) { - nativeFilter = engine.CreateObject(); - if (nativeFilter == nullptr) { - HILOG_ERROR("Create js NativeValue fail."); - return false; - } - int ret = MakeJsNativeFileFilter(engine, filter, nativeFilter); - if (ret != ERR_OK) { - HILOG_ERROR("Create js NativeValue fail."); - return ret; - } - } else { - nativeFilter = engine.CreateNull(); - if (nativeFilter == nullptr) { - HILOG_ERROR("Create js NativeValue fail."); - return E_GETRESULT; - } - } - - argv[ARGC_ZERO] = uri; - argv[ARGC_ONE] = nativeOffset; - argv[ARGC_TWO] = nativeMaxCount; - argv[ARGC_THREE] = nativeFilter; - argc = ARGC_FOUR; + BuildFilterParam(engine, param, argv, argc); return true; }; @@ -895,49 +907,12 @@ int JsFileAccessExtAbility::ScanFile(const FileInfo &fileInfo, const int64_t off auto argParser = [fileInfo, offset, maxCount, filter](NativeEngine &engine, NativeValue *argv[], size_t &argc) -> bool { - NativeValue *uri = engine.CreateString(fileInfo.uri.c_str(), fileInfo.uri.length()); - if (uri == nullptr) { - HILOG_ERROR("create sourceFile uri native js value fail."); - return false; - } - - NativeValue *nativeOffset = engine.CreateNumber(offset); - if (nativeOffset == nullptr) { - HILOG_ERROR("create nativeMaxNum native js value fail."); - return false; - } - - NativeValue *nativeMaxCount = engine.CreateNumber(maxCount); - if (nativeMaxCount == nullptr) { - HILOG_ERROR("create nativeMaxNum native js value fail."); - return false; - } - - NativeValue* nativeFilter = nullptr; - if (filter.GetHasFilter()) { - nativeFilter = engine.CreateObject(); - if (nativeFilter == nullptr) { - HILOG_ERROR("Create js NativeValue fail."); - return E_GETRESULT; - } - int ret = MakeJsNativeFileFilter(engine, filter, nativeFilter); - if (ret != ERR_OK) { - HILOG_ERROR("Create js NativeValue fail."); - return ret; - } - } else { - nativeFilter = engine.CreateNull(); - if (nativeFilter == nullptr) { - HILOG_ERROR("Create js NativeValue fail."); - return E_GETRESULT; - } - } + struct FilterParam param; + param.fileInfo = fileInfo; + param.offset = offset; + param.maxCount = maxCount; - argv[ARGC_ZERO] = uri; - argv[ARGC_ONE] = nativeOffset; - argv[ARGC_TWO] = nativeMaxCount; - argv[ARGC_THREE] = nativeFilter; - argc = ARGC_FOUR; + BuildFilterParam(engine, param, argv, argc); return true; }; -- Gitee From 1f93af274a90fe44f867192fd32d94aed45d9b94 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Tue, 16 May 2023 10:08:13 +0800 Subject: [PATCH 29/48] modify format Signed-off-by: CaoChuan --- .../include/js_file_access_ext_ability.h | 2 +- .../src/js_file_access_ext_ability.cpp | 14 ++++++++------ .../FileExtensionAbility/FileExtensionAbility.ts | 16 ++++++++-------- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h b/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h index dfc6dbeb..b512f7c9 100644 --- a/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h +++ b/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h @@ -51,7 +51,7 @@ struct FilterParam { FileInfo fileInfo; int64_t offset; int64_t maxCount; -} +}; class JsFileAccessExtAbility : public FileAccessExtAbility { public: 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 f5b5ee61..51f73973 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 @@ -793,21 +793,23 @@ static int MakeJsNativeFileFilter(NativeEngine &engine, const FileFilter &filter return ERR_OK; } -bool BuildFilterParam(NativeEngine &engine, const FilterParam ¶m, NativeValue *argv[], size_t &argc) +static bool BuildFilterParam(NativeEngine &engine, const FileFilter &filter, const FilterParam ¶m, + NativeValue *argv[], size_t &argc) { - NativeValue *uri = engine.CreateString(fileInfo.uri.c_str(), fileInfo.uri.length()); + string uriStr = param.fileInfo.uri; + NativeValue *uri = engine.CreateString(uriStr.c_str(),uriStr.length()); if (uri == nullptr) { HILOG_ERROR("create sourceFile uri native js value fail."); return false; } - NativeValue *nativeOffset = engine.CreateNumber(offset); + NativeValue *nativeOffset = engine.CreateNumber(param.offset); if (nativeOffset == nullptr) { HILOG_ERROR("create nativeMaxNum native js value fail."); return false; } - NativeValue *nativeMaxCount = engine.CreateNumber(maxCount); + NativeValue *nativeMaxCount = engine.CreateNumber(param.maxCount); if (nativeMaxCount == nullptr) { HILOG_ERROR("create nativeMaxNum native js value fail."); return false; @@ -860,7 +862,7 @@ int JsFileAccessExtAbility::ListFile(const FileInfo &fileInfo, const int64_t off param.offset = offset; param.maxCount = maxCount; - BuildFilterParam(engine, param, argv, argc); + BuildFilterParam(engine, filter, param, argv, argc); return true; }; @@ -912,7 +914,7 @@ int JsFileAccessExtAbility::ScanFile(const FileInfo &fileInfo, const int64_t off param.offset = offset; param.maxCount = maxCount; - BuildFilterParam(engine, param, argv, argc); + BuildFilterParam(engine, filter, param, argv, argc); return true; }; diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index 6e8aac4e..2fd21d18 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -502,7 +502,7 @@ export default class FileExtAbility extends Extension { return true; } - buildInfo(fileName, dirent, stat) { + buildInfo(fileName, dirent, stat) : {string, string, number, number, string} { let mode = documentFlag.SUPPORTS_READ | documentFlag.SUPPORTS_WRITE; if (stat.isDirectory()) { mode |= documentFlag.REPRESENTS_DIR; @@ -551,19 +551,19 @@ export default class FileExtAbility extends Extension { return false; } - getFilesWithoutFilter(path, data) { + getFilesWithoutFilter(path, data) : number { let hasNextFile = true; let dirent; let dir; try { dir = fileio.opendirSync(path); while (((dirent = dir.readSync()) !== undefined) && hasNextFile) { - let fileName = path + '/' + dirent.name; - let stat = fileio.statSync(fileName); if (data.offset > data.i) { data.i++; continue; } + let fileName = path + '/' + dirent.name; + let stat = fileio.statSync(fileName); let info = this.buildInfo(fileName, dirent, stat); data.infos.push(info); if (data.infos.length === data.count) { @@ -586,7 +586,7 @@ export default class FileExtAbility extends Extension { return ERR_OK; } - getFilesWithFilter(path, filter, data) { + getFilesWithFilter(path, filter, data) : number { let hasNextFile = true; let dirent; let dir; @@ -624,7 +624,7 @@ export default class FileExtAbility extends Extension { return ERR_OK; } - getFileInfos(sourceFileUri, filter, data) { + getFileInfos(sourceFileUri, filter, data) : {Array({string, string, number, number, string}), number} { let ret; try { let path = this.getPath(sourceFileUri); @@ -654,7 +654,7 @@ export default class FileExtAbility extends Extension { } } - listFile(sourceFileUri, offset, count, filter) { + listFile(sourceFileUri, offset, count, filter) : {Array({string, string, number, number, string}), number} { if (!this.checkUri(sourceFileUri)) { return { infos: [], @@ -680,7 +680,7 @@ export default class FileExtAbility extends Extension { return this.getFileInfos(sourceFileUri, filter, data); } - scanFile(sourceFileUri, offset, count, filter) { + scanFile(sourceFileUri, offset, count, filter) : {Array({string, string, number, number, string}), number} { if (!this.checkUri(sourceFileUri)) { return { infos: [], -- Gitee From 00efd32fa7f66fed7435cbd0b0b25e5d23059c54 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Tue, 16 May 2023 10:31:36 +0800 Subject: [PATCH 30/48] modify format Signed-off-by: CaoChuan --- .../file_access/src/js_file_access_ext_ability.cpp | 4 ++-- .../main/ets/FileExtensionAbility/FileExtensionAbility.ts | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) 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 51f73973..688d02e7 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 @@ -797,7 +797,7 @@ static bool BuildFilterParam(NativeEngine &engine, const FileFilter &filter, con NativeValue *argv[], size_t &argc) { string uriStr = param.fileInfo.uri; - NativeValue *uri = engine.CreateString(uriStr.c_str(),uriStr.length()); + NativeValue *uri = engine.CreateString(uriStr.c_str(), uriStr.length()); if (uri == nullptr) { HILOG_ERROR("create sourceFile uri native js value fail."); return false; @@ -909,7 +909,7 @@ int JsFileAccessExtAbility::ScanFile(const FileInfo &fileInfo, const int64_t off auto argParser = [fileInfo, offset, maxCount, filter](NativeEngine &engine, NativeValue *argv[], size_t &argc) -> bool { - struct FilterParam param; + struct FilterParam param; param.fileInfo = fileInfo; param.offset = offset; param.maxCount = maxCount; diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index 2fd21d18..852f2830 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -624,7 +624,7 @@ export default class FileExtAbility extends Extension { return ERR_OK; } - getFileInfos(sourceFileUri, filter, data) : {Array({string, string, number, number, string}), number} { + getFileInfos(sourceFileUri, filter, data) : {array({string, string, number, number, string}), number} { let ret; try { let path = this.getPath(sourceFileUri); @@ -654,7 +654,7 @@ export default class FileExtAbility extends Extension { } } - listFile(sourceFileUri, offset, count, filter) : {Array({string, string, number, number, string}), number} { + listFile(sourceFileUri, offset, count, filter) : {array({string, string, number, number, string}), number} { if (!this.checkUri(sourceFileUri)) { return { infos: [], @@ -680,7 +680,7 @@ export default class FileExtAbility extends Extension { return this.getFileInfos(sourceFileUri, filter, data); } - scanFile(sourceFileUri, offset, count, filter) : {Array({string, string, number, number, string}), number} { + scanFile(sourceFileUri, offset, count, filter) : {array({string, string, number, number, string}), number} { if (!this.checkUri(sourceFileUri)) { return { infos: [], -- Gitee From e2f2360196be7a825371479ed670f57f4aec5a61 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Tue, 16 May 2023 10:40:06 +0800 Subject: [PATCH 31/48] modify format Signed-off-by: CaoChuan --- test/unittest/medialibrary_file_access_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unittest/medialibrary_file_access_test.cpp b/test/unittest/medialibrary_file_access_test.cpp index 5066b8ef..8401eb04 100644 --- a/test/unittest/medialibrary_file_access_test.cpp +++ b/test/unittest/medialibrary_file_access_test.cpp @@ -2276,7 +2276,7 @@ double GetTime() void InitListFile6(Uri newDirUriTest) { Uri testUri1(""); - result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_0006.txt", testUri1); + int result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_0006.txt", testUri1); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); Uri testUri2(""); result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_0006.docx", testUri2); -- Gitee From 5846e598d94eddd0f02f03d54762009780896634 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Tue, 16 May 2023 11:54:33 +0800 Subject: [PATCH 32/48] modify format Signed-off-by: CaoChuan --- .../FileExtensionAbility.ts | 62 +++++++++---------- .../medialibrary_file_access_test.cpp | 2 +- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index 852f2830..75631cca 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -394,40 +394,41 @@ export default class FileExtAbility extends Extension { } checkOnlyMimeTypeFilter(filter) : boolean { - if (filter === undefined) { + if (filter === null) { return false; } - - let suffixArray = filter.suffix; - if (suffixArray !== undefined && suffixArray.length > 0) { + + let suffixArray = filter['suffix']; + if (suffixArray !== null && suffixArray.length > 0) { return false; } - let displayNameArray = filter.displayName; - if (displayNameArray !== undefined && displayNameArray.length > 0) { + let displayNameArray = filter['displayName']; + if (displayNameArray !== null && displayNameArray.length > 0) { return false; } - let fileSizeOver = filter.fileSizeOver; - if (fileSizeOver !== undefined && fileSizeOver >= 0) { + let fileSizeOver = filter['fileSizeOver']; + if (fileSizeOver !== null && fileSizeOver >= 0) { return false; } - let lastModifiedAfter = filter.lastModifiedAfter; - if (lastModifiedAfter !== undefined && lastModifiedAfter >= 0) { + let lastModifiedAfter = filter['lastModifiedAfter']; + if (lastModifiedAfter !== null && lastModifiedAfter >= 0) { return false; } - let mimeTypeArray = filter.mimeType; - if (mimeTypeArray !== undefined && mimeTypeArray.length > 0) { + let mimeTypeArray = filter['mimeType']; + if (mimeTypeArray !== null && mimeTypeArray.length > 0) { return true; } return false; } checkSuffix(suffix, filter) : boolean { - let suffixArray = filter.suffix; - if (suffixArray === undefined || suffixArray.length === 0) { + let suffixArray = filter['suffix']; + + if (suffixArray === null || suffixArray.length === 0) { return true; } else { let len = suffixArray.length; @@ -441,8 +442,8 @@ export default class FileExtAbility extends Extension { } checkDisplayName(displayName, filter) : boolean { - let displayNameArray = filter.displayName; - if (displayNameArray === undefined || displayNameArray.length === 0) { + let displayNameArray = filter['displayName']; + if (displayNameArray === null || displayNameArray.length === 0) { return true; } else { let len = displayNameArray.length; @@ -456,8 +457,8 @@ export default class FileExtAbility extends Extension { } checkFileSizeOver(fileSize, filter) : boolean { - let fileSizeOver = filter.fileSizeOver; - if (fileSizeOver === undefined || fileSizeOver < 0) { + let fileSizeOver = filter['fileSizeOver']; + if (fileSizeOver === null || fileSizeOver < 0) { return true; } else if (fileSize > fileSizeOver) { return true; @@ -466,8 +467,8 @@ export default class FileExtAbility extends Extension { } checkLastModifiedAfter(lastModified, filter) : boolean { - let lastModifiedAfter = filter.lastModifiedAfter; - if (lastModifiedAfter === undefined || lastModifiedAfter < 0) { + let lastModifiedAfter = filter['lastModifiedAfter']; + if (lastModifiedAfter === null || lastModifiedAfter < 0) { return true; } else if (lastModified > lastModifiedAfter) { return true; @@ -476,7 +477,7 @@ export default class FileExtAbility extends Extension { } filterFile(dirent, stat, filter) : boolean { - if (filter === undefined) { + if (filter === null) { return true; } @@ -524,27 +525,27 @@ export default class FileExtAbility extends Extension { } hasFilter(filter) : boolean { - if (filter === undefined) { + if (filter === null) { return false; } - let displayNameArray = filter.displayName; - if (displayNameArray !== undefined && displayNameArray.length > 0) { + let displayNameArray = filter['displayName']; + if (displayNameArray !== null && displayNameArray.length > 0) { return true; } - let suffixArray = filter.suffix; - if (suffixArray !== undefined && suffixArray.length > 0) { + let suffixArray = filter['suffix']; + if (suffixArray !== null && suffixArray.length > 0) { return true; } - let lastModifiedAfter = filter.lastModifiedAfter; - if (lastModifiedAfter !== undefined && lastModifiedAfter >= 0) { + let lastModifiedAfter = filter['lastModifiedAfter']; + if (lastModifiedAfter !== null && lastModifiedAfter >= 0) { return true; } - let fileSizeOver = filter.fileSizeOver; - if (fileSizeOver !== undefined && fileSizeOver >= 0) { + let fileSizeOver = filter['fileSizeOver']; + if (fileSizeOver !== null && fileSizeOver >= 0) { return true; } @@ -668,7 +669,6 @@ export default class FileExtAbility extends Extension { code: E_FILTER, }; } - let data = { infos: [], recursion: false, diff --git a/test/unittest/medialibrary_file_access_test.cpp b/test/unittest/medialibrary_file_access_test.cpp index 8401eb04..85b3a858 100644 --- a/test/unittest/medialibrary_file_access_test.cpp +++ b/test/unittest/medialibrary_file_access_test.cpp @@ -2300,7 +2300,7 @@ void ListFileFilter6(Uri newDirUriTest) int64_t maxCount = 1000; std::vector fileInfoVec; FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); - result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + int result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_5); -- Gitee From 0f0a129bd71cb5e2bfb7e4daa225a8d9ca5e631e Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Tue, 16 May 2023 12:44:24 +0800 Subject: [PATCH 33/48] add scanFile modify listFile Signed-off-by: CaoChuan --- .../FileExtensionAbility.ts | 27 +++++++++---------- test/unittest/external_file_access_test.cpp | 21 ++++++++++++--- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index 75631cca..b9247af3 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -398,27 +398,27 @@ export default class FileExtAbility extends Extension { return false; } - let suffixArray = filter['suffix']; + let suffixArray = filter.suffix; if (suffixArray !== null && suffixArray.length > 0) { return false; } - let displayNameArray = filter['displayName']; + let displayNameArray = filter.displayName; if (displayNameArray !== null && displayNameArray.length > 0) { return false; } - let fileSizeOver = filter['fileSizeOver']; + let fileSizeOver = filter.fileSizeOver; if (fileSizeOver !== null && fileSizeOver >= 0) { return false; } - let lastModifiedAfter = filter['lastModifiedAfter']; + let lastModifiedAfter = filter.lastModifiedAfter; if (lastModifiedAfter !== null && lastModifiedAfter >= 0) { return false; } - let mimeTypeArray = filter['mimeType']; + let mimeTypeArray = filter.mimeType; if (mimeTypeArray !== null && mimeTypeArray.length > 0) { return true; } @@ -426,8 +426,7 @@ export default class FileExtAbility extends Extension { } checkSuffix(suffix, filter) : boolean { - let suffixArray = filter['suffix']; - + let suffixArray = filter.suffix; if (suffixArray === null || suffixArray.length === 0) { return true; } else { @@ -442,7 +441,7 @@ export default class FileExtAbility extends Extension { } checkDisplayName(displayName, filter) : boolean { - let displayNameArray = filter['displayName']; + let displayNameArray = filter.displayName; if (displayNameArray === null || displayNameArray.length === 0) { return true; } else { @@ -457,7 +456,7 @@ export default class FileExtAbility extends Extension { } checkFileSizeOver(fileSize, filter) : boolean { - let fileSizeOver = filter['fileSizeOver']; + let fileSizeOver = filter.fileSizeOver; if (fileSizeOver === null || fileSizeOver < 0) { return true; } else if (fileSize > fileSizeOver) { @@ -467,7 +466,7 @@ export default class FileExtAbility extends Extension { } checkLastModifiedAfter(lastModified, filter) : boolean { - let lastModifiedAfter = filter['lastModifiedAfter']; + let lastModifiedAfter = filter.lastModifiedAfter; if (lastModifiedAfter === null || lastModifiedAfter < 0) { return true; } else if (lastModified > lastModifiedAfter) { @@ -529,22 +528,22 @@ export default class FileExtAbility extends Extension { return false; } - let displayNameArray = filter['displayName']; + let displayNameArray = filter.displayName; if (displayNameArray !== null && displayNameArray.length > 0) { return true; } - let suffixArray = filter['suffix']; + let suffixArray = filter.suffix; if (suffixArray !== null && suffixArray.length > 0) { return true; } - let lastModifiedAfter = filter['lastModifiedAfter']; + let lastModifiedAfter = filter.lastModifiedAfter; if (lastModifiedAfter !== null && lastModifiedAfter >= 0) { return true; } - let fileSizeOver = filter['fileSizeOver']; + let fileSizeOver = filter.fileSizeOver; if (fileSizeOver !== null && fileSizeOver >= 0) { return true; } diff --git a/test/unittest/external_file_access_test.cpp b/test/unittest/external_file_access_test.cpp index 0c756af7..6caa8494 100644 --- a/test/unittest/external_file_access_test.cpp +++ b/test/unittest/external_file_access_test.cpp @@ -2306,6 +2306,17 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0005, testing::e GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0005"; } +void WriteData(Uri &uri) +{ + int fd = -1; + std::string buff = "extenal_file_access_test"; + int result = g_fah->OpenFile(uri, WRITE_READ, fd); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + ssize_t fileSize = write(fd, buff.c_str(), buff.size()); + EXPECT_EQ(fileSize, buff.size()); + close(fd); +} + double GetTime() { struct timespec t{}; @@ -2329,6 +2340,7 @@ void initListFile6(Uri newDirUriTest) Uri testUri4(""); result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0006.docx", testUri4); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + WriteData(testUri4); Uri testUri5(""); result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0006_01.docx", testUri5); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); @@ -2351,10 +2363,10 @@ void ListFileFilter6(Uri newDirUriTest) EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); - FileFilter filter2({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, 1, 0, false, true); + FileFilter filter2({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, 0, 0, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter2, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 0); + EXPECT_EQ(fileInfoVec.size(), 1); FileFilter filter3({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, 1, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter3, fileInfoVec); @@ -2487,6 +2499,7 @@ void InitScanFile0(Uri newDirUriTest) Uri testUri4(""); result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0000.docx", testUri4); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + WriteData(testUri4); Uri testUri5(""); result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0000_01.docx", testUri5); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); @@ -2509,10 +2522,10 @@ void ScanFileFilter0(Uri newDirUriTest) EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); - FileFilter filter2({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, 1, 0, false, true); + FileFilter filter2({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, 0, 0, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter2, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 0); + EXPECT_EQ(fileInfoVec.size(), 1); FileFilter filter3({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, 1, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter3, fileInfoVec); -- Gitee From e01b18e7af282dbfd1d6148848e5a4865549ebb4 Mon Sep 17 00:00:00 2001 From: CaoChuan Date: Wed, 17 May 2023 09:30:36 +0800 Subject: [PATCH 34/48] add scanFile tdd Signed-off-by: CaoChuan --- .../medialibrary_file_access_test.cpp | 88 +++++++++++++++++-- .../listscan_testfile/ListScanFilter_001.txt | 1 + .../listscan_testfile/ListScanFilter_002.txt | 0 test/unittest/resources/ohos_test.xml | 7 ++ 4 files changed, 90 insertions(+), 6 deletions(-) create mode 100644 test/unittest/resources/listscan_testfile/ListScanFilter_001.txt create mode 100644 test/unittest/resources/listscan_testfile/ListScanFilter_002.txt diff --git a/test/unittest/medialibrary_file_access_test.cpp b/test/unittest/medialibrary_file_access_test.cpp index 85b3a858..81957d89 100644 --- a/test/unittest/medialibrary_file_access_test.cpp +++ b/test/unittest/medialibrary_file_access_test.cpp @@ -43,10 +43,10 @@ shared_ptr g_fah = nullptr; Uri g_newDirUri(""); const int UID_TRANSFORM_TMP = 20000000; const int UID_DEFAULT = 0; +const int FILE_COUNT_1 = 1; const int FILE_COUNT_2 = 2; const int FILE_COUNT_4 = 4; const int FILE_COUNT_5 = 5; -const int FILE_COUNT_6 = 6; void SetNativeToken() { uint64_t tokenId; @@ -2309,11 +2309,6 @@ void ListFileFilter6(Uri newDirUriTest) EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); - FileFilter filter2({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, 0, 0, false, true); - result = g_fah->ListFile(fileInfo, offset, maxCount, filter2, fileInfoVec); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 0); - FileFilter filter3({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, 1, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter3, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); @@ -2353,6 +2348,46 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ListFile_0006, testing:: GTEST_LOG_(INFO) << "FileAccessHelperTest-end medialibrary_file_access_ListFile_0006"; } +/** + * @tc.number: user_file_service_medialibrary_file_access_ListFile_0007 + * @tc.name: medialibrary_file_access_ListFile_0007 + * @tc.desc: Test function of ListFile interface for ERROR which add filter. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000HB855 + */ +HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ListFile_0007, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileAccessHelperTest-begin medialibrary_file_access_ListFile_0007"; + try { + FileAccessFwk::FileInfo fileInfo; + std::string relativePath = "Documents/ListTest"; + int ret = g_fah->GetFileInfoFromRelativePath(relativePath, fileInfo); + EXPECT_EQ(ret, OHOS::FileAccessFwk::ERR_OK); + Uri testUri(fileInfo.uri); + + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter({".txt"}, {}, {}, -1, -1, false, true); + int result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_2); + + FileFilter filter1({".txt"}, {}, {}, 0, -1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter1, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_1); + + result = g_fah->Delete(testUri); + EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); + } catch (...) { + GTEST_LOG_(ERROR) << "medialibrary_file_access_ListFile_0007 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileAccessHelperTest-end medialibrary_file_access_ListFile_0007"; +} + /** * @tc.number: user_file_service_medialibrary_file_access_ScanFile_0000 * @tc.name: medialibrary_file_access_ScanFile_0000 @@ -2647,6 +2682,47 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ScanFile_0005, testing:: GTEST_LOG_(INFO) << "FileAccessHelperTest-end medialibrary_file_access_ScanFile_0005"; } +/** + * @tc.number: user_file_service_medialibrary_file_access_ScanFile_0006 + * @tc.name: medialibrary_file_access_ScanFile_0006 + * @tc.desc: Test function of ListFile interface for ERROR which add filter. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000HB855 + */ +HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ScanFile_0006, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileAccessHelperTest-begin medialibrary_file_access_ScanFile_0006"; + try { + FileAccessFwk::FileInfo fileInfo; + std::string relativePath = "Documents/ScanTest"; + int ret = g_fah->GetFileInfoFromRelativePath(relativePath, fileInfo); + EXPECT_EQ(ret, OHOS::FileAccessFwk::ERR_OK); + Uri testUri(fileInfo.uri); + + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter({".txt"}, {}, {}, -1, -1, false, true); + int result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_2); + + FileFilter filter1({".txt"}, {}, {}, 0, -1, false, true); + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter1, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_1); + + result = g_fah->Delete(testUri); + EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); + } catch (...) { + GTEST_LOG_(ERROR) << "medialibrary_file_access_ScanFile_0006 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileAccessHelperTest-end medialibrary_file_access_ScanFile_0006"; +} + + /** * @tc.number: user_file_service_medialibrary_file_access_GetRoots_0000 * @tc.name: medialibrary_file_access_GetRoots_0000 diff --git a/test/unittest/resources/listscan_testfile/ListScanFilter_001.txt b/test/unittest/resources/listscan_testfile/ListScanFilter_001.txt new file mode 100644 index 00000000..30af0fa0 --- /dev/null +++ b/test/unittest/resources/listscan_testfile/ListScanFilter_001.txt @@ -0,0 +1 @@ +ListFile and ScanFile \ No newline at end of file diff --git a/test/unittest/resources/listscan_testfile/ListScanFilter_002.txt b/test/unittest/resources/listscan_testfile/ListScanFilter_002.txt new file mode 100644 index 00000000..e69de29b diff --git a/test/unittest/resources/ohos_test.xml b/test/unittest/resources/ohos_test.xml index d94c4f2e..b85ed710 100644 --- a/test/unittest/resources/ohos_test.xml +++ b/test/unittest/resources/ohos_test.xml @@ -25,11 +25,18 @@