xref: /MusicPlayer2/MusicPlayer2/UiMediaLibItemMgr.h (revision 0695507bfc32382b8768f832d3e2866afbcada34)
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 
13*0695507bSZhong Yang     int GetItemCount(CMediaClassifier::ClassificationType type) const;                              //获取指定类别下项目的数量
14*0695507bSZhong Yang     std::wstring GetItemDisplayName(CMediaClassifier::ClassificationType type, int index) const;    //获取指定类别下项目显示到界面中的名称
15*0695507bSZhong Yang     const std::wstring& GetItemName(CMediaClassifier::ClassificationType type, int index) const;    //获取指定项的原始名称,如果是<未知xxx>返回的是空
16*0695507bSZhong Yang     int GetItemSongCount(CMediaClassifier::ClassificationType type, int index) const;               //获取指定类别下项目的曲目数量
17*0695507bSZhong Yang     void SetCurrentName(CMediaClassifier::ClassificationType type, const std::wstring& name);       //设置指定类别下正在播放项目的名称,其中name为原始名称
18*0695507bSZhong 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;    //保存媒体库模式下每种模式正在播放的曲目
37ee577835SZhong Yang };
38ee577835SZhong Yang 
39817fc88aSZhong Yang 
40817fc88aSZhong Yang class CUiMyFavouriteItemMgr
41817fc88aSZhong Yang {
42817fc88aSZhong Yang public:
43817fc88aSZhong Yang     ~CUiMyFavouriteItemMgr();
44817fc88aSZhong Yang     static CUiMyFavouriteItemMgr& Instance();
45817fc88aSZhong Yang 
46817fc88aSZhong Yang     int GetSongCount() const;
47817fc88aSZhong Yang     const SongInfo& GetSongInfo(int index) const;
48817fc88aSZhong Yang     void UpdateMyFavourite();
49817fc88aSZhong Yang     bool IsLoading() const { return m_loading; }
504a21136cSZhong Yang     void GetSongList(std::vector<SongInfo>& song_list) const;
51817fc88aSZhong Yang 
52817fc88aSZhong Yang private:
53817fc88aSZhong Yang     CUiMyFavouriteItemMgr();
54817fc88aSZhong Yang     static CUiMyFavouriteItemMgr m_instance;
55817fc88aSZhong Yang 
56817fc88aSZhong Yang     vector<SongInfo> m_may_favourite_song_list;     //“我喜欢的音乐”列表
57817fc88aSZhong Yang     bool m_loading{};
58817fc88aSZhong Yang 
59817fc88aSZhong Yang };
60817fc88aSZhong Yang 
61*0695507bSZhong Yang 
62*0695507bSZhong Yang class CUiAllTracksMgr
63*0695507bSZhong Yang {
64*0695507bSZhong Yang public:
65*0695507bSZhong Yang     ~CUiAllTracksMgr();
66*0695507bSZhong Yang     static CUiAllTracksMgr& Instance();
67*0695507bSZhong Yang 
68*0695507bSZhong Yang     //用于在UI中显示的曲目信息
69*0695507bSZhong Yang     struct UTrackInfo
70*0695507bSZhong Yang     {
71*0695507bSZhong Yang         SongKey song_key;
72*0695507bSZhong Yang         std::wstring name;
73*0695507bSZhong Yang         Time length;
74*0695507bSZhong Yang     };
75*0695507bSZhong Yang 
76*0695507bSZhong Yang     int GetSongCount() const;
77*0695507bSZhong Yang     SongInfo GetSongInfo(int index) const;
78*0695507bSZhong Yang     const UTrackInfo& GetItem(int index) const;
79*0695507bSZhong Yang     int GetCurrentIndex() const;                //获取正在播放的曲目在m_all_tracks_list中的序号
80*0695507bSZhong Yang     void SetCurrentSong(const SongInfo& song);  //设置正在播放的曲目,将其在m_all_tracks_list中的序号保存起来
81*0695507bSZhong Yang     void UpdateAllTracks();                     //从CSongDataManager中更新所有曲目信息
82*0695507bSZhong Yang     bool IsLoading() const { return m_loading; }
83*0695507bSZhong Yang     void GetSongList(std::vector<SongInfo>& song_list) const;
84*0695507bSZhong Yang 
85*0695507bSZhong Yang private:
86*0695507bSZhong Yang     CUiAllTracksMgr();
87*0695507bSZhong Yang     static CUiAllTracksMgr m_instance;
88*0695507bSZhong Yang 
89*0695507bSZhong Yang     std::vector<UTrackInfo> m_all_tracks_list;  //所有曲目信息列表
90*0695507bSZhong Yang     bool m_loading{};
91*0695507bSZhong Yang     int m_current_index{ -1 };              //正在播放的曲目在m_all_tracks_list中的序号
92*0695507bSZhong Yang };
93