1.音乐播放器添加,文件名为16进制字符串,显示为正常UTF-8字符串功能 1006/4
authorluozheng <1732036298@qq.com>
Tue, 24 Sep 2024 07:55:28 +0000 (15:55 +0800)
committerluozheng <1732036298@qq.com>
Tue, 24 Sep 2024 07:55:28 +0000 (15:55 +0800)
2.添加对应id与音乐文件名互查接口

code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersModel.h
code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersPresenter.h
code/sdk/application/wearable/fd230app/nativeui/player/src/PlayerListDelSongView.cpp
code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersCaseListAdapter.cpp
code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersModel.cpp
code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersPresenter.cpp

index 1e03112..931bae6 100644 (file)
@@ -2,7 +2,7 @@
  * @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
  */
 
@@ -109,11 +109,20 @@ public:
     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};
index 0d7035b..b41ca00 100644 (file)
@@ -2,7 +2,7 @@
  * @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
@@ -92,6 +92,8 @@ private:
     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
index 14ed7b8..a245181 100644 (file)
@@ -90,7 +90,7 @@ namespace OHOS
         delSongName = songName;
         if (songNameLabel != nullptr)
         {
-            songNameLabel->SetText(songName);
+            songNameLabel->SetText(PlayersModel::GetInstance()->getHexMusicNameFromMusicName(songName).c_str());
             songNameLabel->Invalidate();
         }
     }
@@ -98,7 +98,7 @@ namespace OHOS
     // 删除歌曲文件
     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()))
index d18815c..3c176d8 100644 (file)
@@ -147,7 +147,8 @@ namespace OHOS
             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
index c5997ec..5dcf570 100644 (file)
@@ -753,7 +753,7 @@ void  PlayersModel::GetDuration(int64_t &duration)
     duration = duration_;
 }
 
-/*创建音乐播放路径*/
+/*创建音乐播放路径,不存在就创建*/
 bool PlayersModel::CreateMusicPlayDirectory(const char* path)
 {
     if (access(path, F_OK) == -1) {  // 如果路径不存在
@@ -1028,6 +1028,63 @@ bool PlayersModel::GetCurrentMusicIsPlaying(void)
             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
index 55b4c5e..67badc2 100644 (file)
@@ -429,6 +429,10 @@ void PlayersListGroup::SetUpListCase()
     }\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
@@ -456,6 +460,7 @@ void PlayersListGroup::SetUpListCase()
         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
@@ -546,6 +551,10 @@ int PlayersListGroup::GetAllFiles(std::list<PlayerCaseInfo> &playersList)
     // 遍历文件\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