xref: /MusicPlayer2/MusicPlayer2/ListItem.cpp (revision 965ce478a79b0d21e8a6e2ade0490efa175855dd)
1 #include "stdafx.h"
2 #include "ListItem.h"
3 #include "MusicPlayer2.h"
4 #include "CRecentList.h"
5 #include "FilePathHelper.h"
6 #include "SongDataManager.h"
7 #include "SongInfoHelper.h"
8 
9 
ListItem(ListType _type,wstring _path,CMediaClassifier::ClassificationType _medialib_type)10 ListItem::ListItem(ListType _type, wstring _path, CMediaClassifier::ClassificationType _medialib_type)
11     : type(_type), path(_path), medialib_type(_medialib_type)
12 {
13 }
14 
GetDefaultSortMode() const15 SortMode ListItem::GetDefaultSortMode() const
16 {
17     if (sort_mode != SM_UNSORT)
18         return sort_mode;
19     if (empty() || type == LT_PLAYLIST)
20         return SM_UNSORT;
21     if (type == LT_FOLDER)
22         return SM_U_FILE;
23     if (type == LT_MEDIA_LIB)
24     {
25         // 唱片集默认按音轨号排序
26         if (type == CMediaClassifier::CT_ALBUM)
27             return SM_U_TRACK;
28         // 其他默认按路径排序
29         else
30             return SM_U_PATH;
31     }
32     ASSERT(FALSE);
33     return SM_UNSORT;
34 }
35 
GetTypeDisplayName() const36 wstring ListItem::GetTypeDisplayName() const
37 {
38     switch (type)
39     {
40     case LT_FOLDER: return theApp.m_str_table.LoadText(L"TXT_FOLDER");
41     case LT_PLAYLIST: return theApp.m_str_table.LoadText(L"TXT_PLAYLIST");
42     case LT_MEDIA_LIB:
43         switch (medialib_type)
44         {
45         case CMediaClassifier::CT_ARTIST: return theApp.m_str_table.LoadText(L"TXT_ARTIST");
46         case CMediaClassifier::CT_ALBUM: return theApp.m_str_table.LoadText(L"TXT_ALBUM");
47         case CMediaClassifier::CT_GENRE: return theApp.m_str_table.LoadText(L"TXT_GENRE");
48         case CMediaClassifier::CT_YEAR: return theApp.m_str_table.LoadText(L"TXT_YEAR");
49         case CMediaClassifier::CT_TYPE: return theApp.m_str_table.LoadText(L"TXT_FILE_TYPE");
50         case CMediaClassifier::CT_BITRATE: return theApp.m_str_table.LoadText(L"TXT_BITRATE");
51         case CMediaClassifier::CT_RATING: return theApp.m_str_table.LoadText(L"TXT_RATING");
52         case CMediaClassifier::CT_NONE: return theApp.m_str_table.LoadText(L"TXT_MEDIA_LIB");
53         }
54     }
55     ASSERT(FALSE);
56     return wstring();
57 }
58 
GetTypeIcon() const59 IconMgr::IconType ListItem::GetTypeIcon() const
60 {
61     switch (type)
62     {
63     case LT_FOLDER: return IconMgr::IconType::IT_Folder;
64     case LT_PLAYLIST:
65         if (CRecentList::IsSpecPlaylist(*this, CRecentList::PT_FAVOURITE))
66             return  IconMgr::IconType::IT_Favorite_On;
67         else
68             return IconMgr::IconType::IT_Playlist;
69     case LT_MEDIA_LIB:
70         switch (medialib_type)
71         {
72         case CMediaClassifier::CT_ARTIST: return IconMgr::IconType::IT_Artist;
73         case CMediaClassifier::CT_ALBUM: return IconMgr::IconType::IT_Album;
74         case CMediaClassifier::CT_GENRE: return IconMgr::IconType::IT_Genre;
75         case CMediaClassifier::CT_YEAR: return IconMgr::IconType::IT_Year;
76         case CMediaClassifier::CT_TYPE: return IconMgr::IconType::IT_File_Relate;
77         case CMediaClassifier::CT_BITRATE: return IconMgr::IconType::IT_Bitrate;
78         case CMediaClassifier::CT_RATING: return IconMgr::IconType::IT_Star;
79         case CMediaClassifier::CT_NONE: return IconMgr::IconType::IT_Media_Lib;
80         }
81     }
82     ASSERT(FALSE);
83     return IconMgr::IconType::IT_App;
84 }
85 
GetDisplayName() const86 wstring ListItem::GetDisplayName() const
87 {
88     switch (type)
89     {
90     case LT_FOLDER:
91         if (!path.empty())
92         {
93             wstring tmp{ path };
94             tmp.pop_back();
95             return tmp;
96         }
97         else
98             return L"error folder path";
99     case LT_PLAYLIST:
100         if (CRecentList::IsSpecPlaylist(*this, CRecentList::PT_DEFAULT))
101             return theApp.m_str_table.LoadText(L"TXT_PLAYLIST_NAME_DEFAULT");
102         if (CRecentList::IsSpecPlaylist(*this, CRecentList::PT_FAVOURITE))
103             return theApp.m_str_table.LoadText(L"TXT_PLAYLIST_NAME_FAVOURITE");
104         if (CRecentList::IsSpecPlaylist(*this, CRecentList::PT_TEMP))
105             return theApp.m_str_table.LoadText(L"TXT_PLAYLIST_NAME_TEMP");
106         return CFilePathHelper(path).GetFileNameWithoutExtension();
107     case LT_MEDIA_LIB:
108         if (medialib_type == CMediaClassifier::CT_NONE)     // 所有曲目
109             return theApp.m_str_table.LoadText(L"TXT_ALL_TRACKS");
110         if (path == STR_OTHER_CLASSIFY_TYPE)                // 显示名称为<其他>时
111             return theApp.m_str_table.LoadText(L"TXT_CLASSIFY_OTHER");
112         if (!path.empty())                                  // 直接返回项目名
113             return path;
114         // 项目名path为空表示项目<未知xxx>
115         switch (medialib_type)
116         {
117         case CMediaClassifier::CT_ARTIST: return theApp.m_str_table.LoadText(L"TXT_EMPTY_ARTIST");
118         case CMediaClassifier::CT_ALBUM: return theApp.m_str_table.LoadText(L"TXT_EMPTY_ALBUM");
119         case CMediaClassifier::CT_GENRE: return theApp.m_str_table.LoadText(L"TXT_EMPTY_GENRE");
120         case CMediaClassifier::CT_YEAR: return theApp.m_str_table.LoadText(L"TXT_EMPTY_YEAR");
121         }
122     }
123     ASSERT(FALSE);
124     return wstring();
125 }
126 
GetLastTrackDisplayName() const127 wstring ListItem::GetLastTrackDisplayName() const
128 {
129     if (last_track.path.empty())
130         return L"-";
131     SongInfo song_info = CSongDataManager::GetInstance().GetSongInfo(last_track);
132     if (song_info.file_path.empty())
133         song_info.file_path = last_track.path;
134     wstring name = CSongInfoHelper::GetDisplayStr(song_info, theApp.m_media_lib_setting_data.display_format);
135     return name;
136 }
137 
138