1 /*
2  * Copyright (C) 2024 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 INTERFACES_KITS_JS_MEDIALIBRARY_INCLUDE_CLOUD_ENHANCEMENT_NAPI_H
17 #define INTERFACES_KITS_JS_MEDIALIBRARY_INCLUDE_CLOUD_ENHANCEMENT_NAPI_H
18 
19 #include <vector>
20 
21 #include "datashare_helper.h"
22 #include "datashare_predicates.h"
23 #include "file_asset_napi.h"
24 #include "photo_proxy.h"
25 #include "values_bucket.h"
26 #include "napi_base_context.h"
27 #include "napi_error.h"
28 #include "napi/native_api.h"
29 #include "napi/native_node_api.h"
30 #include "fetch_file_result_napi.h"
31 
32 namespace OHOS {
33 namespace Media {
34 #define EXPORT __attribute__ ((visibility ("default")))
35 enum class CE_AVAILABLE : int32_t {
36     NOT_SUPPORT,
37     SUPPORT,
38     PROCESSING,
39     FAILED_RETRY,
40     FAILED,
41     SUCCESS,
42     EDIT,
43 };
44 
45 enum class PHOTO_CE_STATUS_CODE : int32_t {
46     // failed retry
47     LIMIT_USAGE = 100,
48     LIMIT_REQUEST,
49     TASK_CACHE_TIMEOUT,
50     NETWORK_UNAVAILABLE,
51     TEMPERATURES_GUARD,
52     NETWORK_WEAK,
53     // failed
54     EXECUTE_FAILED,
55     // failed retry
56     DO_AUTH_FAILED,
57     TASK_CANNOT_EXECUTE,
58     // failed
59     NON_RECOVERABLE = 200
60 };
61 
62 class CloudEnhancementNapi {
63 public:
64     EXPORT CloudEnhancementNapi() = default;
65     EXPORT ~CloudEnhancementNapi() = default;
66     EXPORT static napi_value Init(napi_env env, napi_value exports);
67 
68     static bool InitUserFileClient(napi_env env, napi_callback_info info);
69     static napi_status ParseArgGetPhotoAsset(napi_env env, napi_value arg, int &fileId, std::string &uri,
70         std::string &displayName);
71 
72 private:
73     EXPORT static napi_value Constructor(napi_env env, napi_callback_info info);
74     EXPORT static void Destructor(napi_env env, void* nativeObject, void* finalizeHint);
75 
76     EXPORT static napi_value JSGetCloudEnhancementInstance(napi_env env, napi_callback_info info);
77     EXPORT static napi_value JSSubmitCloudEnhancementTasks(napi_env env, napi_callback_info info);
78     EXPORT static napi_value JSPrioritizeCloudEnhancementTask(napi_env env, napi_callback_info info);
79     EXPORT static napi_value JSCancelCloudEnhancementTasks(napi_env env, napi_callback_info info);
80     EXPORT static napi_value JSCancelAllCloudEnhancementTasks(napi_env env, napi_callback_info info);
81     EXPORT static napi_value JSQueryCloudEnhancementTaskState(napi_env env, napi_callback_info info);
82     EXPORT static napi_value JSSyncCloudEnhancementTaskStatus(napi_env env, napi_callback_info info);
83     EXPORT static napi_value JSGetCloudEnhancementPair(napi_env env, napi_callback_info info);
84 
85     static thread_local napi_ref constructor_;
86 };
87 
88 struct CloudEnhancementAsyncContext : public NapiError {
89     size_t argc;
90     napi_value argv[NAPI_ARGC_MAX];
91     napi_async_work work;
92     napi_deferred deferred;
93     napi_ref callbackRef;
94 
95     const int32_t UNDEFINED = -1;
96     CloudEnhancementNapi* objectInfo;
97     DataShare::DataSharePredicates predicates;
98     DataShare::DataShareValuesBucket valuesBucket;
99     std::vector<std::string> uris;
100     std::string photoUri;
101     int32_t fileId {UNDEFINED};
102     std::string displayName;
103     bool hasCloudWatermark_;
104     ResultNapiType resultNapiType;
105     NapiAssetType assetType;
106     std::unique_ptr<FileAsset> fileAsset;
107     CloudEnhancementTaskStage cloudEnhancementTaskStage_ = CloudEnhancementTaskStage::TASK_STAGE_EXCEPTION;
108     int32_t transferredFileSize_ {UNDEFINED};
109     int32_t totalFileSize_ {UNDEFINED};
110     int32_t expectedDuration_ {UNDEFINED};
111     int32_t statusCode_ {UNDEFINED};
112     std::unique_ptr<FetchResult<FileAsset>> fetchFileResult;
113     bool GetPairAsset();
114 };
115 } // namespace Media
116 } // namespace OHOS
117 
118 #endif // INTERFACES_KITS_JS_MEDIALIBRARY_INCLUDE_CLOUD_ENHANCEMENT_NAPI_H
119