1 /*
2 * Copyright (c) 2025 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
16 #include "download_callback_impl_ani.h"
17 #include "cloud_sync_manager.h"
18 #include "dfs_error.h"
19 #include "utils_log.h"
20
21 namespace OHOS::FileManagement::CloudSync {
StartDownloadInner(const std::string & uri)22 int32_t CloudDownloadCallbackImplAni::StartDownloadInner(const std::string &uri)
23 {
24 int64_t downloadId = 0;
25 std::lock_guard<std::mutex> lock(downloadInfoMtx_);
26 int32_t ret = CloudSyncManager::GetInstance().StartDownloadFile(uri, shared_from_this(), downloadId);
27 if (ret != E_OK) {
28 LOGE("Start batch download failed! ret = %{public}d", ret);
29 return ret;
30 }
31
32 downloadInfos_[downloadId] = std::make_shared<SingleProgressAni>(downloadId);
33 return ret;
34 }
35
StopDownloadInner(const std::string & uri)36 int32_t CloudDownloadCallbackImplAni::StopDownloadInner(const std::string &uri)
37 {
38 auto downloadIdList = GetDownloadIdsByUri(uri);
39 int32_t ret = E_OK;
40 int32_t resErr = E_OK;
41 LOGI("Stop Download downloadId list size: %{public}zu", downloadIdList.size());
42 for (auto taskId : downloadIdList) {
43 resErr = CloudSyncManager::GetInstance().StopDownloadFile(taskId, true);
44 if (resErr != E_OK) {
45 ret = resErr;
46 continue;
47 }
48 }
49 if (ret != E_OK) {
50 LOGE("Stop Download failed! ret = %{public}d", ret);
51 }
52 return ret;
53 }
54
StartDownloadInner(const std::string & uri,int32_t fieldKey)55 int32_t CloudFileCacheCallbackImplAni::StartDownloadInner(const std::string &uri, int32_t fieldKey)
56 {
57 int64_t downloadId = 0;
58 std::lock_guard<std::mutex> lock(downloadInfoMtx_);
59 int32_t ret = CloudSyncManager::GetInstance().StartFileCache({uri}, downloadId, fieldKey, shared_from_this());
60 if (ret != E_OK) {
61 LOGE("Start single download failed! ret = %{public}d", ret);
62 return ret;
63 }
64 downloadInfos_[downloadId] = std::make_shared<SingleProgressAni>(downloadId);
65 return ret;
66 }
67
StopDownloadInner(const std::string & uri,bool needClean)68 int32_t CloudFileCacheCallbackImplAni::StopDownloadInner(const std::string &uri, bool needClean)
69 {
70 auto downloadIdList = GetDownloadIdsByUri(uri);
71 int32_t ret = E_OK;
72 int32_t resErr = E_OK;
73 LOGI("Stop Download downloadId list size: %{public}zu", downloadIdList.size());
74 for (auto taskId : downloadIdList) {
75 resErr = CloudSyncManager::GetInstance().StopFileCache(taskId, needClean);
76 if (resErr != E_OK) {
77 ret = resErr;
78 continue;
79 }
80 }
81 if (ret != E_OK) {
82 LOGE("Stop Download failed! ret = %{public}d", ret);
83 }
84 return ret;
85 }
86
StartDownloadInner(const std::vector<std::string> & uriVec,int64_t & downloadId,int32_t fieldKey)87 int32_t CloudFileCacheCallbackImplAni::StartDownloadInner(const std::vector<std::string> &uriVec,
88 int64_t &downloadId,
89 int32_t fieldKey)
90 {
91 std::unique_lock<std::mutex> lock(downloadInfoMtx_);
92 int32_t ret = CloudSyncManager::GetInstance().StartFileCache(uriVec, downloadId, fieldKey, shared_from_this());
93 if (ret != E_OK) {
94 LOGE("Start batch download failed! ret = %{public}d", ret);
95 return ret;
96 }
97 downloadInfos_[downloadId] = std::make_shared<BatchProgressAni>(downloadId);
98 return ret;
99 }
100
StopDownloadInner(int64_t downloadId,bool needClean)101 int32_t CloudFileCacheCallbackImplAni::StopDownloadInner(int64_t downloadId, bool needClean)
102 {
103 int32_t ret = CloudSyncManager::GetInstance().StopFileCache(downloadId, needClean);
104 if (ret != E_OK) {
105 LOGE("Batch stop file cache failed! ret = %{public}d", ret);
106 }
107 return ret;
108 }
109 } // namespace OHOS::FileManagement::CloudSync