From 2e8b4e434dbf4837320c71d7a9d88e15900c8da5 Mon Sep 17 00:00:00 2001 From: ub_wangsongtao Date: Tue, 11 Oct 2022 17:13:06 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E9=A1=B5=E5=88=86=E7=B1=BB=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=8E=B7=E5=8F=96=E5=92=8C=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entry/src/main/ets/Model/Constants.ets | 28 ++++ entry/src/main/ets/Model/FileInfo.ets | 41 +++++ entry/src/main/ets/workers/DataWorker.js | 204 +++++++++++++++++++++++ 3 files changed, 273 insertions(+) create mode 100644 entry/src/main/ets/Model/Constants.ets create mode 100644 entry/src/main/ets/Model/FileInfo.ets create mode 100644 entry/src/main/ets/workers/DataWorker.js diff --git a/entry/src/main/ets/Model/Constants.ets b/entry/src/main/ets/Model/Constants.ets new file mode 100644 index 0000000..f0ff1ec --- /dev/null +++ b/entry/src/main/ets/Model/Constants.ets @@ -0,0 +1,28 @@ + +export enum menuLevel { + MENU_FIRST_LEVEL_BY_TYPE = 1,//第一级 + MENU_SECOND_LEVEL_BY_FOLD = 2,//第二级 + MENU_THIRD_LEVEL_HAS_PIC = 3,//第三级图片 + MENU_THIRD_LEVEL_HAS_DETAIL = 4,//第三级详情 +} + +export enum media_type { + MEDIA_TYPE_FILE = 1,//文件 + MEDIA_TYPE_IMAGE = 3,//图片 + MEDIA_TYPE_VIDEO = 4,//视频 + MEDIA_TYPE_AUDIO = 5,//音频 + MEDIA_TYPE_ALBUM = 8//相册 +} + +export enum GridItemSize { + GRID_ITEM_HEIGHT = 126, + //GRID_ITEM_WIDTH = 112, + GRID_ITEM_WIDTH = 96, + GRID_ITEM_COLUMNS_GAP = 8, + GRID_ITEM_ROWS_GAP = 8, +} + +export enum terminate_reason { + SUCCESS = 0, + NO_ACTION = -1, +} \ No newline at end of file diff --git a/entry/src/main/ets/Model/FileInfo.ets b/entry/src/main/ets/Model/FileInfo.ets new file mode 100644 index 0000000..8a53ef6 --- /dev/null +++ b/entry/src/main/ets/Model/FileInfo.ets @@ -0,0 +1,41 @@ + +import { media_type } from './Constants' + +export class FileInfo { + name: string = '' + path: string = '' + fileType: number= media_type.MEDIA_TYPE_ALBUM + size: string = '' + dataAdded_time: string = '' + modified_time: string = '' + mediaType: string = '' + thumbnail: Resource = $r('app.media.ic_photo') + font_color: Color | string | Resource + opacity: number = 0 + length: number = 0 + list_background: string | Resource + + constructor(name: string,path:string,fileType:number,size: string,dataAdded_time:string,modified_time:string,mediaType:string,thumbnail: Resource,length: number) { + this.name = name + this.path = path + this.fileType = fileType + this.size = size + this.dataAdded_time = dataAdded_time + this.modified_time = modified_time + this.mediaType = mediaType + this.thumbnail = thumbnail + this.length = length + + } +} + +export class TopPathInfo { + name: string + path: string + opacity: number = 1 + + constructor(name: string, path: string) { + this.name = name + this.path = path + } +} \ No newline at end of file diff --git a/entry/src/main/ets/workers/DataWorker.js b/entry/src/main/ets/workers/DataWorker.js new file mode 100644 index 0000000..551acc6 --- /dev/null +++ b/entry/src/main/ets/workers/DataWorker.js @@ -0,0 +1,204 @@ + + +import worker from '@ohos.worker' +import filemanager from '@ohos.filemanager' + + +var TAG = 'DataWorker' +const parentPort = worker.parentPort +parentPort.onmessage = function (e) { + let data = e.data + if (data.request_data == 'getRoot') { + getRootData(data) + } else if (data.request_data == 'listFile') { + getListFileData(data) + } +} + +parentPort.onmessageerror = function () { + console.log('aaa-->onmessageerror') +} + +parentPort.onerror = function (data) { + console.log('aaa-->onerror') +} + +function getRootData(data) { + filemanager.getRoot() + .then(file => { + handleData(file, data) + + }) + .catch((error) => { + console.log('aaa--getRoot 2 error' + error) + }); +} + +//function getListFileData(data) { +// +// if (data.media_type == 'file') { +// filemanager.listFile(data.path, data.media_type) +// .then(fileFolder => { +// if(Array.isArray(fileFolder)) { +// for (var i = 0; i < fileFolder.length; i++) { +// var folder = fileFolder[i] +// filemanager.listFile(folder.path, 'file') +// .then(fileList => { +// handleData(fileList, data) +// }) +// .catch((error) => { +// console.log('aaa--folderError' + error) +// }) +// } +// } +// +// }) +// .catch((error) => { +// console.log('aaa--getFolderDataError' + error) +// }) +// }else { +// filemanager.listFile(data.path, 'file') +// .then(fileFolder => { +// if(Array.isArray(fileFolder)) { +// for (var i = 0; i < fileFolder.length; i++) { +// var folder = fileFolder[i] +// filemanager.listFile(folder.path, 'file') +// .then(fileList => { +// if(Array.isArray(fileList)){ +// for (var index = 0; index < fileList.length; index++) { +// var file = fileList[index] +// filemanager.listFile(data.path+file.path, data.media_type) +// .then(fileItem => { +// handleData(fileItem, data) +// }) +// .catch((error) => { +// console.log('aaa--fileListError' + error) +// }) +// } +// } +// +// }) +// .catch((error) => { +// console.log('aaa--fileError' + error) +// }) +// } +// } +// }) +// .catch((error) => { +// console.log('aaa--getFileError' + error) +// }) +// } +// +// +//} + + +function getListFileData(data) { + + if (data.media_type == 'file') { + filemanager.listFile(data.path, data.media_type) + .then(fileFolder => { + if(Array.isArray(fileFolder)) { + for (var i = 0; i < fileFolder.length; i++) { + var folder = fileFolder[i] + filemanager.listFile(folder.path, 'file') + .then(fileList => { + handleData(fileList, data) + }) + .catch((error) => { + console.log('aaa--folderError' + error) + }) + } + } + + }) + .catch((error) => { + console.log('aaa--getFolderDataError' + error) + }) + } + if (data.media_type == 'video') { + filemanager.listFile(data.path, data.media_type) + .then(fileFolder => { + if(Array.isArray(fileFolder)) { + for (var i = 0; i < fileFolder.length; i++) { + var folder = fileFolder[i] + filemanager.listFile(folder.path, 'video') + .then(fileList => { + handleData(fileList, data) + }) + .catch((error) => { + console.log('aaa--folderError' + error) + }) + } + } + + }) + .catch((error) => { + console.log('aaa--getFolderDataError' + error) + }) + } if (data.media_type == 'audio') { + filemanager.listFile(data.path, data.media_type) + .then(fileFolder => { + if(Array.isArray(fileFolder)) { + for (var i = 0; i < fileFolder.length; i++) { + var folder = fileFolder[i] + filemanager.listFile(folder.path, 'audio') + .then(fileList => { + handleData(fileList, data) + }) + .catch((error) => { + console.log('aaa--folderError' + error) + }) + } + } + + }) + .catch((error) => { + console.log('aaa--getFolderDataError' + error) + }) + }else { + filemanager.listFile(data.path, 'file') + .then(fileFolder => { + if(Array.isArray(fileFolder)) { + for (var i = 0; i < fileFolder.length; i++) { + var folder = fileFolder[i] + filemanager.listFile(folder.path, 'file') + .then(fileList => { + if(Array.isArray(fileList)){ + for (var index = 0; index < fileList.length; index++) { + var file = fileList[index] + filemanager.listFile(data.path+file.path, data.media_type) + .then(fileItem => { + handleData(fileItem, data) + }) + .catch((error) => { + console.log('aaa--fileListError' + error) + }) + } + } + + }) + .catch((error) => { + console.log('aaa--fileError' + error) + }) + } + } + }) + .catch((error) => { + console.log('aaa--getFileError' + error) + }) + } + + +} + +function handleData(file, data) { + var info = JSON.stringify(file) + var buf = new ArrayBuffer(info.length * 2) + var bufView = new Uint16Array(buf) + for (var index = 0; index < info.length; index++) { + bufView[index] = info.charCodeAt(index) + } + parentPort.postMessage({ data: bufView, params: data }) +} + -- Gitee