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 21function getParameter() { 22 const select = 'singleselect'; 23 const parameter = { 24 want: 25 { 26 action: 'ohos.want.action.photoPicker', 27 type: select, 28 parameters: { 29 uri: select, 30 filterMediaType: 'FILTER_MEDIA_TYPE_ALL', 31 maxSelectCount: 1 32 } 33 }, 34 action: 'ohos.want.action.photoPicker', 35 type: select, 36 parameters: { 37 uri: select, 38 filterMediaType: 'FILTER_MEDIA_TYPE_ALL', 39 maxSelectCount: 1 40 } 41 }; 42 return parameter; 43} 44 45async function startMediaSelect(option, asyncCallback) { 46 console.log('MediaLibrary startMediaSelectInner param num ' + arguments.length); 47 console.log('MediaLibrary startMediaSelectInner param ' + JSON.stringify(option)); 48 49 const parameter = getParameter(); 50 51 if (option !== undefined && typeof option === 'object') { 52 if (option.count !== undefined && option.count > 1) { 53 parameter.want.type = 'multipleselect'; 54 parameter.want.parameters.uri = 'multipleselect'; 55 parameter.want.parameters.maxSelectCount = option.count; 56 parameter.type = 'multipleselect'; 57 parameter.parameters.uri = 'multipleselect'; 58 parameter.parameters.maxSelectCount = option.count; 59 } 60 if (option.type !== undefined) { 61 parameter.want.parameters.filterMediaType = option.type; 62 parameter.parameters.filterMediaType = option.type; 63 } 64 } 65 if (arguments.length === ARGS_TWO && typeof asyncCallback !== 'function') { 66 console.log('MediaLibrary startMediaSelectInner callback invalid'); 67 throw Error('invalid callback'); 68 } 69 console.log('MediaLibrary startMediaSelectInner parameter ' + JSON.stringify(parameter)); 70 const result = await featureAbility.startAbilityForResult(parameter); 71 console.log('MediaLibrary startMediaSelectInner result ' + JSON.stringify(result)); 72 const uri = result.want.parameters['select-item-list']; 73 if (arguments.length === ARGS_TWO && typeof asyncCallback === 'function') { 74 console.log('MediaLibrary startMediaSelectInner callback ' + uri); 75 return asyncCallback(result.resultCode, uri); 76 } 77 return new Promise((resolve, reject) => { 78 if (result.resultCode === 0) { 79 console.log('MediaLibrary startMediaSelectInner promise ' + uri); 80 resolve(uri); 81 } else { 82 console.log('MediaLibrary startMediaSelectInner err ' + result.resultCode); 83 reject(result.resultCode); 84 } 85 }); 86} 87 88function getMediaLibrary(context) { 89 const media = medialibrary.getMediaLibrary(context); 90 console.log('MediaLibrary getMediaLibrary inner '); 91 if (media !== undefined) { 92 console.log('MediaLibrary getMediaLibrary inner add startMediaSelect'); 93 media.startMediaSelect = startMediaSelect; 94 } 95 return media; 96} 97 98function getMediaLibraryAsync(context, asyncCallback) { 99 console.log('MediaLibrary getMediaLibraryAsync js caller '); 100 if (context === undefined) { 101 console.log('MediaLibrary getMediaLibraryAsync context invalid'); 102 throw Error('invalid context'); 103 } 104 if (arguments.length === ARGS_ONE) { 105 return medialibrary.getMediaLibraryAsync(context) 106 .then((media) => { 107 console.log('MediaLibrary getMediaLibraryAsync js caller add startMediaSelect'); 108 media.startMediaSelect = startMediaSelect; 109 return media; 110 }) 111 .catch((err) => { 112 console.log('MediaLibrary getMediaLibraryAsync js caller err ' + err); 113 throw Error(err); 114 }); 115 } else if (arguments.length === ARGS_TWO && typeof asyncCallback === 'function') { 116 medialibrary.getMediaLibraryAsync(context, (err, media) => { 117 console.log('MediaLibrary getMediaLibraryAsync js caller callback ' + err); 118 if (err) { 119 asyncCallback(err); 120 } else { 121 if (media !== undefined) { 122 console.log('MediaLibrary getMediaLibraryAsync js caller add startMediaSelect'); 123 media.startMediaSelect = startMediaSelect; 124 } 125 asyncCallback(err, media); 126 } 127 }); 128 } else { 129 console.log('MediaLibrary getMediaLibraryAsync js caller param invalid'); 130 throw Error('invalid param'); 131 } 132 return undefined; 133} 134 135function getScannerInstance(context) { 136 console.log('MediaLibrary getScannerInstance js caller '); 137 const instance = medialibrary.getScannerInstance(context); 138 return instance; 139} 140 141export default { 142 getMediaLibrary, 143 getMediaLibraryAsync, 144 getScannerInstance, 145 MediaType: medialibrary.MediaType, 146 FileKey: medialibrary.FileKey, 147 DirectoryType: medialibrary.DirectoryType, 148 PrivateAlbumType: medialibrary.PrivateAlbumType 149}; 150