#include <string>
#include <sys/stat.h>
#include <unistd.h>
+#include <unordered_set>
extern "C" {
void check_dial_space() { OHOS::SetDialModel::GetInstance().CheckDialSpace(); }
/*加载所有表盘*/
void SetDialModel::LoadAllDial() {
dialInfoList.clear();
- // 加载自定义表盘
- LoadAllDialFromRam();
size_t dialSize = dialInfoList.size();
// 加载默认表盘
LoadAllDialFromDefult();
+ // 加载自定义表盘
+ LoadAllDialFromRam();
// 加载离线表盘
LoadAllDialFromFs();
- /* 排序离线表盘 */
+ /* 排序离线表盘
std::sort(dialInfoList.begin() + dialSize, dialInfoList.end(),
[](const SetDialInfo &f, const SetDialInfo &n) {
return f.dialName < n.dialName;
});
-
+ */
// 表盘Id以及表盘map打印
char dialId[128];
GetAllDialIDs(dialId, 128);
closedir(dirp);
return;
}
-/*加载默认表盘*/
+/*
+ 加载默认表盘
+*/
+const std::vector<std::string> defaultDials = {
+ "obsidianrhythm", "mirrorvoyager", "satellite", "dawninsight", "birdie"};
+
void SetDialModel::LoadAllDialFromDefult(void) {
- int ret;
+ DIR *dirp = opendir(APP_DEFAULT_DIAL_PATH);
+ if (dirp == nullptr) {
+ perror("Failed to open directory");
+ return;
+ }
+
struct dirent *direntp;
+ std::unordered_set<std::string> availableDials;
+
+ // 收集可用的表盘名称
+ while ((direntp = readdir(dirp)) != nullptr) {
+ if (direntp->d_name[0] != '.') {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
+ "LoadAllDialFromDefult: Found dial %s", direntp->d_name);
+ availableDials.insert(direntp->d_name);
+ }
+ }
- // 打开目录
- DIR *dirp = opendir(APP_DEFAULT_DIAL_PATH);
- // 遍历文件
- if (dirp != nullptr) {
- while ((direntp = readdir(dirp)) != nullptr) {
+ closedir(dirp);
+
+ // 按照指定顺序加载表盘
+ for (const auto &dialName : defaultDials) {
+ std::string fullDialName = dialName + ".bin";
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Checking for dial: %s",
+ fullDialName.c_str());
+
+ if (availableDials.count(fullDialName)) {
SetDialInfo dialInfo{0};
- int ret = ParseDialHeader(DEFULTDIAL, direntp->d_name, dialInfo);
+ int ret = ParseDialHeader(DEFULTDIAL, fullDialName,
+ dialInfo);
if (ret == 0) {
dialInfoList.push_back(dialInfo);
+ } else {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "ParseDialHeader is error for file %s",
+ fullDialName.c_str());
}
+ } else {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "LoadAllDialFromDefult: Cannot find dial %s",
+ fullDialName.c_str()); // 记录找不到文件的详细信息
}
}
- // 关闭目录
- closedir(dirp);
- return;
}
/*通过表盘名称解析表盘 [离线表盘]*/
int32_t SetDialModel::ParseDialHeader(int type, const std::string &dialFileName,
download_DialID = ID;
download_dialSize = dial_size;
- // do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_CHECK_DIAL_SPACE, nullptr,0);
+ // do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_CHECK_DIAL_SPACE,
+ // nullptr,0);
CheckDialSpace();
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CheckDialDownload: %d",