mirror of
https://github.com/openharmony/applications_filepicker.git
synced 2026-07-01 22:33:59 -04:00
@@ -19,21 +19,18 @@ import abilityAccessCtrl from '@ohos.abilityAccessCtrl'
|
||||
import { Permissions } from '@ohos.abilityAccessCtrl'
|
||||
import FileShare from '@ohos.fileshare'
|
||||
import wantConstant from '@ohos.app.ability.wantConstant'
|
||||
import ErrorCodeConst from '../constants/ErrorCodeConst'
|
||||
import MediaLibrary from '@ohos.multimedia.mediaLibrary'
|
||||
import { FILE_MANAGER_PREFERENCES, FILE_SUFFIX, SELECT_MODE } from '../constants/Constant'
|
||||
import StringUtil from './StringUtil'
|
||||
import { ArrayUtil } from './ArrayUtil'
|
||||
import { getPreferences } from './PreferencesUtil'
|
||||
import { ability, Want } from '@kit.AbilityKit'
|
||||
import { StartModeOptions } from '../model/StartModeOptions'
|
||||
import ctx from '@ohos.app.ability.common';
|
||||
import { PickerWindowType } from '../constants/FilePickerItems'
|
||||
import { photoAccessHelper } from '@kit.MediaLibraryKit'
|
||||
|
||||
const TAG = 'AbilityCommonUtil'
|
||||
|
||||
const BUNDLE_NAME = 'com.ohos.filepicker'
|
||||
let mediaLibrary: MediaLibrary.MediaLibrary = null
|
||||
let photoManageHelper: photoAccessHelper.PhotoAccessHelper = null
|
||||
|
||||
/**
|
||||
* picker对外返回的响应码
|
||||
@@ -103,7 +100,7 @@ namespace AbilityCommonUtil {
|
||||
*/
|
||||
export function init(): Promise<void[]> {
|
||||
const fileAccessHelperPromise = createFileAccessHelper();
|
||||
getMediaLibrary();
|
||||
getPhotoManageHelper();
|
||||
const getRequestPermission = requestPermission();
|
||||
const initData = initLastSelectPath();
|
||||
return Promise.all([fileAccessHelperPromise, getRequestPermission, initData]);
|
||||
@@ -383,23 +380,23 @@ namespace AbilityCommonUtil {
|
||||
/**
|
||||
* 获取媒体库对象实例的统一接口
|
||||
*/
|
||||
export function getMediaLibrary(): MediaLibrary.MediaLibrary {
|
||||
if (!mediaLibrary) {
|
||||
export function getPhotoManageHelper(): photoAccessHelper.PhotoAccessHelper {
|
||||
if (!photoManageHelper) {
|
||||
try {
|
||||
mediaLibrary = MediaLibrary.getMediaLibrary(globalThis.abilityContext)
|
||||
photoManageHelper = photoAccessHelper.getPhotoAccessHelper(globalThis.abilityContext)
|
||||
} catch (error) {
|
||||
Logger.e(TAG, 'getMediaLibrary fail, error:' + JSON.stringify(error))
|
||||
Logger.e(TAG, 'getPhotoManageHelper fail, error:' + JSON.stringify(error))
|
||||
}
|
||||
}
|
||||
return mediaLibrary
|
||||
return photoManageHelper
|
||||
}
|
||||
|
||||
export function releaseMediaLibrary(): void {
|
||||
if (!mediaLibrary) {
|
||||
export function releasePhotoManageHelper(): void {
|
||||
if (!photoManageHelper) {
|
||||
try {
|
||||
mediaLibrary.release()
|
||||
photoManageHelper.release()
|
||||
} catch (error) {
|
||||
Logger.e(TAG, 'releaseMediaLibrary fail, error: ' + JSON.stringify(error))
|
||||
Logger.e(TAG, 'releasePhotoManageHelper fail, error: ' + JSON.stringify(error))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,14 +18,11 @@ import prompt from '@ohos.prompt';
|
||||
import { getResourceString } from './Tools';
|
||||
import { MILLISECOND, FILENAME_REGEXP } from '../constants/Constant';
|
||||
import Logger from '../log/Logger';
|
||||
import MediaLibrary from '@ohos.multimedia.mediaLibrary';
|
||||
|
||||
const TAG = 'commonUtil';
|
||||
|
||||
let mediaLibrary: MediaLibrary.MediaLibrary = null;
|
||||
|
||||
export const toast = (text: string | Resource, time = MILLISECOND.ONE_SECOND) => {
|
||||
let resourceString = undefined;
|
||||
let resourceString: string | undefined = undefined;
|
||||
if (typeof text !== 'string') {
|
||||
resourceString = getResourceString(text);
|
||||
} else {
|
||||
|
||||
@@ -19,9 +19,9 @@ import ObjectUtil from './ObjectUtil';
|
||||
import Logger from '../log/Logger';
|
||||
import StringUtil from './StringUtil';
|
||||
import { FILENAME_MAX_LENGTH, RENAME_CONNECT_CHARACTER } from '../constants/Constant';
|
||||
import MediaLibrary from '@ohos.multimedia.mediaLibrary';
|
||||
import fs from '@ohos.file.fs';
|
||||
import FileUri from '@ohos.file.fileuri';
|
||||
import { photoAccessHelper } from '@kit.MediaLibraryKit';
|
||||
|
||||
const TAG = 'FileUtil';
|
||||
|
||||
@@ -213,12 +213,9 @@ export class FileUtil {
|
||||
return { code: code, uri: uri };
|
||||
}
|
||||
|
||||
public static async hardDelete(uri: string, mediaLibrary: MediaLibrary.MediaLibrary): Promise<boolean> {
|
||||
if (ObjectUtil.isNullOrUndefined(mediaLibrary)) {
|
||||
return false;
|
||||
}
|
||||
public static async hardDelete(uri: string): Promise<boolean> {
|
||||
try {
|
||||
await mediaLibrary.deleteAsset(uri);
|
||||
await photoAccessHelper.MediaAssetChangeRequest.deleteAssets(globalThis.abilityContext , [uri]);
|
||||
return true;
|
||||
} catch (e) {
|
||||
Logger.e(TAG, 'hardDelete error: ' + JSON.stringify(e));
|
||||
|
||||
@@ -13,19 +13,18 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import MediaLibrary from '@ohos.multimedia.mediaLibrary';
|
||||
import { MILLISECOND } from '../../base/constants/Constant';
|
||||
import { formatSuffix, getResourceString } from '../../base/utils/Tools';
|
||||
import DateTimeUtil from '../../base/utils/DateTimeUtil';
|
||||
import { FileMimeTypeUtil } from '../../base/utils/FileMimeTypeUtil';
|
||||
import LanguageUtil from '../../base/utils/LanguageUtil';
|
||||
import ErrorCodeConst from '../../base/constants/ErrorCodeConst';
|
||||
import { MimeType } from './MimeType';
|
||||
import { THUMBNAIL_SIZE } from '../../base/constants/UiConstant';
|
||||
import { BasicDataSource } from './BasicDataSource';
|
||||
import Logger from '../../base/log/Logger';
|
||||
import AbilityCommonUtil, { ResultCodePicker } from '../../base/utils/AbilityCommonUtil';
|
||||
import { StartModeOptions } from '../../base/model/StartModeOptions';
|
||||
import { photoAccessHelper } from '@kit.MediaLibraryKit';
|
||||
import { dataSharePredicates } from '@kit.ArkData';
|
||||
|
||||
const TAG = 'FileAssetModel';
|
||||
|
||||
@@ -203,12 +202,12 @@ function sortFileAssetList(dataList) {
|
||||
* 媒体库查询条件类
|
||||
*/
|
||||
export class MediaFetchOptions {
|
||||
public selections: string = MediaLibrary.FileKey.MEDIA_TYPE + '=?';
|
||||
public selections: string = photoAccessHelper.PhotoKeys.PHOTO_TYPE + '=?';
|
||||
public selectionArgs: string[] = [];
|
||||
public order: string = MediaLibrary.FileKey.DATE_MODIFIED + ' DESC';
|
||||
public uri: string;
|
||||
public networkId: string;
|
||||
public extendArgs: string;
|
||||
public order: string = photoAccessHelper.PhotoKeys.DATE_MODIFIED + ' DESC';
|
||||
public uri: string = '';
|
||||
public networkId: string = '';
|
||||
public extendArgs: string = '';
|
||||
|
||||
constructor(mediaTypeArg: string = '') {
|
||||
if (!mediaTypeArg) {
|
||||
@@ -230,7 +229,7 @@ export class MediaFetchOptions {
|
||||
* @param selection 要查询的关键字
|
||||
* @param selectionArg 要查询的值
|
||||
*/
|
||||
addSelection(selection: MediaLibrary.FileKey, selectionArg: string) {
|
||||
addSelection(selection: photoAccessHelper.PhotoKeys, selectionArg: string) {
|
||||
if (this.selections.length) {
|
||||
this.selections += ` AND ${selection} = ? `;
|
||||
} else {
|
||||
@@ -245,65 +244,46 @@ export class MediaFetchOptions {
|
||||
* @param mediaFetchOptions 媒体库查询条件
|
||||
* @return 文件列表
|
||||
*/
|
||||
export function getMediaFileAssets(mediaFetchOptions: MediaFetchOptions): Promise<FileAssetModel[]> {
|
||||
const mediaLibrary = AbilityCommonUtil.getMediaLibrary();
|
||||
if (!mediaLibrary) {
|
||||
return Promise.resolve([]);
|
||||
export async function getMediaFileDuration(mediaFetchOptions: MediaFetchOptions): Promise<number> {
|
||||
const photoManageHelper: photoAccessHelper.PhotoAccessHelper = AbilityCommonUtil.getPhotoManageHelper();
|
||||
let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
|
||||
let fetchOptions: photoAccessHelper.FetchOptions = {
|
||||
fetchColumns: mediaFetchOptions.selectionArgs,
|
||||
predicates: predicates
|
||||
};
|
||||
if (!photoManageHelper) {
|
||||
return 0;
|
||||
}
|
||||
return mediaLibrary.getFileAssets(mediaFetchOptions).then((fetchFileResult: MediaLibrary.FetchFileResult) => {
|
||||
return fetchFileResult.getAllObject().then((fileAssetList: MediaLibrary.FileAsset[]) => {
|
||||
let newFileAssetList = [];
|
||||
fileAssetList.forEach(fileAsset => {
|
||||
newFileAssetList.push(new FileAssetModel(fileAsset));
|
||||
});
|
||||
newFileAssetList = addSortLabel(newFileAssetList);
|
||||
newFileAssetList = sortFileAssetList(newFileAssetList);
|
||||
return newFileAssetList;
|
||||
}).catch((err) => {
|
||||
// 媒体库查询为空code返回3
|
||||
if (err.code === ErrorCodeConst.FILE_ACCESS.GET_MEDIAFILE_NULL) {
|
||||
Logger.e(TAG, 'no media file');
|
||||
return [];
|
||||
}
|
||||
return Promise.reject(err);
|
||||
}).finally(() => {
|
||||
fetchFileResult.close();
|
||||
})
|
||||
}).catch((err) => {
|
||||
return Promise.reject(err);
|
||||
let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await photoManageHelper.getAssets(fetchOptions)
|
||||
let photoAsset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();
|
||||
let duration: photoAccessHelper.MemberType = photoAsset.get(photoAccessHelper.PhotoKeys.DURATION);
|
||||
return Number(duration) ?? 0;
|
||||
}
|
||||
|
||||
export function getDurationByUri(mediaType: photoAccessHelper.PhotoType, uri: string): Promise<number> {
|
||||
const option = new MediaFetchOptions(mediaType.toString());
|
||||
option.setUri(uri);
|
||||
return getMediaFileDuration(option).then((res: number) => {
|
||||
return res;
|
||||
}).catch(() => {
|
||||
return 0;
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据文件名(后缀)判断媒体类型
|
||||
* @param fileName 文件名
|
||||
* @return 媒体类型MediaLibrary.MediaType
|
||||
* @return 媒体类型photoAccessHelper.PhotoType
|
||||
*/
|
||||
export function getMediaType(fileName: string): MediaLibrary.MediaType {
|
||||
export function getMediaType(fileName: string): photoAccessHelper.PhotoType {
|
||||
const mimeType = FileMimeTypeUtil.getFileMimeType(fileName);
|
||||
if (mimeType.isImage()) {
|
||||
return MediaLibrary.MediaType.IMAGE;
|
||||
return photoAccessHelper.PhotoType.IMAGE;
|
||||
} else if (mimeType.isVideo()) {
|
||||
return MediaLibrary.MediaType.VIDEO;
|
||||
} else if (mimeType.isAudio()) {
|
||||
return MediaLibrary.MediaType.AUDIO;
|
||||
return photoAccessHelper.PhotoType.VIDEO;
|
||||
} else {
|
||||
return MediaLibrary.MediaType.FILE;
|
||||
}
|
||||
}
|
||||
|
||||
export function getDurationByUri(mediaType: MediaLibrary.MediaType, uri: string): Promise<number> {
|
||||
const option = new MediaFetchOptions(mediaType.toString());
|
||||
option.setUri(uri);
|
||||
return getMediaFileAssets(option).then((res) => {
|
||||
if (res && res.length) {
|
||||
return res[0].duration;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}).catch(() => {
|
||||
return 0;
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -52,7 +52,7 @@ export default class MainAbility extends UIAbility {
|
||||
|
||||
onDestroy() {
|
||||
Logger.i(TAG, 'onDestroy')
|
||||
AbilityCommonUtil.releaseMediaLibrary()
|
||||
AbilityCommonUtil.releasePhotoManageHelper()
|
||||
}
|
||||
|
||||
onWindowStageCreate(windowStage: window.WindowStage) {
|
||||
|
||||
@@ -22,12 +22,12 @@ import { SYSTEM_BAR_COLOR } from '../base/constants/UiConstant';
|
||||
import StringUtil from '../base/utils/StringUtil';
|
||||
import { FileUtil } from '../base/utils/FileUtil';
|
||||
import ObjectUtil from '../base/utils/ObjectUtil';
|
||||
import MediaLibrary from '@ohos.multimedia.mediaLibrary';
|
||||
import fileAccess from '@ohos.file.fileAccess';
|
||||
import { ArrayUtil } from '../base/utils/ArrayUtil';
|
||||
import { UiUtil } from '../base/utils/UiUtil';
|
||||
import { StartModeOptions } from '../base/model/StartModeOptions';
|
||||
import { FilePickerUtil } from '../base/utils/FilePickerUtil';
|
||||
import { photoAccessHelper } from '@kit.MediaLibraryKit';
|
||||
|
||||
const TAG = 'PathSelector';
|
||||
let storage = LocalStorage.getShared();
|
||||
@@ -123,20 +123,15 @@ struct PathSelector {
|
||||
Logger.i(TAG, 'saveFiles err: ' + result.err.code);
|
||||
// 失败
|
||||
resultErr = { code: result.err.code, message: result.err.message };
|
||||
let mediaLibrary;
|
||||
try {
|
||||
mediaLibrary = MediaLibrary.getMediaLibrary(globalThis.abilityContext);
|
||||
} catch (error) {
|
||||
Logger.e(TAG, 'getMediaLibrary fail, error:' + JSON.stringify(error));
|
||||
}
|
||||
if (ObjectUtil.isNullOrUndefined(mediaLibrary)) {
|
||||
let photoManageHelper: photoAccessHelper.PhotoAccessHelper = AbilityCommonUtil.getPhotoManageHelper();
|
||||
if (ObjectUtil.isNullOrUndefined(photoManageHelper)) {
|
||||
break;
|
||||
}
|
||||
for (let i = 0; i < successArr.length; i++) {
|
||||
await FileUtil.hardDelete(successArr[i], mediaLibrary);
|
||||
await FileUtil.hardDelete(successArr[i]);
|
||||
}
|
||||
try {
|
||||
mediaLibrary.release();
|
||||
photoManageHelper.release();
|
||||
} catch (e) {
|
||||
Logger.e(TAG, 'mediaLibrary close error');
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@ import { FileUtil } from '../../../base/utils/FileUtil';
|
||||
import fileAccess from '@ohos.file.fileAccess';
|
||||
import { StartModeOptions } from '../../../base/model/StartModeOptions';
|
||||
import { FilePickerUtil } from '../../../base/utils/FilePickerUtil';
|
||||
import { photoAccessHelper } from '@kit.MediaLibraryKit';
|
||||
|
||||
const TAG = 'myPhone';
|
||||
let storage = LocalStorage.getShared();
|
||||
@@ -172,10 +173,10 @@ struct MyPhone {
|
||||
this.getVideoAudioDuration(fileList);
|
||||
}
|
||||
|
||||
async getVideoAudioDuration(fileList) {
|
||||
async getVideoAudioDuration(fileList: FilesData[]) {
|
||||
const videoAudioList = fileList.filter(item => item.mimeTypeObj.isVideo() || item.mimeTypeObj.isAudio());
|
||||
for (let item of videoAudioList) {
|
||||
const mediaType = getMediaType(item.fileName);
|
||||
const mediaType: photoAccessHelper.PhotoType = getMediaType(item.fileName);
|
||||
await getDurationByUri(mediaType, item.uri).then((duration) => {
|
||||
item.duration = duration;
|
||||
let index = this.fileListSource.getIndex(item.uri);
|
||||
|
||||
Reference in New Issue
Block a user