385 lines
15 KiB
TypeScript
Raw Normal View History

2024-05-09 13:42:56 +08:00
/*
2025-01-20 08:50:40 +08:00
* 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.
*/
2025-01-07 15:50:48 +08:00
2024-05-09 13:42:56 +08:00
// @ts-ignore
import photoAccessHelper from '@ohos.file.photoAccessHelper'
import dataSharePredicates from '@ohos.data.dataSharePredicates'
2025-01-20 08:50:40 +08:00
import mediaLibrary from '@ohos.multimedia.mediaLibrary'
2024-05-09 13:42:56 +08:00
2025-01-20 08:50:40 +08:00
export class FileHelper {
2024-05-09 13:42:56 +08:00
private userFileMgr: photoAccessHelper.PhotoAccessHelper = undefined;
FILE_ASSET_FETCH_COLUMNS = [photoAccessHelper.PhotoKeys.URI,
2025-01-07 15:50:48 +08:00
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,
2025-01-20 08:50:40 +08:00
photoAccessHelper.PhotoKeys.HIDDEN];
2024-05-09 13:42:56 +08:00
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
};
2025-01-20 08:50:40 +08:00
let assetsResult = await this.userFileMgr.getAssets(fetchOptions);
2024-05-09 13:42:56 +08:00
let retCount = assetsResult.getCount();
console.log( 'baoyihu queryPhotoByDisplayName count: '+retCount );
if (retCount > 0) {
let asset = await assetsResult.getFirstObject();
2025-01-20 08:50:40 +08:00
console.log( 'baoyihu queryPhotoByDisplayName one asset uri : ' + asset.uri +', photoType : '+asset.photoType+', displayName : '+asset.displayName);
2024-05-09 13:42:56 +08:00
console.log( 'baoyihu queryPhotoByDisplayName success ' );
}
} catch (err) {
console.log( 'baoyihu queryPhotoByDisplayName failed with err: ' + err);
} finally {
}
}
async getUserAlbumItemByDisplayName(displayName: string): Promise<photoAccessHelper.Album> {
2025-01-20 08:50:40 +08:00
let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = null
2024-05-09 13:42:56 +08:00
let album: photoAccessHelper.Album = null
try {
2025-01-20 08:50:40 +08:00
console.log( 'getUserAlbumItemByDisplayName');
2024-05-09 13:42:56 +08:00
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 );
2025-01-20 08:50:40 +08:00
console.log( 'get getUserAlbumItemByDisplayName, count: ' + fetchResult.getCount());
2024-05-09 13:42:56 +08:00
if (fetchResult.getCount() > 0) {
album = await fetchResult.getFirstObject();
}
} catch (err) {
2025-01-20 08:50:40 +08:00
console.log( 'get Album fetchResult failed with err: ' + err);
2024-05-09 13:42:56 +08:00
} 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
};
2025-01-20 08:50:40 +08:00
let assetsResult = await this.userFileMgr.getAssets(fetchOptions);
2024-05-09 13:42:56 +08:00
if (assetsResult.getCount() > 0) {
let asset = await assetsResult.getFirstObject();
2025-01-20 08:50:40 +08:00
console.log( 'baoyihu addAssetToAlbum one asset uri : ' + asset.uri +', photoType : '+asset.photoType+', displayName : '+asset.displayName);
2024-05-09 13:42:56 +08:00
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 {
2025-01-20 08:50:40 +08:00
let album = await this.getUserAlbumItemByName(album_Name);
2024-05-09 13:42:56 +08:00
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();
2025-01-20 08:50:40 +08:00
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);
2024-05-09 13:42:56 +08:00
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(() => {
2025-01-20 08:50:40 +08:00
console.log('baoyihu deletePictureOfAlbum trash ok : ',album_Name);
2024-05-09 13:42:56 +08:00
}).catch((err) => {
2025-01-20 08:50:40 +08:00
console.log('baoyihu deletePictureOfAlbum trash faild : ',album_Name);
2024-05-09 13:42:56 +08:00
});
}catch (err) {
2025-01-20 08:50:40 +08:00
console.log('baoyihu deletePictureOfAlbum error: '+err,album_Name);
2024-05-09 13:42:56 +08:00
} finally {
if (albumFetchResult != null) {
albumFetchResult.close();
}
}
2025-01-20 08:50:40 +08:00
console.log( 'baoyihu deletePictureOfAlbum delete end',album_Name );
2024-05-09 13:42:56 +08:00
} catch (err) {
2025-01-20 08:50:40 +08:00
console.log( 'baoyihu deletePictureOfAlbum failed with err: ' + err,album_Name);
2024-05-09 13:42:56 +08:00
} finally {
if (photoFetchResult != null) {
photoFetchResult.close();
}
}
}
2025-01-20 08:50:40 +08:00
public async deleteAllPictures(): Promise<void> {
console.log('baoyihu deleteAllPictures');
2024-05-09 13:42:56 +08:00
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();
2025-01-20 08:50:40 +08:00
var uri_array=[]
console.log( 'baoyihu batch delete begin' );
for (let onfile of all_fileAsset)
2024-05-09 13:42:56 +08:00
{
2025-01-20 08:50:40 +08:00
console.log( 'baoyihu push one uri : ' + onfile.uri +', photoType : '+onfile.photoType+', displayName : '+onfile.displayName +', file_size: '+onfile.size);
uri_array.push(onfile.uri);
2024-05-09 13:42:56 +08:00
}
2025-01-20 08:50:40 +08:00
// await album.removeAssets(all_fileAsset);
2024-05-09 13:42:56 +08:00
await this.userFileMgr.deleteAssets(uri_array);
2025-01-20 08:50:40 +08:00
console.log( 'baoyihu batch delete end' );
2024-05-09 13:42:56 +08:00
} catch (err) {
2025-01-20 08:50:40 +08:00
console.log( 'baoyihu get Album getPhotoAssets failed with err: ' + err);
2024-05-09 13:42:56 +08:00
} finally {
if (photoFetchResult != null) {
photoFetchResult.close();
}
}
}
//
// async getUserAlbumItemByUri(uri: string): Promise<photoAccessHelper.Album> {
2025-01-20 08:50:40 +08:00
// 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;
2024-05-09 13:42:56 +08:00
// }
async getUserAlbumItemByName(albumName: string): Promise<photoAccessHelper.Album> {
2025-01-20 08:50:40 +08:00
let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = null
2024-05-09 13:42:56 +08:00
let album: photoAccessHelper.Album = null
try {
2025-01-20 08:50:40 +08:00
console.log( 'getUserAlbumItemByName');
2024-05-09 13:42:56 +08:00
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 );
2025-01-20 08:50:40 +08:00
console.log( 'get getUserAlbumItemByName, count: ' + fetchResult.getCount());
2024-05-09 13:42:56 +08:00
if (fetchResult.getCount() > 0) {
album = await fetchResult.getFirstObject();
2025-01-20 08:50:40 +08:00
console.log( 'getUserAlbumItemByName uri: ' + album.albumUri+',albumName: ' + album.albumName);
2024-05-09 13:42:56 +08:00
}
} catch (err) {
2025-01-20 08:50:40 +08:00
console.log( 'getUserAlbumItemByName failed with err: ' + err);
2024-05-09 13:42:56 +08:00
} finally {
if (fetchResult != null) {
fetchResult.close();
}
}
return album;
}
2025-01-20 08:50:40 +08:00
public async createAlbum(albumName):Promise<string>
2024-05-09 13:42:56 +08:00
{
try {
console.log( "baoyihu createAlbum beging");
2025-01-20 08:50:40 +08:00
let albumAsset = await this.userFileMgr.createAlbum(albumName);
2024-05-09 13:42:56 +08:00
console.log( 'baoyihu createAlbum success, albumType: ' + albumAsset.albumType +', albumSubtype: '+ albumAsset.albumSubtype
2025-01-07 15:50:48 +08:00
+', albumName: '+ albumAsset.albumName +', albumUri: '+ albumAsset.albumUri +', coverUri: ' + albumAsset.coverUri);
2024-05-09 13:42:56 +08:00
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 {
2025-01-20 08:50:40 +08:00
let createOptions = { subtype: photoAccessHelper.PhotoSubtype.SCREENSHOT};
2024-05-09 13:42:56 +08:00
await this.userFileMgr.createAsset("picture2.jpg", createOptions,(err,photoResult)=>{
2025-01-20 08:50:40 +08:00
console.log( 'baoyihu createPhotoAsset return uri: ' + photoResult.uri +', photoType: '+ photoResult.photoType
+', displayName: '+ photoResult.displayName );
2024-05-09 13:42:56 +08:00
});
} catch (err) {
console.log( 'baoyihu createPhotoAsset failed with err: ' + err);
} finally {
}
}
public async queryAlbum(type: photoAccessHelper.AlbumType, subType: photoAccessHelper.AlbumSubtype ):Promise<string>
{
2025-01-20 08:50:40 +08:00
let firstUri = "";
2024-05-09 13:42:56 +08:00
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);
2025-01-20 08:50:40 +08:00
console.log( 'queryAlbum albumType: ' + albumAsset.albumType +', Subtype: '+ albumAsset.albumSubtype
+', Name: '+ albumAsset.albumName +', Uri: '+ albumAsset.albumUri +', coverUri: '+ albumAsset.coverUri);
2024-05-09 13:42:56 +08:00
let predicates = new dataSharePredicates.DataSharePredicates();
let fetchOptions = {
fetchColumns: this.FILE_ASSET_FETCH_COLUMNS,
predicates: predicates
};
let photoFetchResult = await albumAsset.getAssets(fetchOptions);
2025-01-20 08:50:40 +08:00
let count = photoFetchResult.getCount();
2024-05-09 13:42:56 +08:00
console.log( 'baoyihu queryAlbum photoFetchResult count: ' + count);
var all_fileAsset = await photoFetchResult.getAllObjects();
2025-01-20 08:50:40 +08:00
// var uri_array=[]
2024-05-09 13:42:56 +08:00
2025-01-20 08:50:40 +08:00
for (let onfile of all_fileAsset)
2024-05-09 13:42:56 +08:00
{
2025-01-20 08:50:40 +08:00
console.log( 'baoyihu queryAlbum one uri : ' + onfile.uri);
2024-05-09 13:42:56 +08:00
firstUri = onfile.uri;
2025-01-20 08:50:40 +08:00
// uri_array.push(onfile.uri);
2024-05-09 13:42:56 +08:00
}
}
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;
2025-01-20 08:50:40 +08:00
console.log( 'baoyihu_ get one Album name : ' + albumAsset.albumName);
2024-05-09 13:42:56 +08:00
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();
/*
2025-01-20 08:50:40 +08:00
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);
}
* */
2024-05-09 13:42:56 +08:00
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();
}
}
}
2025-01-20 08:50:40 +08:00
}