xref: /MusicPlayer2/MusicPlayer2/UiMediaLibItemMgr.h (revision 519fa9c311d472dfbc7a3b3782d17eb10b82b1ee)
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