* @Author: luozheng 1732036298@qq.com
* @Date: 2024-08-05 15:20:03
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-09-23 16:04:25
+ * @LastEditTime: 2024-09-24 14:25:27
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersModel.h
*/
bool get_avrcp_ct_or_tg_is_connected(void);
void set_phone_music_play_state(avrcp_key_operation_t notify);
void set_player_state(bool value);
+ // /* -------------------------------------------------------------------------- */
+ std::unordered_map<uint16_t, std::pair<std::string,std::string>> &getIdToMusicNameMap(void);
+ std::string getMusicNameById(int id);
+ uint16_t getIdFromMusicName(const std::string &musicName);
+ std::string getHexMusicNameFromMusicName(const std::string &musicName);
+ int getIdToMusicNameMapNumber(void);
+ void showIdToMusicNameMapData(void);
+ // /* -------------------------------------------------------------------------- */
private:
bool musicSourceFlag{false};//音乐来源标志:false:默认为手表音乐,true:手机音乐
int64_t playerCurrentTime_{0};
int64_t playerMusicDuration_{0};
int64_t playerProgressValue_{0};
+ std::unordered_map<uint16_t, std::pair<std::string,std::string>> idToMusicNameMap;//<id,<16进制文件名,UTF-8文件名>>
private:
PlayersCaseListAdapter *m_PlayersCaseListAdapter{nullptr};
int64_t duration_{0};
* @Author: luozheng 1732036298@qq.com\r
* @Date: 2024-08-05 15:20:03\r
* @LastEditors: luozheng 1732036298@qq.com\r
- * @LastEditTime: 2024-09-23 20:24:49\r
+ * @LastEditTime: 2024-09-24 15:01:01\r
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersPresenter.h\r
*/\r
\r
std::list<PlayerCaseInfo> playersList_; //音乐列表\r
int GetAllFiles(std::list<PlayerCaseInfo> &playersList);\r
void sortPlayersCaseList(std::list<PlayerCaseInfo>* playersCaseList);\r
+ std::string filename;\r
+ std::string hexfilename;\r
};\r
\r
// Button OnClick\r
delSongName = songName;
if (songNameLabel != nullptr)
{
- songNameLabel->SetText(songName);
+ songNameLabel->SetText(PlayersModel::GetInstance()->getHexMusicNameFromMusicName(songName).c_str());
songNameLabel->Invalidate();
}
}
// 删除歌曲文件
void PlayerListDelSongView::DeleteSongNameFile(void)
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " whill Deleted file:%s", delSongName.c_str());
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " whill Deleted file:%s", delSongName.c_str());
std::string path = PlayersModel::GetInstance()->GetMusicPlayPath() + "/" + delSongName;
if (uapi_delete_files(path.c_str()))
node = node->next_;\r
}\r
/* -------------------------------------------------------------------------- */\r
- std::string strSongName = node->data_.sliceId;\r
+ // std::string strSongName = node->data_.sliceId;\r
+ std::string strSongName = PlayersModel::GetInstance()->getHexMusicNameFromMusicName(node->data_.sliceId);\r
std::string pureName = strSongName.substr(0, strSongName.rfind("."));\r
const char *songName = pureName.c_str(); // 获取纯净歌曲名\r
/* -------------------------------------------------------------------------- */\r
duration = duration_;
}
-/*创建音乐播放路径*/
+/*创建音乐播放路径,不存在就创建*/
bool PlayersModel::CreateMusicPlayDirectory(const char* path)
{
if (access(path, F_OK) == -1) { // 如果路径不存在
playersPresenter->SetPhonePlayerState(value);
}
}
+
+ std::unordered_map<uint16_t, std::pair<std::string,std::string>> &PlayersModel::getIdToMusicNameMap(void)
+ {
+ return idToMusicNameMap;
+ }
+
+ //根据id获取名字
+ std::string PlayersModel::getMusicNameById(int id)
+ {
+ for (const auto &entry : idToMusicNameMap)
+ {
+ if (entry.first == id)
+ {
+ return entry.second.first; // 返回对应音乐名
+ }
+ }
+ return "";
+ }
+ //根据名字获取id
+ uint16_t PlayersModel::getIdFromMusicName(const std::string &musicName)
+ {
+ for (const auto &entry : idToMusicNameMap)
+ {
+ if (entry.second.first == musicName)
+ {
+ return entry.first; // 返回对应ID
+ }
+ }
+ return 0;
+ }
+
+ //根据16进制文件名查找对应的UTF-8文件名
+ std::string PlayersModel::getHexMusicNameFromMusicName(const std::string &musicName)
+ {
+ for (const auto &entry : idToMusicNameMap)
+ {
+ if (entry.second.first == musicName)
+ {
+ return entry.second.second; // 返回对应音乐名
+ }
+ }
+ return "";
+ }
+
+ //获取 idToMusicNameMap 的 zize 大小
+ int PlayersModel::getIdToMusicNameMapNumber(void)
+ {
+ return idToMusicNameMap.size();
+ }
+
+ void PlayersModel::showIdToMusicNameMapData(void)
+ {
+ for (const auto &entry : idToMusicNameMap)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "id = %d name.first = %s name.second = %s", entry.first,entry.second.first.c_str(),entry.second.second.c_str());
+ }
+ }
}
#ifdef __cplusplus
}\r
playersCaseList_->Clear();\r
playersList_.clear();\r
+ if(!PlayersModel::GetInstance()->getIdToMusicNameMap().empty())\r
+ {\r
+ PlayersModel::GetInstance()->getIdToMusicNameMap().clear();//清空map\r
+ }\r
if(!PlayersModel::GetInstance()->CreateMusicPlayDirectory())\r
{\r
return;\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "musicName = %s,index = %d",playerCaseInfo.sliceId,playerCaseInfo.index);\r
playersCaseList_->PushBack(playerCaseInfo);\r
}\r
+ PlayersModel::GetInstance()->showIdToMusicNameMapData();\r
}\r
\r
List<PlayerCaseInfo>& PlayersListGroup::GetCase()\r
// 遍历文件\r
if (dirp != NULL) {\r
while ((direntp = readdir(dirp)) != NULL) {\r
+ filename = direntp->d_name;\r
+ hexfilename = hex_to_string(direntp->d_name);\r
+ PlayersModel::GetInstance()->getIdToMusicNameMap()[i].first = filename; //16进制的文件名\r
+ PlayersModel::GetInstance()->getIdToMusicNameMap()[i].second = hexfilename; //转成UTF-8的文件名\r
ret = memcpy_s(playerCaseInfo.sliceId, DEC_NUM_256, direntp->d_name, DEC_NUM_256);\r
if (ret != OHOS_SUCCESS) {\r
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "memcpy_s err %d.", ret);\r