• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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