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 
23 using namespace std;
24 using namespace OHOS::DataShare;
25 
26 namespace OHOS {
27 namespace Media {
DeleteCallback(napi_env env,Ace::UIContent * uiContent)28 DeleteCallback::DeleteCallback(napi_env env, Ace::UIContent *uiContent)
29 {
30     this->env_ = env;
31     this->uiContent = uiContent;
32 }
33 
OnRelease(int32_t releaseCode)34 void DeleteCallback::OnRelease(int32_t releaseCode)
35 {
36     CloseModalUIExtension();
37 }
38 
OnResult(int32_t resultCode,const OHOS::AAFwk::Want & result)39 void DeleteCallback::OnResult(int32_t resultCode, const OHOS::AAFwk::Want &result)
40 {
41     if (resultCode == DELETE_CODE_SUCCESS) {
42         this->resultCode_ = resultCode;
43         string trashUri = PAH_TRASH_PHOTO;
44         MediaLibraryNapiUtils::UriAppendKeyValue(trashUri, API_VERSION, to_string(MEDIA_API_VERSION_V10));
45         Uri updateAssetUri(trashUri);
46         DataSharePredicates predicates;
47         predicates.In(MediaColumn::MEDIA_ID, this->uris_);
48         DataShareValuesBucket valuesBucket;
49         valuesBucket.Put(MediaColumn::MEDIA_DATE_TRASHED, MediaFileUtils::UTCTimeSeconds());
50         int32_t changedRows = UserFileClient::Update(updateAssetUri, predicates, valuesBucket);
51         if (changedRows < 0) {
52             this->resultCode_ = JS_INNER_FAIL;
53         }
54     } else {
55         this->resultCode_ = JS_ERR_PERMISSION_DENIED;
56     }
57     SendMessageBack();
58 }
59 
OnError(int32_t code,const string & name,const string & message)60 void DeleteCallback::OnError(int32_t code, const string &name, const string &message)
61 {
62     this->resultCode_ = JS_INNER_FAIL;
63     SendMessageBack();
64 }
65 
OnReceive(const OHOS::AAFwk::WantParams & request)66 void DeleteCallback::OnReceive(const OHOS::AAFwk::WantParams &request)
67 {
68     NAPI_INFO_LOG("OnReceive enter.");
69 }
70 
SetSessionId(int32_t sessionId)71 void DeleteCallback::SetSessionId(int32_t sessionId)
72 {
73     this->sessionId_ = sessionId;
74 }
75 
SetUris(vector<string> uris)76 void DeleteCallback::SetUris(vector<string> uris)
77 {
78     this->uris_.assign(uris.begin(), uris.end());
79 }
80 
SetFunc(napi_value func)81 void DeleteCallback::SetFunc(napi_value func)
82 {
83     napi_valuetype valueType = napi_undefined;
84     napi_typeof(this->env_, func, &valueType);
85     if (valueType == napi_function) {
86         napi_create_reference(this->env_, func, ARGS_ONE, &this->callbackRef);
87     }
88 }
89 
SendMessageBack()90 void DeleteCallback::SendMessageBack()
91 {
92     CloseModalUIExtension();
93     napi_value undefined;
94     CHECK_ARGS_RET_VOID(this->env_, napi_get_undefined(this->env_, &undefined), JS_ERR_PARAMETER_INVALID);
95 
96     napi_value results[ARGS_ONE] = {nullptr};
97     CHECK_ARGS_RET_VOID(this->env_, napi_create_object(this->env_, &results[PARAM0]), JS_ERR_PARAMETER_INVALID);
98 
99     napi_value result = 0;
100     CHECK_ARGS_RET_VOID(this->env_, napi_create_int32(this->env_, this->resultCode_, &result),
101                         JS_ERR_PARAMETER_INVALID);
102     CHECK_ARGS_RET_VOID(this->env_, napi_set_named_property(this->env_, results[PARAM0], RESULT.c_str(), result),
103                         JS_ERR_PARAMETER_INVALID);
104 
105     napi_value callback = nullptr;
106     CHECK_ARGS_RET_VOID(this->env_, napi_get_reference_value(this->env_, this->callbackRef, &callback),
107                         JS_ERR_PARAMETER_INVALID);
108     napi_value returnVal;
109     CHECK_ARGS_RET_VOID(this->env_, napi_call_function(this->env_, undefined, callback, ARGS_ONE, results, &returnVal),
110                         JS_ERR_PARAMETER_INVALID);
111 }
112 
CloseModalUIExtension()113 void DeleteCallback::CloseModalUIExtension()
114 {
115     if (this->uiContent != nullptr) {
116         uiContent->CloseModalUIExtension(this->sessionId_);
117     }
118 }
119 }
120 }