1ee577835SZhong Yang #pragma once 2ee577835SZhong Yang #include <map> 3ee577835SZhong Yang #include "MediaLibHelper.h" 4*5fc30e0aSzhongyang219 #include "UIElement.h" 5ee577835SZhong Yang 6ee577835SZhong Yang class CUiMediaLibItemMgr 7ee577835SZhong Yang { 8ee577835SZhong Yang public: 9ee577835SZhong Yang ~CUiMediaLibItemMgr(); 10ee577835SZhong Yang static CUiMediaLibItemMgr& Instance(); 11ee577835SZhong Yang 12ee577835SZhong Yang void Init(); 13ee577835SZhong Yang 140695507bSZhong Yang int GetItemCount(CMediaClassifier::ClassificationType type) const; //获取指定类别下项目的数量 150695507bSZhong Yang std::wstring GetItemDisplayName(CMediaClassifier::ClassificationType type, int index) const; //获取指定类别下项目显示到界面中的名称 160695507bSZhong Yang const std::wstring& GetItemName(CMediaClassifier::ClassificationType type, int index) const; //获取指定项的原始名称,如果是<未知xxx>返回的是空 170695507bSZhong Yang int GetItemSongCount(CMediaClassifier::ClassificationType type, int index) const; //获取指定类别下项目的曲目数量 180695507bSZhong Yang void SetCurrentName(CMediaClassifier::ClassificationType type, const std::wstring& name); //设置指定类别下正在播放项目的名称,其中name为原始名称 190695507bSZhong Yang int GetCurrentIndex(CMediaClassifier::ClassificationType type); //获取指定类别下正在播放项目的序号 IsLoading()20f02766e1Szhongyang219 bool IsLoading() const { return m_loading; } IsInited()21f02766e1Szhongyang219 bool IsInited() const { return m_inited; } 22ee577835SZhong Yang 23ee577835SZhong Yang private: 24ee577835SZhong Yang CUiMediaLibItemMgr(); 25ee577835SZhong Yang void GetClassifiedMeidaLibItemList(CMediaClassifier::ClassificationType type); 26ee577835SZhong Yang 27ee577835SZhong Yang static CUiMediaLibItemMgr m_instance; 28cda444b5SZhong Yang struct ItemInfo 29cda444b5SZhong Yang { 30cda444b5SZhong Yang std::wstring name; 31cda444b5SZhong Yang int count{}; 32cda444b5SZhong Yang }; 33cda444b5SZhong Yang 34cda444b5SZhong Yang const ItemInfo& GetItemInfo(CMediaClassifier::ClassificationType type, int index) const; 35cda444b5SZhong Yang 36cda444b5SZhong Yang std::map<CMediaClassifier::ClassificationType, std::vector<ItemInfo>> m_item_map; //保存媒体库中所有分类的名称列表 37ee577835SZhong Yang bool m_loading{}; 38f02766e1Szhongyang219 bool m_inited{}; //如果已经初始化过,则为true 39ee577835SZhong Yang std::map<CMediaClassifier::ClassificationType, int> m_current_index_map; //保存媒体库模式下每种模式正在播放的曲目 40ee577835SZhong Yang std::map<CMediaClassifier::ClassificationType, std::wstring> m_current_name_map; //保存媒体库模式下每种模式正在播放的曲目 41519fa9c3SZhong Yang mutable std::shared_mutex m_shared_mutex; 42ee577835SZhong Yang }; 43ee577835SZhong Yang 44817fc88aSZhong Yang 45817fc88aSZhong Yang class CUiMyFavouriteItemMgr 46817fc88aSZhong Yang { 47817fc88aSZhong Yang public: 48817fc88aSZhong Yang ~CUiMyFavouriteItemMgr(); 49817fc88aSZhong Yang static CUiMyFavouriteItemMgr& Instance(); 50817fc88aSZhong Yang 51817fc88aSZhong Yang int GetSongCount() const; 52817fc88aSZhong Yang const SongInfo& GetSongInfo(int index) const; 53817fc88aSZhong Yang void UpdateMyFavourite(); IsLoading()54817fc88aSZhong Yang bool IsLoading() const { return m_loading; } IsInited()55f02766e1Szhongyang219 bool IsInited() const { return m_inited; } 564a21136cSZhong Yang void GetSongList(std::vector<SongInfo>& song_list) const; 570d9f5172SZhong Yang bool Contains(const SongInfo& song) const; 58817fc88aSZhong Yang 59817fc88aSZhong Yang private: 60817fc88aSZhong Yang CUiMyFavouriteItemMgr(); 61817fc88aSZhong Yang static CUiMyFavouriteItemMgr m_instance; 62817fc88aSZhong Yang 63817fc88aSZhong Yang vector<SongInfo> m_may_favourite_song_list; //“我喜欢的音乐”列表 64817fc88aSZhong Yang bool m_loading{}; 65f02766e1Szhongyang219 bool m_inited{}; //如果已经初始化过,则为true 66519fa9c3SZhong Yang mutable std::shared_mutex m_shared_mutex; 67817fc88aSZhong Yang 68817fc88aSZhong Yang }; 69817fc88aSZhong Yang 700695507bSZhong Yang 710695507bSZhong Yang class CUiAllTracksMgr 720695507bSZhong Yang { 730695507bSZhong Yang public: 740695507bSZhong Yang ~CUiAllTracksMgr(); 750695507bSZhong Yang static CUiAllTracksMgr& Instance(); 760695507bSZhong Yang 770695507bSZhong Yang //用于在UI中显示的曲目信息 780695507bSZhong Yang struct UTrackInfo 790695507bSZhong Yang { 800695507bSZhong Yang SongKey song_key; 810695507bSZhong Yang std::wstring name; 820695507bSZhong Yang Time length; 830d9f5172SZhong Yang bool is_favourite{}; 840695507bSZhong Yang }; 850695507bSZhong Yang 860695507bSZhong Yang int GetSongCount() const; 870695507bSZhong Yang SongInfo GetSongInfo(int index) const; 880695507bSZhong Yang const UTrackInfo& GetItem(int index) const; 890695507bSZhong Yang int GetCurrentIndex() const; //获取正在播放的曲目在m_all_tracks_list中的序号 900695507bSZhong Yang void SetCurrentSong(const SongInfo& song); //设置正在播放的曲目,将其在m_all_tracks_list中的序号保存起来 910695507bSZhong Yang void UpdateAllTracks(); //从CSongDataManager中更新所有曲目信息 IsLoading()920695507bSZhong Yang bool IsLoading() const { return m_loading; } IsInited()93f02766e1Szhongyang219 bool IsInited() const { return m_inited; } 940695507bSZhong Yang void GetSongList(std::vector<SongInfo>& song_list) const; 950d9f5172SZhong Yang void AddOrRemoveMyFavourite(int index); //仅更新UI中显示的“我喜欢”的状态,不更新到“我喜欢的音乐”播放列表中 960695507bSZhong Yang 970695507bSZhong Yang private: 980695507bSZhong Yang CUiAllTracksMgr(); 990695507bSZhong Yang static CUiAllTracksMgr m_instance; 1000695507bSZhong Yang 1010695507bSZhong Yang std::vector<UTrackInfo> m_all_tracks_list; //所有曲目信息列表 102f6f420a7SZhong Yang bool m_loading{}; //如果正在初始化中,则为true 1030695507bSZhong Yang int m_current_index{ -1 }; //正在播放的曲目在m_all_tracks_list中的序号 104f6f420a7SZhong Yang bool m_inited{}; //如果已经初始化过,则为true 105519fa9c3SZhong Yang mutable std::shared_mutex m_shared_mutex; 1060695507bSZhong Yang }; 107*5fc30e0aSzhongyang219 108*5fc30e0aSzhongyang219 109*5fc30e0aSzhongyang219 class CUiFolderExploreMgr 110*5fc30e0aSzhongyang219 { 111*5fc30e0aSzhongyang219 public: 112*5fc30e0aSzhongyang219 static CUiFolderExploreMgr& Instance(); 113*5fc30e0aSzhongyang219 114*5fc30e0aSzhongyang219 std::vector<std::shared_ptr<UiElement::TreeElement::Node>>& GetRootNodes(); 115*5fc30e0aSzhongyang219 void UpdateFolders(); IsLoading()116*5fc30e0aSzhongyang219 bool IsLoading() const { return m_loading; } IsInited()117*5fc30e0aSzhongyang219 bool IsInited() const { return m_inited; } 118*5fc30e0aSzhongyang219 119*5fc30e0aSzhongyang219 private: 120*5fc30e0aSzhongyang219 CUiFolderExploreMgr(); 121*5fc30e0aSzhongyang219 void CreateFolderNodeByPath(std::wstring path, std::shared_ptr<UiElement::TreeElement::Node> parent); 122*5fc30e0aSzhongyang219 int GetAudioFilesNum(std::wstring path); 123*5fc30e0aSzhongyang219 124*5fc30e0aSzhongyang219 static CUiFolderExploreMgr m_instance; 125*5fc30e0aSzhongyang219 126*5fc30e0aSzhongyang219 bool m_loading{}; //如果正在初始化中,则为true 127*5fc30e0aSzhongyang219 bool m_inited{}; //如果已经初始化过,则为true 128*5fc30e0aSzhongyang219 129*5fc30e0aSzhongyang219 std::vector<std::shared_ptr<UiElement::TreeElement::Node>> m_root_nodes; 130*5fc30e0aSzhongyang219 std::map<std::wstring, int> m_folder_audio_files_num; //保存每个文件夹下音频文件的数量 131*5fc30e0aSzhongyang219 }; 132