#include <string>
#include <sstream>
#include <iomanip>
-
+#include <stdio.h>
namespace OHOS
{
// 定义特殊Id
constexpr uint16_t DEFAULT_DIAL_ID_1 = 1028;
constexpr uint16_t DEFAULT_DIAL_ID_2 = 1052;
+ #define DIAL_ID_LENGTH 2
+ #define DIAL_NAME_LENGTH 50
+ #define DIAL_ID_PATH "user/userdata/dial_id.bin"
+
// 表盘map[Id--dialname] 前5个ID固定
std::unordered_map<uint16_t, std::string> registeredDials{
{DEFAULT_DIAL_ID_1, "KUMI"},
{102, "kaleidoscope"}, // 万花筒表盘102
{MAX_DEFAULT_DIAL_ID, "jellyfish"}, // 水母表盘
};
+ // 表盘市场UID 对应表盘name
+ bool SetDialModel::saveDialfile()
+ {
+ FILE * fp= fopen(DIAL_ID_PATH,"wb+");
+
+ for (const auto &entry : registeredDials)
+ {
+ char buf[DIAL_ID_LENGTH+DIAL_NAME_LENGTH]={0};
+ memcpy_s(buf,DIAL_ID_LENGTH+DIAL_NAME_LENGTH,&entry.first,2);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uid %d",entry.first);
+ memcpy_s(buf+DIAL_ID_LENGTH,DIAL_ID_LENGTH+DIAL_NAME_LENGTH,entry.second.c_str(),entry.second.length());
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uid %s",entry.second.c_str());
+ int size=fwrite(buf,1,DIAL_ID_LENGTH+DIAL_NAME_LENGTH,fp);
+ if(DIAL_ID_LENGTH+DIAL_NAME_LENGTH !=size )
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " fwrite is fail! %d",size);
+ return false;
+ }
+ else
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " fwrite is succ %d !",entry.first);
+ }
+ }
+ fclose(fp);
+ return true;
+ }
+
+ bool SetDialModel::readDialfile()
+ {
+ FILE * fp= fopen(DIAL_ID_PATH,"rb+");
+ if(fp==NULL)
+ return false;
+ fseek(fp, 0, SEEK_END);
+ int size = ftell(fp);
+ fseek(fp, 0, SEEK_SET);
+ //char * buf=(char *)malloc(size);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " readDialfile size is %d !",size);
+
+ while (size)
+ {
+ uint16_t uid=0;
+ if(DIAL_ID_LENGTH !=fread( (void *)&uid,1,DIAL_ID_LENGTH,fp))
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " fread is fail!");
+ }
+
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uid %d",uid);
+
+ char name_buf[DIAL_NAME_LENGTH]={0};
+ if(DIAL_NAME_LENGTH !=fread((void *)name_buf,1,DIAL_NAME_LENGTH,fp))
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " fread is fail!");
+ }
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "name_buf %s",name_buf);
+
+ if(uid!=0)
+ {
+ if( !IsDialInstalled(uid))
+ {
+ RegisterDial(uid,name_buf);
+ }
+
+
+ }
+ size-=(DIAL_ID_LENGTH+DIAL_NAME_LENGTH);
+ }
+
+ //free(buf);
+ fclose(fp);
+ return true;
+ }
+
SetDialModel::SetDialModel()
{
+ readDialfile();
LoadAllDial();
}
/* 注册表盘map */
void SetDialModel::RegisterDial(uint16_t ID, const char *dialname)
{
- registeredDials[ID] = dialname; // 唯一性
+ // char *dialname_=(char *)malloc(strlen(dialname)+1);
+
+ // memcpy_s(dialname_,strlen(dialname)+1,dialname,strlen(dialname)+1);
+
+ std::string * dialname_ = new std::string(dialname);
+
+ registeredDials[ID] = *dialname_; // 唯一性
+
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RegisterDial %s is ok!", dialname);
}
/* 打印map */
// allIDs += ss.str();
}
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "allidStr is %s", allIDs.c_str());
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "allidStr is %s %d", allIDs.c_str(),length);
// // 将字符串拷贝到allidStr中
// int length = allIDs.size();
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UninstallDial default dial %d fail", ID);
return false;
}
+
registeredDials.erase(ID);
/*删除文件操作*/
std::string dialFullName = APP_DIAL_PATH;
if (uapi_delete_files(dialFullName.c_str()))
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UninstallDial the dial %d is ok", ID);
+
return true;
}
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uapi_delete_files the dial %d is false", ID);
dialInfo.dialName = preInfo.dialName;
dialInfo.description = preInfo.description;
dialInfo.preImageInfo = info;
+
+
#if 0
// 需要判断表盘是否存在 不存在->新表盘注册
if (GetDialIdFromName(dialInfo.dialName) == 0)