1f6603c60Sopenharmony_ci/* 2f6603c60Sopenharmony_ci * Copyright (C) 2023-2024 Huawei Device Co., Ltd. 3f6603c60Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4f6603c60Sopenharmony_ci * you may not use this file except in compliance with the License. 5f6603c60Sopenharmony_ci * You may obtain a copy of the License at 6f6603c60Sopenharmony_ci * 7f6603c60Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8f6603c60Sopenharmony_ci * 9f6603c60Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10f6603c60Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11f6603c60Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12f6603c60Sopenharmony_ci * See the License for the specific language governing permissions and 13f6603c60Sopenharmony_ci * limitations under the License. 14f6603c60Sopenharmony_ci */ 15f6603c60Sopenharmony_ci 16f6603c60Sopenharmony_ciimport photoAccessHelper from '@ohos.file.photoAccessHelper'; 17f6603c60Sopenharmony_ciimport abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl'; 18f6603c60Sopenharmony_ciimport bundleManager from '@ohos.bundle.bundleManager'; 19f6603c60Sopenharmony_ciimport dataSharePredicates from '@ohos.data.dataSharePredicates'; 20f6603c60Sopenharmony_ciimport abilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry'; 21f6603c60Sopenharmony_ciimport fs, { ListFileOptions } from '@ohos.file.fs'; 22f6603c60Sopenharmony_ciimport fileuri from "@ohos.file.fileuri"; 23f6603c60Sopenharmony_ci 24f6603c60Sopenharmony_ciconst delegator = abilityDelegatorRegistry.getAbilityDelegator(); 25f6603c60Sopenharmony_ciconst phAccessHelper = photoAccessHelper.getPhotoAccessHelper(globalThis.abilityContext); 26f6603c60Sopenharmony_ciconst photoType = photoAccessHelper.PhotoType; 27f6603c60Sopenharmony_ciconst photoKeys = photoAccessHelper.PhotoKeys; 28f6603c60Sopenharmony_ciconst albumKeys = photoAccessHelper.AlbumKeys; 29f6603c60Sopenharmony_ciconst albumType = photoAccessHelper.AlbumType; 30f6603c60Sopenharmony_ciconst albumSubtype = photoAccessHelper.AlbumSubtype; 31f6603c60Sopenharmony_ciconst DEFAULT_SLEEP_TIME = 10; 32f6603c60Sopenharmony_ci 33f6603c60Sopenharmony_ciconst context = globalThis.abilityContext; 34f6603c60Sopenharmony_ciconst pathDir = context.filesDir; 35f6603c60Sopenharmony_ci 36f6603c60Sopenharmony_cilet validImageExt = ['.jpg'] 37f6603c60Sopenharmony_cilet validVideoExt = ['.mp4'] 38f6603c60Sopenharmony_cilet validVideoMpegExt = ['.mpeg'] 39f6603c60Sopenharmony_cilet validImageGifExt = ['.gif'] 40f6603c60Sopenharmony_cilet validImagePngExt = ['.png'] 41f6603c60Sopenharmony_ci 42f6603c60Sopenharmony_ciexport async function sleep(times = DEFAULT_SLEEP_TIME) : Promise<void> { 43f6603c60Sopenharmony_ci await new Promise(res => setTimeout(res, times)); 44f6603c60Sopenharmony_ci}; 45f6603c60Sopenharmony_ci 46f6603c60Sopenharmony_ciexport function fetchAllOption() : photoAccessHelper.FetchOptions { 47f6603c60Sopenharmony_ci const predicates = new dataSharePredicates.DataSharePredicates(); 48f6603c60Sopenharmony_ci const ops : photoAccessHelper.FetchOptions = { 49f6603c60Sopenharmony_ci fetchColumns: [], 50f6603c60Sopenharmony_ci predicates: predicates 51f6603c60Sopenharmony_ci }; 52f6603c60Sopenharmony_ci return ops; 53f6603c60Sopenharmony_ci}; 54f6603c60Sopenharmony_ci 55f6603c60Sopenharmony_ciexport function fetchOption(testNum, key, value) : photoAccessHelper.FetchOptions { 56f6603c60Sopenharmony_ci const predicates = new dataSharePredicates.DataSharePredicates(); 57f6603c60Sopenharmony_ci predicates.equalTo(key, value); 58f6603c60Sopenharmony_ci const ops : photoAccessHelper.FetchOptions = { 59f6603c60Sopenharmony_ci fetchColumns: [], 60f6603c60Sopenharmony_ci predicates: predicates 61f6603c60Sopenharmony_ci }; 62f6603c60Sopenharmony_ci console.info(`${testNum} queryOps: ${key} = ${value}`); 63f6603c60Sopenharmony_ci return ops; 64f6603c60Sopenharmony_ci}; 65f6603c60Sopenharmony_ci 66f6603c60Sopenharmony_ciexport function albumFetchOption(testNum, key, value) : photoAccessHelper.FetchOptions { 67f6603c60Sopenharmony_ci const predicates = new dataSharePredicates.DataSharePredicates(); 68f6603c60Sopenharmony_ci predicates.equalTo(key, value); 69f6603c60Sopenharmony_ci const ops : photoAccessHelper.FetchOptions = { 70f6603c60Sopenharmony_ci fetchColumns: [], 71f6603c60Sopenharmony_ci predicates: predicates 72f6603c60Sopenharmony_ci }; 73f6603c60Sopenharmony_ci console.info(`${testNum} queryOps: ${key} = ${value}`); 74f6603c60Sopenharmony_ci return ops; 75f6603c60Sopenharmony_ci}; 76f6603c60Sopenharmony_ci 77f6603c60Sopenharmony_ciexport function photoFetchOption(testNum, key, value) : photoAccessHelper.FetchOptions { 78f6603c60Sopenharmony_ci const predicates = new dataSharePredicates.DataSharePredicates(); 79f6603c60Sopenharmony_ci predicates.equalTo(key, value); 80f6603c60Sopenharmony_ci const ops : photoAccessHelper.FetchOptions = { 81f6603c60Sopenharmony_ci fetchColumns: [ 82f6603c60Sopenharmony_ci photoKeys.URI, 83f6603c60Sopenharmony_ci photoKeys.PHOTO_TYPE, 84f6603c60Sopenharmony_ci photoKeys.DISPLAY_NAME, 85f6603c60Sopenharmony_ci photoKeys.DATE_ADDED, 86f6603c60Sopenharmony_ci photoKeys.DATE_MODIFIED, 87f6603c60Sopenharmony_ci photoKeys.DURATION, 88f6603c60Sopenharmony_ci photoKeys.WIDTH, 89f6603c60Sopenharmony_ci photoKeys.HEIGHT, 90f6603c60Sopenharmony_ci photoKeys.DATE_TAKEN, 91f6603c60Sopenharmony_ci photoKeys.ORIENTATION, 92f6603c60Sopenharmony_ci photoKeys.FAVORITE, 93f6603c60Sopenharmony_ci photoKeys.SIZE, 94f6603c60Sopenharmony_ci photoKeys.TITLE, 95f6603c60Sopenharmony_ci photoKeys.POSITION, 96f6603c60Sopenharmony_ci photoKeys.DATE_TRASHED, 97f6603c60Sopenharmony_ci photoKeys.HIDDEN, 98f6603c60Sopenharmony_ci photoKeys.CAMERA_SHOT_KEY, 99f6603c60Sopenharmony_ci photoKeys.USER_COMMENT, 100f6603c60Sopenharmony_ci photoKeys.DATE_ADDED_MS, 101f6603c60Sopenharmony_ci photoKeys.DATE_MODIFIED_MS, 102f6603c60Sopenharmony_ci photoKeys.DYNAMIC_RANGE_TYPE, 103f6603c60Sopenharmony_ci photoKeys.COVER_POSITION, 104f6603c60Sopenharmony_ci photoKeys.BURST_KEY, 105f6603c60Sopenharmony_ci photoKeys.LCD_SIZE, 106f6603c60Sopenharmony_ci photoKeys.THM_SIZE, 107f6603c60Sopenharmony_ci 'all_exif', 108f6603c60Sopenharmony_ci ], 109f6603c60Sopenharmony_ci predicates: predicates 110f6603c60Sopenharmony_ci }; 111f6603c60Sopenharmony_ci console.info(`${testNum} queryOps: ${key} = ${value}`); 112f6603c60Sopenharmony_ci return ops; 113f6603c60Sopenharmony_ci}; 114f6603c60Sopenharmony_ci 115f6603c60Sopenharmony_ciexport async function getPermission(name = 'ohos.acts.multimedia.photoaccess') : Promise<void> { 116f6603c60Sopenharmony_ci try { 117f6603c60Sopenharmony_ci console.info('getPermission start', name); 118f6603c60Sopenharmony_ci let permissionState = new Map(); 119f6603c60Sopenharmony_ci const permissions: Array<Permissions> = [ 120f6603c60Sopenharmony_ci 'ohos.permission.MEDIA_LOCATION', 121f6603c60Sopenharmony_ci 'ohos.permission.READ_IMAGEVIDEO', 122f6603c60Sopenharmony_ci 'ohos.permission.WRITE_IMAGEVIDEO', 123f6603c60Sopenharmony_ci ]; 124f6603c60Sopenharmony_ci 125f6603c60Sopenharmony_ci const atManager = abilityAccessCtrl.createAtManager(); 126f6603c60Sopenharmony_ci const appFlags = bundleManager.ApplicationFlag.GET_APPLICATION_INFO_DEFAULT; 127f6603c60Sopenharmony_ci const userId = 100; 128f6603c60Sopenharmony_ci const appInfo = await bundleManager.getApplicationInfo(name, appFlags, userId); 129f6603c60Sopenharmony_ci const tokenID = appInfo.accessTokenId; 130f6603c60Sopenharmony_ci for (const permission of permissions) { 131f6603c60Sopenharmony_ci console.info('getPermission permission: ' + permission); 132f6603c60Sopenharmony_ci try { 133f6603c60Sopenharmony_ci await atManager.grantUserGrantedPermission(tokenID, permission, 1); 134f6603c60Sopenharmony_ci } catch (error) { 135f6603c60Sopenharmony_ci console.error(`getPermission ${permission} failed`); 136f6603c60Sopenharmony_ci } 137f6603c60Sopenharmony_ci permissionState.set(permission, await atManager.verifyAccessToken(tokenID, permission)); 138f6603c60Sopenharmony_ci } 139f6603c60Sopenharmony_ci permissionState.forEach((value, key, map) => { 140f6603c60Sopenharmony_ci if (value !== 0) { 141f6603c60Sopenharmony_ci console.info(`getPermission failed; permission: ${key}, state: ${value}`); 142f6603c60Sopenharmony_ci } 143f6603c60Sopenharmony_ci }); 144f6603c60Sopenharmony_ci console.info('getPermission end'); 145f6603c60Sopenharmony_ci } catch (error) { 146f6603c60Sopenharmony_ci console.error(`getPermission failed, error: ${error}`); 147f6603c60Sopenharmony_ci } 148f6603c60Sopenharmony_ci}; 149f6603c60Sopenharmony_ci 150f6603c60Sopenharmony_ciexport function isNum(value) : boolean { 151f6603c60Sopenharmony_ci return typeof value === 'number' && !isNaN(value); 152f6603c60Sopenharmony_ci}; 153f6603c60Sopenharmony_ci 154f6603c60Sopenharmony_ciexport function getAssetId(uri) : string { 155f6603c60Sopenharmony_ci const tag = 'Photo/'; 156f6603c60Sopenharmony_ci const index = uri.indexOf(tag); 157f6603c60Sopenharmony_ci let str = uri.substring(index + tag.length); 158f6603c60Sopenharmony_ci console.info(`getAssetId str: ${str}`); 159f6603c60Sopenharmony_ci return str; 160f6603c60Sopenharmony_ci} 161f6603c60Sopenharmony_ci 162f6603c60Sopenharmony_ciexport function getAlbumId(uri) : string { 163f6603c60Sopenharmony_ci const index = uri.lastIndexOf('/'); 164f6603c60Sopenharmony_ci let str = uri.substring(index + 1); 165f6603c60Sopenharmony_ci console.info(`getAlbumId str: ${str}`); 166f6603c60Sopenharmony_ci return str; 167f6603c60Sopenharmony_ci} 168f6603c60Sopenharmony_ci 169f6603c60Sopenharmony_ciexport function genRadomStr(len: number) : string { 170f6603c60Sopenharmony_ci const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; 171f6603c60Sopenharmony_ci let randomStr = ''; 172f6603c60Sopenharmony_ci for (let i = 0; i < len; i++) { 173f6603c60Sopenharmony_ci randomStr += chars.charAt(Math.floor(Math.random() * chars.length)); 174f6603c60Sopenharmony_ci } 175f6603c60Sopenharmony_ci return randomStr; 176f6603c60Sopenharmony_ci} 177f6603c60Sopenharmony_ci 178f6603c60Sopenharmony_ciexport async function createUserAlbum(testNum, albumName) : Promise<photoAccessHelper.Album> { 179f6603c60Sopenharmony_ci console.info(`${testNum} createUserAlbum albumName: ${albumName}`); 180f6603c60Sopenharmony_ci let album: photoAccessHelper.Album; 181f6603c60Sopenharmony_ci try { 182f6603c60Sopenharmony_ci const helper = photoAccessHelper.getPhotoAccessHelper(globalThis.abilityContext); 183f6603c60Sopenharmony_ci album = await helper.createAlbum(albumName); 184f6603c60Sopenharmony_ci console.info(`${testNum} createUserAlbum suc`); 185f6603c60Sopenharmony_ci } catch (error) { 186f6603c60Sopenharmony_ci console.error(`Failed to createUserAlbum! error: ${error}`); 187f6603c60Sopenharmony_ci throw error; 188f6603c60Sopenharmony_ci } 189f6603c60Sopenharmony_ci 190f6603c60Sopenharmony_ci return new Promise((resolve, reject) => { 191f6603c60Sopenharmony_ci resolve(album); 192f6603c60Sopenharmony_ci }); 193f6603c60Sopenharmony_ci} 194f6603c60Sopenharmony_ci 195f6603c60Sopenharmony_ciexport async function getFileAsset(testNum, fetchOps) : Promise<photoAccessHelper.PhotoAsset> { 196f6603c60Sopenharmony_ci let asset: photoAccessHelper.PhotoAsset; 197f6603c60Sopenharmony_ci try { 198f6603c60Sopenharmony_ci const helper = photoAccessHelper.getPhotoAccessHelper(globalThis.abilityContext); 199f6603c60Sopenharmony_ci let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset>; 200f6603c60Sopenharmony_ci fetchResult = await helper.getAssets(fetchOps); 201f6603c60Sopenharmony_ci console.info(`${testNum} getFileAsset fetchResult: ${fetchResult.getCount()}`); 202f6603c60Sopenharmony_ci asset = await fetchResult.getFirstObject(); 203f6603c60Sopenharmony_ci fetchResult.close(); 204f6603c60Sopenharmony_ci } catch (error) { 205f6603c60Sopenharmony_ci console.error(`${testNum} getFileAsset error: ${error}`); 206f6603c60Sopenharmony_ci throw error; 207f6603c60Sopenharmony_ci } 208f6603c60Sopenharmony_ci 209f6603c60Sopenharmony_ci return new Promise((resolve, reject) => { 210f6603c60Sopenharmony_ci resolve(asset); 211f6603c60Sopenharmony_ci }); 212f6603c60Sopenharmony_ci} 213f6603c60Sopenharmony_ci 214f6603c60Sopenharmony_ciexport function getFileAssetFetchResult() : photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> { 215f6603c60Sopenharmony_ci let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset>; 216f6603c60Sopenharmony_ci return fetchResult; 217f6603c60Sopenharmony_ci} 218f6603c60Sopenharmony_ci 219f6603c60Sopenharmony_ciexport function getAlbumFetchResult() : photoAccessHelper.FetchResult<photoAccessHelper.Album> { 220f6603c60Sopenharmony_ci let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album>; 221f6603c60Sopenharmony_ci return fetchResult; 222f6603c60Sopenharmony_ci} 223f6603c60Sopenharmony_ci 224f6603c60Sopenharmony_ciexport function checkUserAlbum(expect, testNum, album, expectedName, expectedCover) : void { 225f6603c60Sopenharmony_ci console.info(`${testNum} checkUserAlbum album.albumName: ${album.albumName}, expectedName: ${expectedName}`); 226f6603c60Sopenharmony_ci expect(album.albumType).assertEqual(albumType.USER); 227f6603c60Sopenharmony_ci expect(album.albumSubtype).assertEqual(albumSubtype.USER_GENERIC); 228f6603c60Sopenharmony_ci expect(album.albumName).assertEqual(expectedName); 229f6603c60Sopenharmony_ci if (expectedCover === '') { 230f6603c60Sopenharmony_ci expect(album.coverUri).assertEqual(''); 231f6603c60Sopenharmony_ci } else { 232f6603c60Sopenharmony_ci expect(album.coverUri).assertEqual(expectedCover); 233f6603c60Sopenharmony_ci } 234f6603c60Sopenharmony_ci expect(album.albumUri !== '').assertEqual(true); 235f6603c60Sopenharmony_ci expect(album.count).assertEqual(0); 236f6603c60Sopenharmony_ci} 237f6603c60Sopenharmony_ci 238f6603c60Sopenharmony_ciexport function checkSystemAlbum(expect, testNum, album, expectedSubType) : void { 239f6603c60Sopenharmony_ci try { 240f6603c60Sopenharmony_ci console.info(`${testNum} checkSystemAlbum expectedSubType: ${expectedSubType}`); 241f6603c60Sopenharmony_ci expect(album.albumType).assertEqual(albumType.SYSTEM); 242f6603c60Sopenharmony_ci expect(album.albumSubtype).assertEqual(expectedSubType); 243f6603c60Sopenharmony_ci expect(album.albumName).assertEqual(''); 244f6603c60Sopenharmony_ci expect(album.albumUri !== '').assertEqual(true); 245f6603c60Sopenharmony_ci } catch (error) { 246f6603c60Sopenharmony_ci console.error(`Failed to delete all user albums! error: ${error}`); 247f6603c60Sopenharmony_ci throw error; 248f6603c60Sopenharmony_ci } 249f6603c60Sopenharmony_ci} 250f6603c60Sopenharmony_ci 251f6603c60Sopenharmony_ciexport async function startAbility(bundleName: string, abilityName: string) : Promise<void> { 252f6603c60Sopenharmony_ci await delegator.executeShellCommand(`aa start -b ${bundleName} -a ${abilityName}`).then(result => { 253f6603c60Sopenharmony_ci console.info(`[picker] start abilityFinished: ${result}`); 254f6603c60Sopenharmony_ci }).catch(err => { 255f6603c60Sopenharmony_ci console.error(`[picker] start abilityFailed: ${err}`); 256f6603c60Sopenharmony_ci }); 257f6603c60Sopenharmony_ci} 258f6603c60Sopenharmony_ci 259f6603c60Sopenharmony_ciexport async function stopAbility(bundleName: string) : Promise<void> { 260f6603c60Sopenharmony_ci await delegator.executeShellCommand(`aa force-stop ${bundleName}`).then(result => { 261f6603c60Sopenharmony_ci console.info(`[picker] stop abilityFinished: ${result}`); 262f6603c60Sopenharmony_ci }).catch(err => { 263f6603c60Sopenharmony_ci console.error(`[picker] stop abilityFailed: ${err}`); 264f6603c60Sopenharmony_ci }); 265f6603c60Sopenharmony_ci} 266f6603c60Sopenharmony_ci 267f6603c60Sopenharmony_ciexport async function getFileNameArray() { 268f6603c60Sopenharmony_ci try{ 269f6603c60Sopenharmony_ci let listFileOption: ListFileOptions = { 270f6603c60Sopenharmony_ci recursion: true, 271f6603c60Sopenharmony_ci listNum: 0, 272f6603c60Sopenharmony_ci filter: { 273f6603c60Sopenharmony_ci suffix: [], 274f6603c60Sopenharmony_ci } 275f6603c60Sopenharmony_ci } 276f6603c60Sopenharmony_ci listFileOption.filter.suffix = validImageExt.concat(validVideoExt); 277f6603c60Sopenharmony_ci let nameArray = await fs.listFile(pathDir, listFileOption) 278f6603c60Sopenharmony_ci return nameArray; 279f6603c60Sopenharmony_ci } catch (err) { 280f6603c60Sopenharmony_ci console.error('getFileNameArray failed: ' + err); 281f6603c60Sopenharmony_ci } 282f6603c60Sopenharmony_ci} 283f6603c60Sopenharmony_ci 284f6603c60Sopenharmony_ciexport async function getAllFileNameArray() { 285f6603c60Sopenharmony_ci try{ 286f6603c60Sopenharmony_ci let listFileOption: ListFileOptions = { 287f6603c60Sopenharmony_ci recursion: true, 288f6603c60Sopenharmony_ci listNum: 0, 289f6603c60Sopenharmony_ci filter: { 290f6603c60Sopenharmony_ci suffix: [], 291f6603c60Sopenharmony_ci } 292f6603c60Sopenharmony_ci } 293f6603c60Sopenharmony_ci listFileOption.filter.suffix = validImageExt.concat(validVideoExt).concat(validVideoMpegExt).concat(validImageGifExt).concat(validImagePngExt); 294f6603c60Sopenharmony_ci let nameArray = await fs.listFile(pathDir, listFileOption) 295f6603c60Sopenharmony_ci return nameArray; 296f6603c60Sopenharmony_ci } catch (err) { 297f6603c60Sopenharmony_ci console.error('getFileNameArray failed: ' + err); 298f6603c60Sopenharmony_ci } 299f6603c60Sopenharmony_ci} 300f6603c60Sopenharmony_ci 301f6603c60Sopenharmony_ciexport async function pushCreateAsset(names: Array<string>){ 302f6603c60Sopenharmony_ci console.info('pushCreateAsset start') 303f6603c60Sopenharmony_ci let successNum = 0; 304f6603c60Sopenharmony_ci try{ 305f6603c60Sopenharmony_ci console.info('pushCreateAsset name: ' + names) 306f6603c60Sopenharmony_ci let photoType: photoAccessHelper.PhotoType; 307f6603c60Sopenharmony_ci let resourceType: photoAccessHelper.ResourceType; 308f6603c60Sopenharmony_ci let fileNames: string[] = await getFileNameArray(); 309f6603c60Sopenharmony_ci console.info('pushCreateAsset rawFiles number: ' + fileNames.length); 310f6603c60Sopenharmony_ci for(let i = 0; i < fileNames.length; i++) { 311f6603c60Sopenharmony_ci let fileName = fileNames[i]; 312f6603c60Sopenharmony_ci let filePath = pathDir + '/' + fileName; 313f6603c60Sopenharmony_ci let fileUri = fileuri.getUriFromPath(filePath); 314f6603c60Sopenharmony_ci let rawExtension: string = fileName.split('.')[1]; 315f6603c60Sopenharmony_ci for (let j = 0; j < names.length; j++) { 316f6603c60Sopenharmony_ci let name = names[j]; 317f6603c60Sopenharmony_ci if (fileName.includes('error')) continue 318f6603c60Sopenharmony_ci let extension: string = name.split('.')[1]; 319f6603c60Sopenharmony_ci if (rawExtension === extension) { 320f6603c60Sopenharmony_ci let options: photoAccessHelper.CreateOptions = { 321f6603c60Sopenharmony_ci title: name.split('.')[0] 322f6603c60Sopenharmony_ci } 323f6603c60Sopenharmony_ci if (validImageExt.includes(('.' + extension))) { 324f6603c60Sopenharmony_ci photoType = photoAccessHelper.PhotoType.IMAGE; 325f6603c60Sopenharmony_ci resourceType = photoAccessHelper.ResourceType.IMAGE_RESOURCE; 326f6603c60Sopenharmony_ci } else { 327f6603c60Sopenharmony_ci photoType = photoAccessHelper.PhotoType.VIDEO; 328f6603c60Sopenharmony_ci resourceType = photoAccessHelper.ResourceType.VIDEO_RESOURCE; 329f6603c60Sopenharmony_ci } 330f6603c60Sopenharmony_ci let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = photoAccessHelper.MediaAssetChangeRequest.createAssetRequest(globalThis.abilityContext, photoType, extension, options); 331f6603c60Sopenharmony_ci assetChangeRequest.addResource(resourceType, fileUri); 332f6603c60Sopenharmony_ci await phAccessHelper.applyChanges(assetChangeRequest); 333f6603c60Sopenharmony_ci console.info(`pushCreateAsset ${name} create success`) 334f6603c60Sopenharmony_ci successNum++; 335f6603c60Sopenharmony_ci } 336f6603c60Sopenharmony_ci } 337f6603c60Sopenharmony_ci } 338f6603c60Sopenharmony_ci console.info('Push_createAsset successfully fileNumber: ' + successNum); 339f6603c60Sopenharmony_ci }catch(err){ 340f6603c60Sopenharmony_ci console.error('Push_createAsset push resource failed: ' + err) 341f6603c60Sopenharmony_ci return; 342f6603c60Sopenharmony_ci } 343f6603c60Sopenharmony_ci} 344f6603c60Sopenharmony_ci 345f6603c60Sopenharmony_ciexport async function pushCreateAssetSingle(names: Array<string>){ 346f6603c60Sopenharmony_ci console.info('pushCreateAssetSingle start') 347f6603c60Sopenharmony_ci let successNum = 0; 348f6603c60Sopenharmony_ci try{ 349f6603c60Sopenharmony_ci console.info('pushCreateAssetSingle name: ' + names) 350f6603c60Sopenharmony_ci let photoType: photoAccessHelper.PhotoType; 351f6603c60Sopenharmony_ci let resourceType: photoAccessHelper.ResourceType; 352f6603c60Sopenharmony_ci let fileNames: string[] = await getAllFileNameArray(); 353f6603c60Sopenharmony_ci for (let i = 0; i < fileNames.length; i++) { 354f6603c60Sopenharmony_ci let fileName = fileNames[i]; 355f6603c60Sopenharmony_ci let filePath = pathDir + '/' + fileName; 356f6603c60Sopenharmony_ci let fileUri = fileuri.getUriFromPath(filePath); 357f6603c60Sopenharmony_ci let rawExtension: string = fileName.split('.')[1]; 358f6603c60Sopenharmony_ci for (let j = 0; j < names.length; j++) { 359f6603c60Sopenharmony_ci let name = names[j]; 360f6603c60Sopenharmony_ci if(fileName == '/01.jpg' || fileName == '/01.mp4') continue 361f6603c60Sopenharmony_ci let extension: string = name.split('.')[1]; 362f6603c60Sopenharmony_ci if (rawExtension === extension) { 363f6603c60Sopenharmony_ci let options: photoAccessHelper.CreateOptions = { 364f6603c60Sopenharmony_ci title: name.split('.')[0] 365f6603c60Sopenharmony_ci } 366f6603c60Sopenharmony_ci if (validImageExt.concat(validImageGifExt).concat(validImagePngExt).includes(('.' + extension))) { 367f6603c60Sopenharmony_ci photoType = photoAccessHelper.PhotoType.IMAGE; 368f6603c60Sopenharmony_ci resourceType = photoAccessHelper.ResourceType.IMAGE_RESOURCE; 369f6603c60Sopenharmony_ci } else { 370f6603c60Sopenharmony_ci photoType = photoAccessHelper.PhotoType.VIDEO; 371f6603c60Sopenharmony_ci resourceType = photoAccessHelper.ResourceType.VIDEO_RESOURCE; 372f6603c60Sopenharmony_ci } 373f6603c60Sopenharmony_ci let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = photoAccessHelper.MediaAssetChangeRequest.createAssetRequest(globalThis.abilityContext, photoType, extension, options); 374f6603c60Sopenharmony_ci assetChangeRequest.addResource(resourceType, fileUri); 375f6603c60Sopenharmony_ci await phAccessHelper.applyChanges(assetChangeRequest); 376f6603c60Sopenharmony_ci console.info(`pushCreateAssetSingle ${name} create success`) 377f6603c60Sopenharmony_ci successNum++; 378f6603c60Sopenharmony_ci } 379f6603c60Sopenharmony_ci } 380f6603c60Sopenharmony_ci } 381f6603c60Sopenharmony_ci console.info('Push_createAsset successfully fileNumber: ' + successNum); 382f6603c60Sopenharmony_ci }catch(err){ 383f6603c60Sopenharmony_ci console.error('Push_createAsset push resource failed: ' + err) 384f6603c60Sopenharmony_ci return; 385f6603c60Sopenharmony_ci } 386f6603c60Sopenharmony_ci} 387f6603c60Sopenharmony_ci 388f6603c60Sopenharmony_ciexport function createSandboxFileUri(extension) { 389f6603c60Sopenharmony_ci let pathDir = globalThis.abilityContext.filesDir; 390f6603c60Sopenharmony_ci let path = pathDir + '/test' + new Date().getTime() + '.' + extension; 391f6603c60Sopenharmony_ci fs.openSync(path, fs.OpenMode.CREATE) 392f6603c60Sopenharmony_ci return fileuri.getUriFromPath(path); 393f6603c60Sopenharmony_ci} 394f6603c60Sopenharmony_ci 395f6603c60Sopenharmony_ciexport async function getBurstKey(testNum: string, fetchOps: photoAccessHelper.FetchOptions): Promise<string | number> { 396f6603c60Sopenharmony_ci let burstKey: string | number | undefined = -1; 397f6603c60Sopenharmony_ci try { 398f6603c60Sopenharmony_ci let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOps); 399f6603c60Sopenharmony_ci if (fetchResult === undefined) { 400f6603c60Sopenharmony_ci console.error(`${testNum} :: getBurstKey :: fetchResult is undefined !`); 401f6603c60Sopenharmony_ci return burstKey; 402f6603c60Sopenharmony_ci } 403f6603c60Sopenharmony_ci let photoAsset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject(); 404f6603c60Sopenharmony_ci if (photoAsset === undefined) { 405f6603c60Sopenharmony_ci console.error(`${testNum} :: getBurstKey :: photoAsset is undefined !`); 406f6603c60Sopenharmony_ci return burstKey; 407f6603c60Sopenharmony_ci } 408f6603c60Sopenharmony_ci burstKey = photoAsset.get(photoKeys.BURST_KEY).toString(); 409f6603c60Sopenharmony_ci console.log(`${testNum} :: get burstKey success, burstKey is ${burstKey}`); 410f6603c60Sopenharmony_ci return burstKey; 411f6603c60Sopenharmony_ci } catch (error) { 412f6603c60Sopenharmony_ci console.error(`${testNum} :: getBurstKey failed, msg is ${error}`); 413f6603c60Sopenharmony_ci return burstKey; 414f6603c60Sopenharmony_ci } 415f6603c60Sopenharmony_ci} 416f6603c60Sopenharmony_ci 417f6603c60Sopenharmony_ciexport { 418f6603c60Sopenharmony_ci photoType, 419f6603c60Sopenharmony_ci photoKeys, 420f6603c60Sopenharmony_ci albumKeys, 421f6603c60Sopenharmony_ci albumType, 422f6603c60Sopenharmony_ci albumSubtype, 423f6603c60Sopenharmony_ci};