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 23using namespace std; 24using namespace OHOS::DataShare; 25 26namespace OHOS { 27namespace Media { 28#ifdef HAS_ACE_ENGINE_PART 29DeleteCallback::DeleteCallback(napi_env env, Ace::UIContent *uiContent) 30{ 31 this->env_ = env; 32 this->uiContent = uiContent; 33} 34#else 35DeleteCallback::DeleteCallback(napi_env env) 36{ 37 this->env_ = env; 38} 39#endif 40 41void DeleteCallback::OnRelease(int32_t releaseCode) 42{ 43 CloseModalUIExtension(); 44} 45 46void 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 67void DeleteCallback::OnError(int32_t code, const string &name, const string &message) 68{ 69 this->resultCode_ = JS_INNER_FAIL; 70 SendMessageBack(); 71} 72 73void DeleteCallback::OnReceive(const OHOS::AAFwk::WantParams &request) 74{ 75 NAPI_INFO_LOG("OnReceive enter."); 76} 77 78void DeleteCallback::SetSessionId(int32_t sessionId) 79{ 80 this->sessionId_ = sessionId; 81} 82 83void DeleteCallback::SetUris(vector<string> uris) 84{ 85 this->uris_.assign(uris.begin(), uris.end()); 86} 87 88void 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 97void 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 120void 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}