2025-01-07 15:50:48 +08:00

538 lines
20 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 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<mediaLibrary.FileAsset> {
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<photoAccessHelper.Album> {
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<void> {
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<void> {
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<photoAccessHelper.Album> {
// let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = 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<photoAccessHelper.Album> {
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<string>
{
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<void>
{
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<string>
{
let firstUri = "";
let fetchResult:photoAccessHelper.FetchResult<photoAccessHelper.Album> = 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<void> {
let fetchResult:photoAccessHelper.FetchResult<photoAccessHelper.Album> = 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<photoAccessHelper.PhotoAsset> = 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<void> {
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 ;