diff --git a/entry/src/main/ets/Components/ClassifyTitle.ets b/entry/src/main/ets/Components/ClassifyTitle.ets new file mode 100644 index 0000000000000000000000000000000000000000..1b25929da9e4e270d2f197cc3a59fc31e0f863bb --- /dev/null +++ b/entry/src/main/ets/Components/ClassifyTitle.ets @@ -0,0 +1,28 @@ + +@Component +export default struct TitleBar{ + private title: string | Resource = 'null' + private rightText : string = '' + + build(){ + Column() { + Row() { + Text(this.title) + .fontColor(Color.Black) + .fontSize(20) + .layoutWeight(9) + .margin({left:10}) + Text(this.rightText) + .width(35) + .layoutWeight(5) + .fontSize(16) + .textAlign(TextAlign.End) + .margin({right:10}) + } + } + .width('100%') + .height(60) + .padding(10) + + } +} \ No newline at end of file diff --git a/entry/src/main/ets/Components/ClassityList.ets b/entry/src/main/ets/Components/ClassityList.ets new file mode 100644 index 0000000000000000000000000000000000000000..37cb8f2eb21b4e949e1644a4b224c1a7331ff2d8 --- /dev/null +++ b/entry/src/main/ets/Components/ClassityList.ets @@ -0,0 +1,400 @@ +import worker from '@ohos.worker' +import statfs from '@ohos.statfs' +import router from '@system.router' +import { FileInfo} from '../Model/FileInfo' + + +@Preview +@Component +export struct ClassityList { + private mWorker + @State listData:any = []//目录集合 + @State columnsIndex: number = 4 + @State rowIndex: number = 1 + @State rowsTemplate: string = '' + @State columnsTemplate: string = '' + + @State freeBytes: number = 0 + @State totalBytes: number = 0 + + @State fileList: any = []//文档集合 + @State FileListData: any = [] + @State imageList: any = []//图片集合 + @State imageList1: any = []//图片集合 + @State audioList: any = []//音频集合 + @State videoList: any = []//视频集合 + private date : Date + @State imageDate : string = ''//单个图片信息 + @State videoDate : string = ''//单个视频信息 + @State audioDate : string = ''//单个音频信息 + @State fileDate : string = ''//单个文件信息 + + @State fileTypeList: Array = []//文件集合 + aboutToAppear(){ + //初始化work + this.initWork() + //发送 + this.mWorker.postMessage({ + request_data: 'getRoot', + device_name: 'local', + media_type: '', + path: '' + }) + this.getStorageData() + globalThis.ClassityList = this + } + onPageShow(){ + this.mWorker.postMessage({ + request_data: 'getRoot', + device_name: 'local', + media_type: '', + path: '' + }) + } + +//获取手机内存 + async getStorageData() { + + const bytesTotal = await statfs.getTotalBytes(globalThis.context.filesDir) + this.totalBytes = bytesTotal + + const bytesFree = await statfs.getFreeBytes( globalThis.context.filesDir) + this.freeBytes = bytesFree + + } + + //获取使用内存比例 + getPercentage(num:number, total:number) { + if (num == 0 || total == 0) { + return 0 + } + return Number(Number((num / total)*100).toFixed(2)) + } + + //内存单位转化 + getSizeNum(num:number) { + if (num == 0) { + return 0 + } + return Number((num/1024/1024/1024).toFixed(2)) + } + + //初始化work + private initWork() { + if(this.mWorker == null) { + this.mWorker = new worker.Worker('workers/DataWorker.js', { type: 'classic', name: 'filePicker' }) + this.mWorker.onerror = this.onError.bind(this) + this.mWorker.onmessageerror = this.onMessageError.bind(this) + this.mWorker.onexit = this.onExit.bind(this) + this.mWorker.onmessage = this.onMessage.bind(this) + } + } + + private onError(e): void{ + console.log('aaa-->onError = ' + JSON.stringify(e)) + } + + private onMessageError(e): void{ + console.log('aaa-->onMessageError = ' + JSON.stringify(e)) + } + + private onExit(): void{ + console.log('aaa-->onExit') + this.mWorker = undefined + } + + //线程结果回调 + private onMessage(result) { + var params = result.data.params + var file = JSON.parse(String.fromCharCode.apply(null, new Uint16Array(result.data.data))) + this.rowIndex = 1 + if (Array.isArray(file)) { + if (params.request_data == 'getRoot') { + + for (var index = 0;index < file.length; index++) { + var info = file[index] +// console.log('info.name+111111112222223333333'+info.name) +// console.log('info.path+111111112222223333333'+info.path) + var mediaType = '' + var name = '' + var thumbnail: Resource = $r('app.media.ic_type_smallfile') + + if (info.name == 'audio_album') { + name = '音频' + mediaType = 'audio' + thumbnail = $r('app.media.ic_audio') + } else if (info.name == 'video_album') { + name = '视频' + mediaType = 'video' + thumbnail = $r('app.media.ic_video') + } else if (info.name == 'image_album') { + name = '图片' + mediaType = 'image' + thumbnail = $r('app.media.ic_photo') + }else if (info.name == 'file_folder') { + name = '文档' + mediaType = 'file' + thumbnail = $r('app.media.ic_type_smallfile') + } + let item = new FileInfo(name,info.path,info.type,info.size,info.added_time,info.modified_time,mediaType,thumbnail,0) + this.listData.push(item)//目录集信息, +// console.log('item.name+111111112222223333333'+item.name) +// console.log('item.path+111111112222223333333'+item.path) +// console.log('item.path+111111112222223333333'+item.fileType) +// console.log('item.path+111111112222223333333'+item.mediaType) + +// this.mWorker.postMessage({ +// request_data: 'listFile', +// device_name: 'local', +// media_type: item.mediaType, +// path: item.path +// }) + } + + this.rowIndex = Math.floor((this.listData.length + 1) / this.columnsIndex) + for (let i = 0;i < this.rowIndex; i++) { + this.rowsTemplate += '1fr ' + } + for (let i = 0;i < this.columnsIndex; i++) { + this.columnsTemplate += '1fr ' + } + + for (var index = 0; index < this.listData.length; index++) { + var item = this.listData[index] + console.log('imageList-item.name=' + JSON.stringify(item.name)) + console.log('imageList-item.mediaType=' + JSON.stringify(item.mediaType)) + this.mWorker.postMessage({ + request_data: 'listFile', + device_name: 'local', + media_type: item.mediaType, + path: item.path + }) + } + + + }else { +// for (var index = 0;index < this.listData.length; index++) { +// var info = this.listData[index] +// if (info.mediaType == params.media_type) { +// +// info.length = file.length +// break +// } +// } + + this.filesList(file,params.media_type) + + +// for (var i = 0; i < file.length; i++) +// { +// var files = file[i] +// if(params.media_type=='file') { +// let fileData = new FileInfo(files.name, files.path, files.type, files.size, files.added_time, files.modified_time, params.media_type, $r('app.media.ic_type_smallfile'), 0) +// this.fileTypeList.push(fileData) +//// console.log('fileData.name+111111112222223333333'+fileData.name) +//// console.log('fileData.type+111111112222223333333'+fileData.fileType) +//// console.log('fileData.mediaType+111111112222223333333'+fileData.mediaType) +// } +// } + for (var i = 0; i < file.length; i++) + { + var files = file[i] + if(params.media_type=='file'&& files.name.indexOf(".")!=-1) { + let fileData = new FileInfo(files.name, files.path, files.type, files.size, files.added_time, files.modified_time, params.media_type, $r('app.media.ic_type_smallfile'), 0) + this.fileTypeList.push(fileData) + } + } + + + } + } + } + + filesList(file,type){ + console.log('hans --------filesList '+JSON.stringify(file)) + + for (var i = 0; i < file.length; i++) { + var fileItem = file[i] + this.date = new Date(fileItem.modified_time) + var Y = this.date.getFullYear() + '-'; + var M = (this.date.getMonth()+1 < 10 ? '0'+(this.date.getMonth()+1) : this.date.getMonth()+1) + '-'; + var D = this.date.getDate() + ' '; + if(type == 'image'){ + if (i== 0) { + this.imageList1 = [] + } + this.imageDate = Y+M+D + let imageData = new FileInfo(fileItem.name, fileItem.path, fileItem.type, fileItem.size, fileItem.added_time,this.imageDate, fileItem.media_type, null, 0) + this.imageList.push(imageData) + let imageData1 = new FileInfo(fileItem.name, fileItem.path, fileItem.type, fileItem.size, fileItem.added_time,fileItem.modified_time, fileItem.media_type, null, 0) + this.imageList1.push(imageData1) + }else if (type == 'video') { + if (i== 0) { + this.videoList = [] + } + this.videoList = Y+M+D + let videoData = new FileInfo(fileItem.name, fileItem.path, fileItem.type, fileItem.size, fileItem.added_time,this.imageDate, fileItem.media_type, null, 0) + this.videoList.push(videoData) + }else if(type == 'audio'){ + if (i== 0) { + this.audioList = [] + } + this.audioDate = Y+M+D + let audioData = new FileInfo(fileItem.name, fileItem.path, fileItem.type, fileItem.size, fileItem.added_time,this.imageDate, fileItem.media_type, null, 0) + this.audioList.push(audioData) + }else if(type == 'file'){ + this.fileDate = Y+M+D + let fileData = new FileInfo(fileItem.name, fileItem.path, fileItem.type, fileItem.size, fileItem.added_time,this.imageDate, fileItem.media_type, null, 0) + this.fileList.push(fileData) + } + } + } + + //把媒体算出内容个数 + getDirSum(listItemType: string){ + var n=0 + if(listItemType=='image') + n = this.imageList1.length + else if(listItemType=='video') + n =this.videoList.length + else if(listItemType=='audio') + n =this.audioList.length + else if(listItemType=='file') + n =this.fileTypeList.length + return n; + + } + + build(){ + Column() { + Flex({ justifyContent: FlexAlign.Start, alignItems:ItemAlign.Center }) { + Image($r('app.media.search_note')).width(20).height(20).margin({left:10}) + Text( $r('app.string.searchNote') ) + .backgroundColor('#f7f8f9') + .fontSize(16) + .fontColor(Color.Gray) + .margin({left:6}) + } + .backgroundColor('#fff8f9f7') + .height(60) + .opacity(1) + .margin(20) + .borderRadius(10) + .border({ width: 2, color: '#e4e4e4' }) + .onClick(() => { + //LogInfo(this.TAG ,'onClick pages/SearchPage2') + router.push({ + uri: 'pages/FileLevelList', + }) + }) + + Grid() { + ForEach(this.listData, (listItem) => { + GridItem() { + Column({ space: 5}) { + Image(listItem.thumbnail).width(60).height(60) + Text(listItem.name) + .fontSize(20) + .fontColor('#333333') + .fontWeight(FontWeight.Regular) + + Text(this.getDirSum(listItem.mediaType)+'') + .fontSize(16) + .fontColor('#999999') + .fontWeight(FontWeight.Regular) + } + } + .onClick(()=>{ + //图片 + if(listItem.mediaType == "image"){ + console.log('onClick pages/imageFile') + router.push({ + uri:"pages/imageFile" , + params: { + imageTypeList : this.imageList1 + } + }) + //视频 + }else if(listItem.mediaType == "video"){ + console.log('onClick pages/videoFile') + router.push({ + uri:'pages/videoFile', + params: { + videoList : this.videoList + } + }) + + //文档 + }else if(listItem.mediaType == "file"){ + console.log('onClick pages/FileClassify') + router.push({ + uri:"pages/FileClassify" , + params: { + fileTypeList : this.fileTypeList, + imageTypeList : this.imageList1, + + } + }) + //音频 + }else if(listItem.mediaType == "audio"){ + console.log('onClick pages/VoiceClassify') + router.push({ + uri:"pages/VoiceClassify", + params: { + audioList : this.audioList + } + }) + } + }) + }) + } + .columnsTemplate('1fr 1fr 1fr 1fr') + .rowsTemplate('1fr') +// .height(130 * this.rowIndex) + .height(130) + + Flex({direction: FlexDirection.Row, justifyContent:FlexAlign.SpaceBetween}){ + Text('存储') + .fontSize(18) + .fontColor('#333333') + .fontWeight(FontWeight.Regular) + .margin({left:10}) + Text('可用'+this.getSizeNum(this.freeBytes)+'GB | 共'+this.getSizeNum(this.totalBytes)+'GB') + .fontSize(16) + .fontColor('#999999') + .fontWeight(FontWeight.Regular) + .margin({right:10}) + }.width('100%').padding(20).margin({top:20}) + .onClick(() => { + console.log("qqqqq") + router.push({ + uri: 'pages/FileLevelList' + }) + }) + + Flex({direction: FlexDirection.Row, justifyContent:FlexAlign.SpaceBetween}){ + Progress({ value: 10, total: 100, type: ProgressType.Linear }) + .color('#0fa4c1') + .value(this.getPercentage((this.totalBytes - this.freeBytes), this.totalBytes)) + .width('90%').margin({left:16}) + + + Text(`已用 ${this.getPercentage((this.totalBytes - this.freeBytes), this.totalBytes)}%`) + .fontSize(16) + .fontColor('#888888') + .fontWeight(FontWeight.Regular) + .width('20%') + .textAlign(TextAlign.End) + .margin({left:2,right: 50}) + + }.width('100%').padding(20) + .onClick(() => { + console.log("qqqqq") + router.push({ + uri: 'pages/FileLevelList' + }) + }) + } + .height('100%') + } +} \ No newline at end of file