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 }