1/* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16const medialibrary = requireInternal('multimedia.mediaLibrary'); 17const featureAbility = requireNapi('ability.featureAbility'); 18const ARGS_ONE = 1; 19const ARGS_TWO = 2; 20 21async function startMediaSelect (option, asyncCallback) { 22 console.log('MediaLibrary startMediaSelectInner param num ' + arguments.length); 23 console.log('MediaLibrary startMediaSelectInner param ' + JSON.stringify(option)); 24 const select = 'singleselect'; 25 const parameter = { 26 want: 27 { 28 action: 'ohos.want.action.photoPicker', 29 type: select, 30 parameters: { 31 uri: select, 32 filterMediaType: 'FILTER_MEDIA_TYPE_ALL', 33 maxSelectCount: 1 34 } 35 }, 36 action: 'ohos.want.action.photoPicker', 37 type: select, 38 parameters: { 39 uri: select, 40 filterMediaType: 'FILTER_MEDIA_TYPE_ALL', 41 maxSelectCount: 1 42 } 43 }; 44 if (option !== undefined && typeof option === 'object') { 45 if (option.count !== undefined && option.count > 1) { 46 parameter.want.type = 'multipleselect'; 47 parameter.want.parameters.uri = 'multipleselect'; 48 parameter.want.parameters.maxSelectCount = option.count; 49 parameter.type = 'multipleselect'; 50 parameter.parameters.uri = 'multipleselect'; 51 parameter.parameters.maxSelectCount = option.count; 52 } 53 if (option.type !== undefined) { 54 parameter.want.parameters.filterMediaType = option.type; 55 parameter.parameters.filterMediaType = option.type; 56 } 57 } 58 if (arguments.length === ARGS_TWO && typeof asyncCallback !== 'function') { 59 console.log('MediaLibrary startMediaSelectInner callback invalid'); 60 throw Error('invalid callback'); 61 } 62 console.log('MediaLibrary startMediaSelectInner parameter ' + JSON.stringify(parameter)); 63 const result = await featureAbility.startAbilityForResult(parameter); 64 console.log('MediaLibrary startMediaSelectInner result ' + JSON.stringify(result)); 65 const uri = result.want.parameters['select-item-list']; 66 if (arguments.length === ARGS_TWO && typeof asyncCallback === 'function') { 67 console.log('MediaLibrary startMediaSelectInner callback ' + uri); 68 return asyncCallback(result.resultCode, uri); 69 } 70 return new Promise((resolve, reject) => { 71 if (result.resultCode === 0) { 72 console.log('MediaLibrary startMediaSelectInner promise ' + uri); 73 resolve(uri); 74 } else { 75 console.log('MediaLibrary startMediaSelectInner err ' + result.resultCode); 76 reject(result.resultCode); 77 } 78 }); 79} 80 81function getMediaLibrary (context) { 82 const media = medialibrary.getMediaLibrary(context); 83 console.log('MediaLibrary getMediaLibrary inner '); 84 if (media !== undefined) { 85 console.log('MediaLibrary getMediaLibrary inner add startMediaSelect'); 86 media.startMediaSelect = startMediaSelect; 87 } 88 return media; 89} 90 91function getMediaLibraryAsync(context, asyncCallback) { 92 console.log('MediaLibrary getMediaLibraryAsync js caller '); 93 if (context === undefined) { 94 console.log('MediaLibrary getMediaLibraryAsync context invalid'); 95 throw Error('invalid context'); 96 } 97 if (arguments.length === ARGS_ONE) { 98 return medialibrary.getMediaLibraryAsync(context) 99 .then((media) => { 100 console.log('MediaLibrary getMediaLibraryAsync js caller add startMediaSelect'); 101 media.startMediaSelect = startMediaSelect; 102 return media; 103 }) 104 .catch((err) => { 105 console.log('MediaLibrary getMediaLibraryAsync js caller err ' + err); 106 throw Error(err); 107 }); 108 } else if (arguments.length === ARGS_TWO && typeof asyncCallback === 'function') { 109 medialibrary.getMediaLibraryAsync(context, (err, media) => { 110 console.log('MediaLibrary getMediaLibraryAsync js caller callback ' + err); 111 if (err) { 112 asyncCallback(err); 113 } else { 114 if (media !== undefined) { 115 console.log('MediaLibrary getMediaLibraryAsync js caller add startMediaSelect'); 116 media.startMediaSelect = startMediaSelect; 117 } 118 asyncCallback(err, media); 119 } 120 }); 121 } else { 122 console.log('MediaLibrary getMediaLibraryAsync js caller param invalid'); 123 throw Error('invalid param'); 124 } 125 return undefined; 126} 127 128function getScannerInstance (context) { 129 console.log('MediaLibrary getScannerInstance js caller '); 130 const instance = medialibrary.getScannerInstance(context); 131 return instance; 132} 133 134export default { 135 getMediaLibrary, 136 getMediaLibraryAsync, 137 getScannerInstance, 138 MediaType: medialibrary.MediaType, 139 FileKey: medialibrary.FileKey, 140 DirectoryType: medialibrary.DirectoryType, 141 PrivateAlbumType: medialibrary.PrivateAlbumType 142}; 143