/* * Copyright (c) 2023 Shenzhen Kaihong Digital Industry Development 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. */ // @ts-ignore import photoAccessHelper from '@ohos.file.photoAccessHelper' import dataSharePredicates from '@ohos.data.dataSharePredicates' import fs from '@ohos.file.fs'; import mediaLibrary from '@ohos.multimedia.mediaLibrary'; class FileHelper { private userFileMgr: photoAccessHelper.PhotoAccessHelper = undefined; private mediaLib: mediaLibrary.MediaLibrary = undefined; private baseDir: string ="" FILE_ASSET_FETCH_COLUMNS = [photoAccessHelper.PhotoKeys.URI, photoAccessHelper.PhotoKeys.PHOTO_TYPE, photoAccessHelper.PhotoKeys.DISPLAY_NAME, photoAccessHelper.PhotoKeys.SIZE, photoAccessHelper.PhotoKeys.DATE_ADDED, photoAccessHelper.PhotoKeys.DATE_MODIFIED, photoAccessHelper.PhotoKeys.DURATION, photoAccessHelper.PhotoKeys.WIDTH, photoAccessHelper.PhotoKeys.HEIGHT, photoAccessHelper.PhotoKeys.DATE_TAKEN, photoAccessHelper.PhotoKeys.ORIENTATION, photoAccessHelper.PhotoKeys.FAVORITE, photoAccessHelper.PhotoKeys.TITLE, photoAccessHelper.PhotoKeys.POSITION, photoAccessHelper.PhotoKeys.DATE_TRASHED, photoAccessHelper.PhotoKeys.HIDDEN ]; constructor() { this.mediaLib = mediaLibrary.getMediaLibrary(globalThis.context); this.userFileMgr = photoAccessHelper.getPhotoAccessHelper(globalThis.context); this.baseDir = AppStorage.Get('sanBoxFileDir') + '/TextDir'; } async queryFile(displayName): Promise { var ret ; console.info(` baoyihu queryFile displayName=${displayName}`); let fetchOp = { selections: `media_type=? AND display_name = ?`, selectionArgs: [`${mediaLibrary.MediaType.AUDIO}`,displayName], }; console.log( 'baoyihu queryFile selections: '+fetchOp.selections +" args:" + fetchOp.selectionArgs); let fileResult = await this.mediaLib.getFileAssets(fetchOp); let retCount = fileResult.getCount(); console.log( 'baoyihu queryFile count: '+retCount ); if (retCount > 0) { ret= fileResult.getFirstObject(); console.log( 'baoyihu queryFile success ' ); } return Promise.resolve(ret); } public async queryPhotoByDisplayName(displayName) { console.log( 'baoyihu queryPhotoByDisplayName begin DISPLAY_NAME:' +displayName ); try { let predicates = new dataSharePredicates.DataSharePredicates(); predicates.equalTo(photoAccessHelper.PhotoKeys.DISPLAY_NAME, displayName) let fetchOptions = { fetchColumns: this.FILE_ASSET_FETCH_COLUMNS, predicates: predicates }; let assetsResult = await this.userFileMgr.getAssets(fetchOptions); let retCount = assetsResult.getCount(); console.log( 'baoyihu queryPhotoByDisplayName count: '+retCount ); if (retCount > 0) { let asset = await assetsResult.getFirstObject(); console.log( 'baoyihu queryPhotoByDisplayName one asset uri : ' + asset.uri +', photoType : '+asset.photoType+', displayName : '+asset.displayName); console.log( 'baoyihu queryPhotoByDisplayName success ' ); } } catch (err) { console.log( 'baoyihu queryPhotoByDisplayName failed with err: ' + err); } finally { } } async getUserAlbumItemByDisplayName(displayName: string): Promise { let fetchResult = null let album: photoAccessHelper.Album = null try { console.log( 'getUserAlbumItemByDisplayName'); let predicates = new dataSharePredicates.DataSharePredicates(); predicates.equalTo(photoAccessHelper.AlbumKeys.ALBUM_NAME, displayName) let fetchOptions = { fetchColumns: [], predicates: predicates }; fetchResult = await this.userFileMgr.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, fetchOptions ); console.log( 'get getUserAlbumItemByDisplayName, count: ' + fetchResult.getCount()); if (fetchResult.getCount() > 0) { album = await fetchResult.getFirstObject(); } } catch (err) { console.log( 'get Album fetchResult failed with err: ' + err); } finally { if (fetchResult != null) { fetchResult.close(); } } return album; } public async addAssetToAlbum(albumName,file_uri) { console.log( 'baoyihu addAssetToAlbum begin albumName '+albumName+', file_uri:' +file_uri); try { let album = await this.getUserAlbumItemByDisplayName(albumName); let predicates = new dataSharePredicates.DataSharePredicates(); predicates.equalTo(photoAccessHelper.PhotoKeys.URI, file_uri) let fetchOptions = { fetchColumns: this.FILE_ASSET_FETCH_COLUMNS, predicates: predicates }; let assetsResult = await this.userFileMgr.getAssets(fetchOptions); if (assetsResult.getCount() > 0) { let asset = await assetsResult.getFirstObject(); console.log( 'baoyihu addAssetToAlbum one asset uri : ' + asset.uri +', photoType : '+asset.photoType+', displayName : '+asset.displayName); await album.addAssets([asset]); console.log( 'baoyihu addAssetToAlbum success ' ); } } catch (err) { console.log( 'baoyihu addAssetToAlbum failed with err: ' + err); } finally { } } private savedPictureFile:string[] = []; private savedVideoFile:string[] = []; //1 是图片,2 是视频 public addFile(fileName,file_type) { if(file_type==1) { this.savedPictureFile.push(fileName); } else if(file_type==2) { this.savedVideoFile.push(fileName); } } public async trashPictureFiles(all_fileAsset) { let albumFetchResult = null; try { albumFetchResult = await this.userFileMgr.getAlbums(photoAccessHelper.AlbumType.SYSTEM, photoAccessHelper.AlbumSubtype.TRASH); let trashAlbum = await albumFetchResult.getFirstObject(); trashAlbum.deleteAssets(all_fileAsset).then(() => { console.log('baoyihu deletePictureOfAlbum trash ok : '); }).catch((err) => { console.log('baoyihu deletePictureOfAlbum trash faild : '); }); }catch (err) { console.log('baoyihu deletePictureOfAlbum error: '+err); } finally { if (albumFetchResult != null) { albumFetchResult.close(); } } console.log( 'baoyihu deletePictureOfAlbum delete end' ); } public async deleteFileOfAlbum(album_Name,file_type): Promise { console.log('baoyihu deletePictureOfAlbum album_Name:'+album_Name); var fileMap =[] if(file_type==1) { fileMap = this.savedPictureFile.slice() this.savedPictureFile.length = 0; } else { fileMap = this.savedVideoFile.slice() this.savedVideoFile.length = 0; } var photoFetchResult =null; try { let album = await this.getUserAlbumItemByName(album_Name); let predicates = new dataSharePredicates.DataSharePredicates(); predicates.equalTo(photoAccessHelper.PhotoKeys.PHOTO_TYPE, file_type) let fetchOptions = { fetchColumns: this.FILE_ASSET_FETCH_COLUMNS, predicates: predicates }; photoFetchResult = await album.getAssets(fetchOptions) var all_fileAsset = await photoFetchResult.getAllObjects(); var uri_array=[] console.log( 'baoyihu deletePictureOfAlbum iterator begin' +fileMap.length); // for (let onfile of all_fileAsset) // { // console.log( 'baoyihu deletePictureOfAlbum uri : ' + onfile.uri +', photoType : '+onfile.photoType+', displayName : '+onfile.displayName); // if(fileMap.indexOf(onfile.displayName)>-1) // { // console.log( 'baoyihu deletePictureOfAlbum uri find one: ' + onfile.uri +', photoType : '+onfile.photoType+', displayName : '+onfile.displayName); // uri_array.push(onfile.uri); // } // } // await this.userFileMgr.deleteAssets(uri_array); let albumFetchResult = null; try { albumFetchResult = await this.userFileMgr.getAlbums(photoAccessHelper.AlbumType.SYSTEM, photoAccessHelper.AlbumSubtype.TRASH); let trashAlbum = await albumFetchResult.getFirstObject(); trashAlbum.deleteAssets(all_fileAsset).then(() => { console.log('baoyihu deletePictureOfAlbum trash ok : '); }).catch((err) => { console.log('baoyihu deletePictureOfAlbum trash faild : '); }); }catch (err) { console.log('baoyihu deletePictureOfAlbum error: '+err); } finally { if (albumFetchResult != null) { albumFetchResult.close(); } } console.log( 'baoyihu deletePictureOfAlbum delete end' ); } catch (err) { console.log( 'baoyihu deletePictureOfAlbum failed with err: ' + err); } finally { if (photoFetchResult != null) { photoFetchResult.close(); } } } public async deleteAllPictures(file_type): Promise { console.log('baoyihu deleteAllPictures enter'); var fileMap =[] if(file_type==1) { fileMap = this.savedPictureFile.slice() this.savedPictureFile.length = 0; } else { fileMap = this.savedVideoFile.slice() this.savedVideoFile.length = 0; } let photoFetchResult = null; try { let predicates = new dataSharePredicates.DataSharePredicates(); let fetchOptions = { fetchColumns: this.FILE_ASSET_FETCH_COLUMNS, predicates: predicates }; photoFetchResult = await this.userFileMgr.getAssets(fetchOptions); var all_fileAsset = await photoFetchResult.getAllObjects(); var uri_array=[] console.log( 'baoyihu deleteAllPictures batch delete begin fileMap.length' +fileMap.length); for (let onfile of all_fileAsset) { console.log( 'baoyihu deleteAllPictures find one uri : ' + onfile.uri +', photoType : '+onfile.photoType+', displayName : '+onfile.displayName +', file_size: '+onfile.size); if(fileMap.indexOf(onfile.displayName)>-1) { console.log( 'baoyihu deleteAllPictures uri find one: ' + onfile.uri +', photoType : '+onfile.photoType+', displayName : '+onfile.displayName); uri_array.push(onfile.uri); } } // await album.removeAssets(all_fileAsset); await this.userFileMgr.deleteAssets(uri_array); await this.trashPictureFiles(all_fileAsset); console.log( 'baoyihu deleteAllPictures batch delete end' ); } catch (err) { console.log( 'baoyihu deleteAllPictures failed with err: ' + err); } finally { if (photoFetchResult != null) { photoFetchResult.close(); } } } // // async getUserAlbumItemByUri(uri: string): Promise { // let fetchResult: photoAccessHelper.FetchResult = null // let album: photoAccessHelper.Album = null // try { // console.log( 'getUserAlbumItemByUri'); // let predicates = new dataSharePredicates.DataSharePredicates(); // predicates.equalTo(photoAccessHelper.AlbumKeys.URI, uri) // let fetchOptions = { // fetchColumns: [], // predicates: predicates // }; // fetchResult = await this.userFileMgr.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, fetchOptions ); // console.log( 'get Album fetchResult, count: ' + fetchResult.getCount()); // if (fetchResult.getCount() > 0) { // album = await fetchResult.getFirstObject(); // } // } catch (err) { // console.log( 'get Album fetchResult failed with err: ' + err); // } finally { // if (fetchResult != null) { // fetchResult.close(); // } // } // return album; // } async getUserAlbumItemByName(albumName: string): Promise { let fetchResult= null let album: photoAccessHelper.Album = null try { console.log( 'getUserAlbumItemByName'); let predicates = new dataSharePredicates.DataSharePredicates(); predicates.equalTo(photoAccessHelper.AlbumKeys.ALBUM_NAME, albumName) let fetchOptions = { fetchColumns: [], predicates: predicates }; fetchResult = await this.userFileMgr.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, fetchOptions ); console.log( 'get getUserAlbumItemByName, count: ' + fetchResult.getCount()); if (fetchResult.getCount() > 0) { album = await fetchResult.getFirstObject(); console.log( 'getUserAlbumItemByName uri: ' + album.albumUri+',albumName: ' + album.albumName); } } catch (err) { console.log( 'getUserAlbumItemByName failed with err: ' + err); } finally { if (fetchResult != null) { fetchResult.close(); } } return album; } public async createAlbum(albumName):Promise { try { console.log( "baoyihu createAlbum beging"); let albumAsset = await this.userFileMgr.createAlbum(albumName); console.log( 'baoyihu createAlbum success, albumType: ' + albumAsset.albumType +', albumSubtype: '+ albumAsset.albumSubtype +', albumName: '+ albumAsset.albumName +', albumUri: '+ albumAsset.albumUri +', coverUri: ' + albumAsset.coverUri); return albumAsset.albumUri ; } catch (err) { console.log( 'baoyihu createAlbum failed with err: ' + err); } finally { } } public async createPhotoAsset(type: photoAccessHelper.AlbumType, subType: photoAccessHelper.AlbumSubtype ): Promise { console.log( 'baoyihu createPhotoAsset enter '); try { let createOptions = { subtype: photoAccessHelper.PhotoSubtype.SCREENSHOT}; await this.userFileMgr.createAsset("picture2.jpg", createOptions,(err,photoResult)=>{ console.log( 'baoyihu createPhotoAsset return uri: ' + photoResult.uri +', photoType: '+ photoResult.photoType +', displayName: '+ photoResult.displayName ); }); } catch (err) { console.log( 'baoyihu createPhotoAsset failed with err: ' + err); } finally { } } public async queryAlbum(type: photoAccessHelper.AlbumType, subType: photoAccessHelper.AlbumSubtype ):Promise { let firstUri = ""; let fetchResult:photoAccessHelper.FetchResult = null; try { fetchResult = await this.userFileMgr.getAlbums(type, subType); console.log( 'baoyihu queryAlbum success count: ' + fetchResult.getCount()); for (let i = 0; i < fetchResult.getCount(); i++) { let albumAsset:photoAccessHelper.Album = await fetchResult.getObjectByPosition(i); console.log( 'queryAlbum albumType: ' + albumAsset.albumType +', Subtype: '+ albumAsset.albumSubtype +', Name: '+ albumAsset.albumName +', Uri: '+ albumAsset.albumUri +', coverUri: '+ albumAsset.coverUri); let predicates = new dataSharePredicates.DataSharePredicates(); let fetchOptions = { fetchColumns: this.FILE_ASSET_FETCH_COLUMNS, predicates: predicates }; let photoFetchResult = await albumAsset.getAssets(fetchOptions); let count = photoFetchResult.getCount(); console.log( 'baoyihu queryAlbum photoFetchResult count: ' + count); var all_fileAsset = await photoFetchResult.getAllObjects(); // var uri_array=[] for (let onfile of all_fileAsset) { console.log( 'baoyihu queryAlbum one uri : ' + onfile.uri); firstUri = onfile.uri; // uri_array.push(onfile.uri); } } console.log( 'baoyihu queryAlbum return asser:' + firstUri); } catch (err) { console.log( 'baoyihu queryAlbum failed with err: ' + err); } finally { if (fetchResult != null) { fetchResult.close(); } } return new Promise((resolve, reject) => { console.log( 'baoyihu queryAlbum before resolve:' + firstUri); resolve(firstUri) }) } public async deleteAllVideos(type: photoAccessHelper.AlbumType, subType: photoAccessHelper.AlbumSubtype ): Promise { let fetchResult:photoAccessHelper.FetchResult = null; try { fetchResult = await this.userFileMgr.getAlbums(type, subType); console.log( 'baoyihu_ get Album fetchResult, count: ' + fetchResult.getCount()); for (let i = 0; i < fetchResult.getCount(); i++) { let albumAsset:photoAccessHelper.Album = await fetchResult.getObjectByPosition(i); let photoFetchResult:photoAccessHelper.FetchResult = null; let count = 0; console.log( 'baoyihu_ get one Album name : ' + albumAsset.albumName); try { let predicates = new dataSharePredicates.DataSharePredicates(); let fetchOptions = { fetchColumns: this.FILE_ASSET_FETCH_COLUMNS, predicates: predicates }; photoFetchResult = await albumAsset.getAssets(fetchOptions); count = photoFetchResult.getCount(); console.log( 'baoyihu_ photoFetchResult count: ' + count); var all_fileAsset = await photoFetchResult.getAllObjects(); /* var uri_array=[] console.log( 'baoyihu batch delete begin' ); for (let onfile of all_fileAsset) { console.log( 'baoyihu push one uri : ' + onfile.uri); uri_array.push(onfile.uri); } * */ await albumAsset.removeAssets(all_fileAsset); //await this.userFileMgr.deleteAssets(uri_array); console.log( 'baoyihu_ batch delete end' ); } catch (err) { console.log( 'baoyihu_ get Album getPhotoAssets failed with err: ' + err); } finally { if (photoFetchResult != null) { photoFetchResult.close(); } } } } catch (err) { console.log( 'baoyihu_ get Album fetchResult failed with err: ' + err); } finally { if (fetchResult != null) { fetchResult.close(); } } } public isPrime(number):boolean { if (number < 2) { return false; } for (let i = 2; i * i <= number; i++) { if (number % i === 0) { return false; } } return true; } public findPrimes(start, end):void { console.log(`baoyihu find Prime begin in the range ${start} to ${end} are:`); var count = 0; for (let number = start; number <= end; number++) { if (this.isPrime(number)) { count++; //console.log("baoyihu find Number:"+number); } } console.log("baoyihu find Prime count:"+count); } async createRandomFile(fileName): Promise { try { console.log("baoyihu createRandomFile enter baseDir:"+this.baseDir); if (!fs.accessSync(this.baseDir)) { fs.mkdirSync(this.baseDir); } let depth = this.baseDir; let myFile = depth + `/`+fileName; console.log("baoyihu createRandomFile begin fileName:"+fileName+", filePath:"+myFile); let file = fs.openSync(myFile, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE); let str: string = "hello, world"+"\n"+"hello,openharmony"; let writeLen = fs.writeSync(file.fd, str); fs.closeSync(file); console.log("baoyihu createRandomFile success:"+file); } catch (e) { console.log("baoyihu createRandomFile failed:"+e); } } } const fileHelper = new FileHelper(); export default fileHelper ;