1 #pragma once 2 #include <map> 3 #include "MediaLibHelper.h" 4 5 class CUiMediaLibItemMgr 6 { 7 public: 8 ~CUiMediaLibItemMgr(); 9 static CUiMediaLibItemMgr& Instance(); 10 11 void Init(); 12 13 int GetItemCount(CMediaClassifier::ClassificationType type) const; //获取指定类别下项目的数量 14 std::wstring GetItemDisplayName(CMediaClassifier::ClassificationType type, int index) const; //获取指定类别下项目显示到界面中的名称 15 const std::wstring& GetItemName(CMediaClassifier::ClassificationType type, int index) const; //获取指定项的原始名称,如果是<未知xxx>返回的是空 16 int GetItemSongCount(CMediaClassifier::ClassificationType type, int index) const; //获取指定类别下项目的曲目数量 17 void SetCurrentName(CMediaClassifier::ClassificationType type, const std::wstring& name); //设置指定类别下正在播放项目的名称,其中name为原始名称 18 int GetCurrentIndex(CMediaClassifier::ClassificationType type); //获取指定类别下正在播放项目的序号 19 bool IsLoading() const { return m_loading; } 20 bool IsInited() const { return m_inited; } 21 22 private: 23 CUiMediaLibItemMgr(); 24 void GetClassifiedMeidaLibItemList(CMediaClassifier::ClassificationType type); 25 26 static CUiMediaLibItemMgr m_instance; 27 struct ItemInfo 28 { 29 std::wstring name; 30 int count{}; 31 }; 32 33 const ItemInfo& GetItemInfo(CMediaClassifier::ClassificationType type, int index) const; 34 35 std::map<CMediaClassifier::ClassificationType, std::vector<ItemInfo>> m_item_map; //保存媒体库中所有分类的名称列表 36 bool m_loading{}; 37 bool m_inited{}; //如果已经初始化过,则为true 38 std::map<CMediaClassifier::ClassificationType, int> m_current_index_map; //保存媒体库模式下每种模式正在播放的曲目 39 std::map<CMediaClassifier::ClassificationType, std::wstring> m_current_name_map; //保存媒体库模式下每种模式正在播放的曲目 40 mutable std::shared_mutex m_shared_mutex; 41 }; 42 43 44 class CUiMyFavouriteItemMgr 45 { 46 public: 47 ~CUiMyFavouriteItemMgr(); 48 static CUiMyFavouriteItemMgr& Instance(); 49 50 int GetSongCount() const; 51 const SongInfo& GetSongInfo(int index) const; 52 void UpdateMyFavourite(); 53 bool IsLoading() const { return m_loading; } 54 bool IsInited() const { return m_inited; } 55 void GetSongList(std::vector<SongInfo>& song_list) const; 56 bool Contains(const SongInfo& song) const; 57 58 private: 59 CUiMyFavouriteItemMgr(); 60 static CUiMyFavouriteItemMgr m_instance; 61 62 vector<SongInfo> m_may_favourite_song_list; //“我喜欢的音乐”列表 63 bool m_loading{}; 64 bool m_inited{}; //如果已经初始化过,则为true 65 mutable std::shared_mutex m_shared_mutex; 66 67 }; 68 69 70 class CUiAllTracksMgr 71 { 72 public: 73 ~CUiAllTracksMgr(); 74 static CUiAllTracksMgr& Instance(); 75 76 //用于在UI中显示的曲目信息 77 struct UTrackInfo 78 { 79 SongKey song_key; 80 std::wstring name; 81 Time length; 82 bool is_favourite{}; 83 }; 84 85 int GetSongCount() const; 86 SongInfo GetSongInfo(int index) const; 87 const UTrackInfo& GetItem(int index) const; 88 int GetCurrentIndex() const; //获取正在播放的曲目在m_all_tracks_list中的序号 89 void SetCurrentSong(const SongInfo& song); //设置正在播放的曲目,将其在m_all_tracks_list中的序号保存起来 90 void UpdateAllTracks(); //从CSongDataManager中更新所有曲目信息 91 bool IsLoading() const { return m_loading; } 92 bool IsInited() const { return m_inited; } 93 void GetSongList(std::vector<SongInfo>& song_list) const; 94 void AddOrRemoveMyFavourite(int index); //仅更新UI中显示的“我喜欢”的状态,不更新到“我喜欢的音乐”播放列表中 95 96 private: 97 CUiAllTracksMgr(); 98 static CUiAllTracksMgr m_instance; 99 100 std::vector<UTrackInfo> m_all_tracks_list; //所有曲目信息列表 101 bool m_loading{}; //如果正在初始化中,则为true 102 int m_current_index{ -1 }; //正在播放的曲目在m_all_tracks_list中的序号 103 bool m_inited{}; //如果已经初始化过,则为true 104 mutable std::shared_mutex m_shared_mutex; 105 }; 106