1 /*
2 * Copyright (C) 2023 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 #include "delete_callback.h"
16
17 #include "media_library_napi.h"
18 #include "medialibrary_napi_utils.h"
19 #include "medialibrary_napi_log.h"
20 #include "media_file_utils.h"
21 #include "userfile_client.h"
22 #include "user_define_ipc_client.h"
23 #include "medialibrary_business_code.h"
24 #include "trash_photos_vo.h"
25
26 using namespace std;
27 using namespace OHOS::DataShare;
28
29 namespace OHOS {
30 namespace Media {
31 #ifdef HAS_ACE_ENGINE_PART
DeleteCallback(napi_env env,Ace::UIContent * uiContent)32 DeleteCallback::DeleteCallback(napi_env env, Ace::UIContent *uiContent)
33 {
34 this->env_ = env;
35 this->uiContent = uiContent;
36 }
37 #else
38 DeleteCallback::DeleteCallback(napi_env env)
39 {
40 this->env_ = env;
41 }
42 #endif
43
~DeleteCallback()44 DeleteCallback::~DeleteCallback()
45 {
46 napi_delete_reference(this->env_, this->callbackRef);
47 this->env_ = nullptr;
48 this->callbackRef = nullptr;
49 #ifdef HAS_ACE_ENGINE_PART
50 this->uiContent = nullptr;
51 #endif
52 }
53
OnRelease(int32_t releaseCode)54 void DeleteCallback::OnRelease(int32_t releaseCode)
55 {
56 CloseModalUIExtension();
57 }
58
OnResult(int32_t resultCode,const OHOS::AAFwk::Want & result)59 void DeleteCallback::OnResult(int32_t resultCode, const OHOS::AAFwk::Want &result)
60 {
61 if (resultCode == DELETE_CODE_SUCCESS) {
62 this->resultCode_ = resultCode;
63 TrashPhotosReqBody reqBody;
64 reqBody.uris = this->uris_;
65 uint32_t businessCode = static_cast<uint32_t>(MediaLibraryBusinessCode::PAH_TRASH_PHOTOS);
66 int32_t changedRows = IPC::UserDefineIPCClient().Call(businessCode, reqBody);
67 if (changedRows < 0) {
68 this->resultCode_ = JS_INNER_FAIL;
69 }
70 } else {
71 this->resultCode_ = JS_ERR_PERMISSION_DENIED;
72 }
73 SendMessageBack();
74 }
75
OnError(int32_t code,const string & name,const string & message)76 void DeleteCallback::OnError(int32_t code, const string &name, const string &message)
77 {
78 this->resultCode_ = JS_INNER_FAIL;
79 SendMessageBack();
80 }
81
OnReceive(const OHOS::AAFwk::WantParams & request)82 void DeleteCallback::OnReceive(const OHOS::AAFwk::WantParams &request)
83 {
84 NAPI_INFO_LOG("OnReceive enter.");
85 }
86
SetSessionId(int32_t sessionId)87 void DeleteCallback::SetSessionId(int32_t sessionId)
88 {
89 this->sessionId_ = sessionId;
90 }
91
SetUris(vector<string> uris)92 void DeleteCallback::SetUris(vector<string> uris)
93 {
94 this->uris_.assign(uris.begin(), uris.end());
95 }
96
SetFunc(napi_value func)97 void DeleteCallback::SetFunc(napi_value func)
98 {
99 napi_valuetype valueType = napi_undefined;
100 napi_typeof(this->env_, func, &valueType);
101 if (valueType == napi_function) {
102 napi_create_reference(this->env_, func, ARGS_ONE, &this->callbackRef);
103 }
104 }
105
SendMessageBack()106 void DeleteCallback::SendMessageBack()
107 {
108 CloseModalUIExtension();
109 napi_value undefined;
110 CHECK_ARGS_RET_VOID(this->env_, napi_get_undefined(this->env_, &undefined), JS_ERR_PARAMETER_INVALID);
111
112 napi_value results[ARGS_ONE] = {nullptr};
113 CHECK_ARGS_RET_VOID(this->env_, napi_create_object(this->env_, &results[PARAM0]), JS_ERR_PARAMETER_INVALID);
114
115 napi_value result = 0;
116 CHECK_ARGS_RET_VOID(this->env_, napi_create_int32(this->env_, this->resultCode_, &result),
117 JS_ERR_PARAMETER_INVALID);
118 CHECK_ARGS_RET_VOID(this->env_, napi_set_named_property(this->env_, results[PARAM0], RESULT.c_str(), result),
119 JS_ERR_PARAMETER_INVALID);
120
121 napi_value callback = nullptr;
122 CHECK_ARGS_RET_VOID(this->env_, napi_get_reference_value(this->env_, this->callbackRef, &callback),
123 JS_ERR_PARAMETER_INVALID);
124 napi_value returnVal;
125 CHECK_ARGS_RET_VOID(this->env_, napi_call_function(this->env_, undefined, callback, ARGS_ONE, results, &returnVal),
126 JS_ERR_PARAMETER_INVALID);
127 }
128
CloseModalUIExtension()129 void DeleteCallback::CloseModalUIExtension()
130 {
131 #ifdef HAS_ACE_ENGINE_PART
132 if (this->uiContent != nullptr) {
133 uiContent->CloseModalUIExtension(this->sessionId_);
134 }
135 #endif
136 }
137 }
138 }