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