2025-01-20 08:50:40 +08:00

385 lines
15 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 mediaLibrary from '@ohos.multimedia.mediaLibrary'
export class FileHelper {
private userFileMgr: photoAccessHelper.PhotoAccessHelper = undefined;
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.userFileMgr = photoAccessHelper.getPhotoAccessHelper(globalThis.context);
}
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: photoAccessHelper.FetchResult<photoAccessHelper.Album> = 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 {
}
}
public async deleteFileOfAlbum(album_Name,file_type): Promise<void> {
console.log('baoyihu deletePictureOfAlbum album_Name'+album_Name);
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',album_Name );
for (let onfile of all_fileAsset)
{
console.log(album_Name, 'baoyihu deletePictureOfAlbum uri : ' + 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 : ',album_Name);
}).catch((err) => {
console.log('baoyihu deletePictureOfAlbum trash faild : ',album_Name);
});
}catch (err) {
console.log('baoyihu deletePictureOfAlbum error: '+err,album_Name);
} finally {
if (albumFetchResult != null) {
albumFetchResult.close();
}
}
console.log( 'baoyihu deletePictureOfAlbum delete end',album_Name );
} catch (err) {
console.log( 'baoyihu deletePictureOfAlbum failed with err: ' + err,album_Name);
} finally {
if (photoFetchResult != null) {
photoFetchResult.close();
}
}
}
public async deleteAllPictures(): Promise<void> {
console.log('baoyihu deleteAllPictures');
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 batch delete begin' );
for (let onfile of all_fileAsset)
{
console.log( 'baoyihu push one uri : ' + onfile.uri +', photoType : '+onfile.photoType+', displayName : '+onfile.displayName +', file_size: '+onfile.size);
uri_array.push(onfile.uri);
}
// await album.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();
}
}
}
//
// 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: photoAccessHelper.FetchResult<photoAccessHelper.Album> = 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();
}
}
}
}