• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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