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