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 
16 #ifndef MEDIA_SCANNER_NAPI_H
17 #define MEDIA_SCANNER_NAPI_H
18 #include <unordered_map>
19 
20 #include "medialibrary_napi_utils.h"
21 #include "imedia_scanner_callback.h"
22 #include "napi/native_api.h"
23 #include "napi/native_node_api.h"
24 #include "datashare_helper.h"
25 
26 namespace OHOS {
27 namespace Media {
28 #define EXPORT __attribute__ ((visibility ("default")))
29 static const std::string SCANNER_HELPER_NAPI_CLASS_NAME = "ScannerInstance";
30 
31 class MediaScannerNapiCallback : public IMediaScannerCallback {
32 public:
33     int32_t OnScanFinished(const int32_t status, const std::string &uri, const std::string &path) override;
34     void SetToMap(const std::string &path, const napi_ref &cbRef);
35 
MediaScannerNapiCallback(napi_env env)36     explicit MediaScannerNapiCallback(napi_env env) : env_(env) {}
37     ~MediaScannerNapiCallback() = default;
38 
39 private:
40     std::unordered_map<std::string, napi_ref> scannerMap_;
41     napi_env env_;
42 };
43 
44 class MediaScannerNapi {
45 public:
46     EXPORT static napi_value Init(napi_env env, napi_value exports);
47 
48     EXPORT MediaScannerNapi();
49     EXPORT ~MediaScannerNapi();
50 
51 private:
52     EXPORT static void MediaScannerNapiDestructor(napi_env env, void *nativeObject, void *finalize_hint);
53     EXPORT static napi_value MediaScannerNapiConstructor(napi_env env, napi_callback_info info);
54     EXPORT static napi_value ScanFile(napi_env env, napi_callback_info info);
55     EXPORT static napi_value ScanDir(napi_env env, napi_callback_info info);
56     EXPORT static napi_value GetMediaScannerInstance(napi_env env, napi_callback_info info);
57 
58     static napi_value NapiScanUtils(napi_env env, napi_callback_info info, const std::string &scanType);
59     static void DataShareScanBoardcast(const std::string &event);
60     std::shared_ptr<MediaScannerNapiCallback> mediaScannerNapiCallbackObj_;
61 
62     napi_env env_;
63 
64     static thread_local napi_ref sConstructor_;
65 };
66 } // namespace Media
67 } // namespace OHOS
68 #endif /* MEDIA_SCANNER_NAPI_H */
69