• 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 #define MLOG_TAG "SettingsDataManager"
17 
18 #include "settings_data_manager.h"
19 
20 #include <memory>
21 
22 #include "datashare_helper.h"
23 #include "datashare_errno.h"
24 #include "datashare_result_set.h"
25 #include "medialibrary_errno.h"
26 #include "media_log.h"
27 
28 namespace OHOS::Media {
29 inline static const std::string SETTING_DATA_QUERY_URI = "datashareproxy://";
30 inline static const std::string SETTING_DATA_COMMON_URI =
31     "datashare:///com.ohos.settingsdata/entry/settingsdata/SETTINGSDATA?Proxy=true";
32 inline static const std::string PHOTOS_SYNC_SWITCH_KEY = "photos_sync_options";
33 
34 class MediaSettingDataHelper {
35 public:
MediaSettingDataHelper()36     MediaSettingDataHelper()
37     {
38         DataShare::CreateOptions options;
39         options.enabled_ = true;
40         dataShareHelper_ = DataShare::DataShareHelper::Creator(SETTING_DATA_QUERY_URI, options);
41         if (dataShareHelper_ == nullptr) {
42             MEDIA_ERR_LOG("dataShareHelper = nullptr");
43             return;
44         }
45     }
46 
~MediaSettingDataHelper()47     ~MediaSettingDataHelper()
48     {
49         if (dataShareHelper_) {
50             if (!dataShareHelper_->Release()) {
51                 MEDIA_INFO_LOG("Release set data share helper failed");
52                 return;
53             }
54         }
55     }
56 
operator bool() const57     explicit operator bool() const noexcept
58     {
59         return dataShareHelper_ == nullptr ? false : true;
60     }
61 
operator *() const62     DataShare::DataShareHelper& operator*() const
63     {
64         return *dataShareHelper_;
65     }
66 
operator ->() const67     DataShare::DataShareHelper* operator->() const noexcept
68     {
69         return dataShareHelper_.get();
70     }
71 
72 private:
73     std::shared_ptr<DataShare::DataShareHelper> dataShareHelper_;
74 };
75 
StringToSwitchStatus(const std::string & value)76 static SwitchStatus StringToSwitchStatus(const std::string& value)
77 {
78     static const std::unordered_map<std::string, SwitchStatus> STRING_SWITCH_STATUS_MAP = {
79         { std::to_string(static_cast<int>(SwitchStatus::CLOSE)), SwitchStatus::CLOSE },
80         { std::to_string(static_cast<int>(SwitchStatus::CLOUD)), SwitchStatus::CLOUD },
81         { std::to_string(static_cast<int>(SwitchStatus::HDC)), SwitchStatus::HDC },
82     };
83     CHECK_AND_RETURN_RET_LOG(STRING_SWITCH_STATUS_MAP.count(value), SwitchStatus::NONE,
84         "invalid SwitchStatus: %{public}s", value.c_str());
85     return STRING_SWITCH_STATUS_MAP.at(value);
86 }
87 
GetPhotosSyncSwitchStatus()88 SwitchStatus SettingsDataManager::GetPhotosSyncSwitchStatus()
89 {
90     std::string value;
91     auto ret = QueryParamInSettingData(PHOTOS_SYNC_SWITCH_KEY, value);
92     if (ret != E_OK) {
93         return SwitchStatus::NONE;
94     }
95     return StringToSwitchStatus(value);
96 }
97 
QueryParamInSettingData(const std::string & key,std::string & value)98 int32_t SettingsDataManager::QueryParamInSettingData(const std::string &key, std::string &value)
99 {
100     MediaSettingDataHelper dataShareHelper;
101     if (!dataShareHelper) {
102         return E_DB_FAIL;
103     }
104 
105     MEDIA_INFO_LOG("Query key: %{public}s", key.c_str());
106     DataShare::DataSharePredicates predicates;
107     predicates.EqualTo("KEYWORD", key);
108     std::vector<std::string> columns = {"value"};
109     std::string queryUri = SETTING_DATA_COMMON_URI + "&key=" + key;
110     Uri uri(queryUri);
111 
112     std::shared_ptr<DataShare::DataShareResultSet> resultSet = dataShareHelper->Query(uri, predicates, columns);
113     CHECK_AND_RETURN_RET_LOG(resultSet != nullptr, E_DB_FAIL, "resultSet == nullptr");
114     auto ret = resultSet->GoToFirstRow();
115     CHECK_AND_RETURN_RET_LOG(ret == DataShare::E_OK, ret, "GoToFirstRow failed, err: %{public}d", ret);
116 
117     int32_t columnIndex = 0;
118     ret = resultSet->GetColumnIndex("value", columnIndex);
119     CHECK_AND_RETURN_RET_LOG(ret == DataShare::E_OK, ret, "GetColumnIndex failed, err: %{public}d", ret);
120     ret = resultSet->GetString(columnIndex, value);
121     CHECK_AND_RETURN_RET_LOG(ret == DataShare::E_OK, ret, "GetString failed, err: %{public}d", ret);
122     MEDIA_INFO_LOG("Query success, value: %{public}s", value.c_str());
123     return E_OK;
124 }
125 }