1ee577835SZhong Yang #pragma once 2ee577835SZhong Yang #include <map> 3ee577835SZhong Yang #include "MediaLibHelper.h" 4ee577835SZhong Yang 5ee577835SZhong Yang class CUiMediaLibItemMgr 6ee577835SZhong Yang { 7ee577835SZhong Yang public: 8ee577835SZhong Yang ~CUiMediaLibItemMgr(); 9ee577835SZhong Yang static CUiMediaLibItemMgr& Instance(); 10ee577835SZhong Yang 11ee577835SZhong Yang void Init(); 12ee577835SZhong Yang 130695507bSZhong Yang int GetItemCount(CMediaClassifier::ClassificationType type) const; //获取指定类别下项目的数量 140695507bSZhong Yang std::wstring GetItemDisplayName(CMediaClassifier::ClassificationType type, int index) const; //获取指定类别下项目显示到界面中的名称 150695507bSZhong Yang const std::wstring& GetItemName(CMediaClassifier::ClassificationType type, int index) const; //获取指定项的原始名称,如果是<未知xxx>返回的是空 160695507bSZhong Yang int GetItemSongCount(CMediaClassifier::ClassificationType type, int index) const; //获取指定类别下项目的曲目数量 170695507bSZhong Yang void SetCurrentName(CMediaClassifier::ClassificationType type, const std::wstring& name); //设置指定类别下正在播放项目的名称,其中name为原始名称 180695507bSZhong Yang int GetCurrentIndex(CMediaClassifier::ClassificationType type); //获取指定类别下正在播放项目的序号 19ee577835SZhong Yang 20ee577835SZhong Yang private: 21ee577835SZhong Yang CUiMediaLibItemMgr(); 22ee577835SZhong Yang void GetClassifiedMeidaLibItemList(CMediaClassifier::ClassificationType type); 23ee577835SZhong Yang 24ee577835SZhong Yang static CUiMediaLibItemMgr m_instance; 25cda444b5SZhong Yang struct ItemInfo 26cda444b5SZhong Yang { 27cda444b5SZhong Yang std::wstring name; 28cda444b5SZhong Yang int count{}; 29cda444b5SZhong Yang }; 30cda444b5SZhong Yang 31cda444b5SZhong Yang const ItemInfo& GetItemInfo(CMediaClassifier::ClassificationType type, int index) const; 32cda444b5SZhong Yang 33cda444b5SZhong Yang std::map<CMediaClassifier::ClassificationType, std::vector<ItemInfo>> m_item_map; //保存媒体库中所有分类的名称列表 34ee577835SZhong Yang bool m_loading{}; 35ee577835SZhong Yang std::map<CMediaClassifier::ClassificationType, int> m_current_index_map; //保存媒体库模式下每种模式正在播放的曲目 36ee577835SZhong Yang std::map<CMediaClassifier::ClassificationType, std::wstring> m_current_name_map; //保存媒体库模式下每种模式正在播放的曲目 37*519fa9c3SZhong Yang mutable std::shared_mutex m_shared_mutex; 38ee577835SZhong Yang }; 39ee577835SZhong Yang 40817fc88aSZhong Yang 41817fc88aSZhong Yang class CUiMyFavouriteItemMgr 42817fc88aSZhong Yang { 43817fc88aSZhong Yang public: 44817fc88aSZhong Yang ~CUiMyFavouriteItemMgr(); 45817fc88aSZhong Yang static CUiMyFavouriteItemMgr& Instance(); 46817fc88aSZhong Yang 47817fc88aSZhong Yang int GetSongCount() const; 48817fc88aSZhong Yang const SongInfo& GetSongInfo(int index) const; 49817fc88aSZhong Yang void UpdateMyFavourite(); 50817fc88aSZhong Yang bool IsLoading() const { return m_loading; } 514a21136cSZhong Yang void GetSongList(std::vector<SongInfo>& song_list) const; 52817fc88aSZhong Yang 53817fc88aSZhong Yang private: 54817fc88aSZhong Yang CUiMyFavouriteItemMgr(); 55817fc88aSZhong Yang static CUiMyFavouriteItemMgr m_instance; 56817fc88aSZhong Yang 57817fc88aSZhong Yang vector<SongInfo> m_may_favourite_song_list; //“我喜欢的音乐”列表 58817fc88aSZhong Yang bool m_loading{}; 59*519fa9c3SZhong Yang mutable std::shared_mutex m_shared_mutex; 60817fc88aSZhong Yang 61817fc88aSZhong Yang }; 62817fc88aSZhong Yang 630695507bSZhong Yang 640695507bSZhong Yang class CUiAllTracksMgr 650695507bSZhong Yang { 660695507bSZhong Yang public: 670695507bSZhong Yang ~CUiAllTracksMgr(); 680695507bSZhong Yang static CUiAllTracksMgr& Instance(); 690695507bSZhong Yang 700695507bSZhong Yang //用于在UI中显示的曲目信息 710695507bSZhong Yang struct UTrackInfo 720695507bSZhong Yang { 730695507bSZhong Yang SongKey song_key; 740695507bSZhong Yang std::wstring name; 750695507bSZhong Yang Time length; 760695507bSZhong Yang }; 770695507bSZhong Yang 780695507bSZhong Yang int GetSongCount() const; 790695507bSZhong Yang SongInfo GetSongInfo(int index) const; 800695507bSZhong Yang const UTrackInfo& GetItem(int index) const; 810695507bSZhong Yang int GetCurrentIndex() const; //获取正在播放的曲目在m_all_tracks_list中的序号 820695507bSZhong Yang void SetCurrentSong(const SongInfo& song); //设置正在播放的曲目,将其在m_all_tracks_list中的序号保存起来 830695507bSZhong Yang void UpdateAllTracks(); //从CSongDataManager中更新所有曲目信息 840695507bSZhong Yang bool IsLoading() const { return m_loading; } 850695507bSZhong Yang void GetSongList(std::vector<SongInfo>& song_list) const; 860695507bSZhong Yang 870695507bSZhong Yang private: 880695507bSZhong Yang CUiAllTracksMgr(); 890695507bSZhong Yang static CUiAllTracksMgr m_instance; 900695507bSZhong Yang 910695507bSZhong Yang std::vector<UTrackInfo> m_all_tracks_list; //所有曲目信息列表 920695507bSZhong Yang bool m_loading{}; 930695507bSZhong Yang int m_current_index{ -1 }; //正在播放的曲目在m_all_tracks_list中的序号 94*519fa9c3SZhong Yang bool m_inited{}; 95*519fa9c3SZhong Yang mutable std::shared_mutex m_shared_mutex; 960695507bSZhong Yang }; 97