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