xref: /MusicPlayer2/MusicPlayer2/UiMediaLibItemMgr.h (revision f02766e1e8812d3a83374af05646bf83b0c58e76)
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);                                 //获取指定类别下正在播放项目的序号
19*f02766e1Szhongyang219     bool IsLoading() const { return m_loading; }
20*f02766e1Szhongyang219     bool IsInited() const { return m_inited; }
21ee577835SZhong Yang 
22ee577835SZhong Yang private:
23ee577835SZhong Yang     CUiMediaLibItemMgr();
24ee577835SZhong Yang     void GetClassifiedMeidaLibItemList(CMediaClassifier::ClassificationType type);
25ee577835SZhong Yang 
26ee577835SZhong Yang     static CUiMediaLibItemMgr m_instance;
27cda444b5SZhong Yang     struct ItemInfo
28cda444b5SZhong Yang     {
29cda444b5SZhong Yang         std::wstring name;
30cda444b5SZhong Yang         int count{};
31cda444b5SZhong Yang     };
32cda444b5SZhong Yang 
33cda444b5SZhong Yang     const ItemInfo& GetItemInfo(CMediaClassifier::ClassificationType type, int index) const;
34cda444b5SZhong Yang 
35cda444b5SZhong Yang     std::map<CMediaClassifier::ClassificationType, std::vector<ItemInfo>> m_item_map;   //保存媒体库中所有分类的名称列表
36ee577835SZhong Yang     bool m_loading{};
37*f02766e1Szhongyang219     bool m_inited{};                        //如果已经初始化过,则为true
38ee577835SZhong Yang     std::map<CMediaClassifier::ClassificationType, int> m_current_index_map;    //保存媒体库模式下每种模式正在播放的曲目
39ee577835SZhong Yang     std::map<CMediaClassifier::ClassificationType, std::wstring> m_current_name_map;    //保存媒体库模式下每种模式正在播放的曲目
40519fa9c3SZhong Yang     mutable std::shared_mutex m_shared_mutex;
41ee577835SZhong Yang };
42ee577835SZhong Yang 
43817fc88aSZhong Yang 
44817fc88aSZhong Yang class CUiMyFavouriteItemMgr
45817fc88aSZhong Yang {
46817fc88aSZhong Yang public:
47817fc88aSZhong Yang     ~CUiMyFavouriteItemMgr();
48817fc88aSZhong Yang     static CUiMyFavouriteItemMgr& Instance();
49817fc88aSZhong Yang 
50817fc88aSZhong Yang     int GetSongCount() const;
51817fc88aSZhong Yang     const SongInfo& GetSongInfo(int index) const;
52817fc88aSZhong Yang     void UpdateMyFavourite();
53817fc88aSZhong Yang     bool IsLoading() const { return m_loading; }
54*f02766e1Szhongyang219     bool IsInited() const { return m_inited; }
554a21136cSZhong Yang     void GetSongList(std::vector<SongInfo>& song_list) const;
560d9f5172SZhong Yang     bool Contains(const SongInfo& song) const;
57817fc88aSZhong Yang 
58817fc88aSZhong Yang private:
59817fc88aSZhong Yang     CUiMyFavouriteItemMgr();
60817fc88aSZhong Yang     static CUiMyFavouriteItemMgr m_instance;
61817fc88aSZhong Yang 
62817fc88aSZhong Yang     vector<SongInfo> m_may_favourite_song_list;     //“我喜欢的音乐”列表
63817fc88aSZhong Yang     bool m_loading{};
64*f02766e1Szhongyang219     bool m_inited{};                        //如果已经初始化过,则为true
65519fa9c3SZhong Yang     mutable std::shared_mutex m_shared_mutex;
66817fc88aSZhong Yang 
67817fc88aSZhong Yang };
68817fc88aSZhong Yang 
690695507bSZhong Yang 
700695507bSZhong Yang class CUiAllTracksMgr
710695507bSZhong Yang {
720695507bSZhong Yang public:
730695507bSZhong Yang     ~CUiAllTracksMgr();
740695507bSZhong Yang     static CUiAllTracksMgr& Instance();
750695507bSZhong Yang 
760695507bSZhong Yang     //用于在UI中显示的曲目信息
770695507bSZhong Yang     struct UTrackInfo
780695507bSZhong Yang     {
790695507bSZhong Yang         SongKey song_key;
800695507bSZhong Yang         std::wstring name;
810695507bSZhong Yang         Time length;
820d9f5172SZhong Yang         bool is_favourite{};
830695507bSZhong Yang     };
840695507bSZhong Yang 
850695507bSZhong Yang     int GetSongCount() const;
860695507bSZhong Yang     SongInfo GetSongInfo(int index) const;
870695507bSZhong Yang     const UTrackInfo& GetItem(int index) const;
880695507bSZhong Yang     int GetCurrentIndex() const;                //获取正在播放的曲目在m_all_tracks_list中的序号
890695507bSZhong Yang     void SetCurrentSong(const SongInfo& song);  //设置正在播放的曲目,将其在m_all_tracks_list中的序号保存起来
900695507bSZhong Yang     void UpdateAllTracks();                     //从CSongDataManager中更新所有曲目信息
910695507bSZhong Yang     bool IsLoading() const { return m_loading; }
92*f02766e1Szhongyang219     bool IsInited() const { return m_inited; }
930695507bSZhong Yang     void GetSongList(std::vector<SongInfo>& song_list) const;
940d9f5172SZhong Yang     void AddOrRemoveMyFavourite(int index);     //仅更新UI中显示的“我喜欢”的状态,不更新到“我喜欢的音乐”播放列表中
950695507bSZhong Yang 
960695507bSZhong Yang private:
970695507bSZhong Yang     CUiAllTracksMgr();
980695507bSZhong Yang     static CUiAllTracksMgr m_instance;
990695507bSZhong Yang 
1000695507bSZhong Yang     std::vector<UTrackInfo> m_all_tracks_list;  //所有曲目信息列表
101f6f420a7SZhong Yang     bool m_loading{};                       //如果正在初始化中,则为true
1020695507bSZhong Yang     int m_current_index{ -1 };              //正在播放的曲目在m_all_tracks_list中的序号
103f6f420a7SZhong Yang     bool m_inited{};                        //如果已经初始化过,则为true
104519fa9c3SZhong Yang     mutable std::shared_mutex m_shared_mutex;
1050695507bSZhong Yang };
106