xref: /MusicPlayer2/MusicPlayer2/UiMediaLibItemMgr.h (revision c30ae42e492567f77e5deb36672c5511403a74c1)
1 #pragma once
2 #include <map>
3 #include "MediaLibHelper.h"
4 
5 class CUiMediaLibItemMgr
6 {
7 public:
8     ~CUiMediaLibItemMgr();
9     static CUiMediaLibItemMgr& Instance();
10 
11     void Init();
12 
13     int GetItemCount(CMediaClassifier::ClassificationType type) const;                              //获取指定类别下项目的数量
14     std::wstring GetItemDisplayName(CMediaClassifier::ClassificationType type, int index) const;    //获取指定类别下项目显示到界面中的名称
15     const std::wstring& GetItemName(CMediaClassifier::ClassificationType type, int index) const;    //获取指定项的原始名称,如果是<未知xxx>返回的是空
16     int GetItemSongCount(CMediaClassifier::ClassificationType type, int index) const;               //获取指定类别下项目的曲目数量
17     void SetCurrentName(CMediaClassifier::ClassificationType type, const std::wstring& name);       //设置指定类别下正在播放项目的名称,其中name为原始名称
18     int GetCurrentIndex(CMediaClassifier::ClassificationType type);                                 //获取指定类别下正在播放项目的序号
19     bool IsLoading() const { return m_loading; }
20     bool IsInited() const { return m_inited; }
21 
22 private:
23     CUiMediaLibItemMgr();
24     void GetClassifiedMeidaLibItemList(CMediaClassifier::ClassificationType type);
25 
26     static CUiMediaLibItemMgr m_instance;
27     struct ItemInfo
28     {
29         std::wstring name;
30         int count{};
31     };
32 
33     const ItemInfo& GetItemInfo(CMediaClassifier::ClassificationType type, int index) const;
34 
35     std::map<CMediaClassifier::ClassificationType, std::vector<ItemInfo>> m_item_map;   //保存媒体库中所有分类的名称列表
36     bool m_loading{};
37     bool m_inited{};                        //如果已经初始化过,则为true
38     std::map<CMediaClassifier::ClassificationType, int> m_current_index_map;    //保存媒体库模式下每种模式正在播放的曲目
39     std::map<CMediaClassifier::ClassificationType, std::wstring> m_current_name_map;    //保存媒体库模式下每种模式正在播放的曲目
40     mutable std::shared_mutex m_shared_mutex;
41 };
42 
43 
44 class CUiMyFavouriteItemMgr
45 {
46 public:
47     ~CUiMyFavouriteItemMgr();
48     static CUiMyFavouriteItemMgr& Instance();
49 
50     int GetSongCount() const;
51     const SongInfo& GetSongInfo(int index) const;
52     void UpdateMyFavourite();
53     bool IsLoading() const { return m_loading; }
54     bool IsInited() const { return m_inited; }
55     void GetSongList(std::vector<SongInfo>& song_list) const;
56     bool Contains(const SongInfo& song) const;
57 
58 private:
59     CUiMyFavouriteItemMgr();
60     static CUiMyFavouriteItemMgr m_instance;
61 
62     vector<SongInfo> m_may_favourite_song_list;     //“我喜欢的音乐”列表
63     bool m_loading{};
64     bool m_inited{};                        //如果已经初始化过,则为true
65     mutable std::shared_mutex m_shared_mutex;
66 
67 };
68 
69 
70 class CUiAllTracksMgr
71 {
72 public:
73     ~CUiAllTracksMgr();
74     static CUiAllTracksMgr& Instance();
75 
76     //用于在UI中显示的曲目信息
77     struct UTrackInfo
78     {
79         SongKey song_key;
80         std::wstring name;
81         Time length;
82         bool is_favourite{};
83     };
84 
85     int GetSongCount() const;
86     SongInfo GetSongInfo(int index) const;
87     const UTrackInfo& GetItem(int index) const;
88     int GetCurrentIndex() const;                //获取正在播放的曲目在m_all_tracks_list中的序号
89     void SetCurrentSong(const SongInfo& song);  //设置正在播放的曲目,将其在m_all_tracks_list中的序号保存起来
90     void UpdateAllTracks();                     //从CSongDataManager中更新所有曲目信息
91     bool IsLoading() const { return m_loading; }
92     bool IsInited() const { return m_inited; }
93     void GetSongList(std::vector<SongInfo>& song_list) const;
94     void AddOrRemoveMyFavourite(int index);     //仅更新UI中显示的“我喜欢”的状态,不更新到“我喜欢的音乐”播放列表中
95 
96 private:
97     CUiAllTracksMgr();
98     static CUiAllTracksMgr m_instance;
99 
100     std::vector<UTrackInfo> m_all_tracks_list;  //所有曲目信息列表
101     bool m_loading{};                       //如果正在初始化中,则为true
102     int m_current_index{ -1 };              //正在播放的曲目在m_all_tracks_list中的序号
103     bool m_inited{};                        //如果已经初始化过,则为true
104     mutable std::shared_mutex m_shared_mutex;
105 };
106