📄 musictree.cpp
字号:
gotOne = true;
TreeView_Expand(m_hMusicView, m_hAllItem, TVE_EXPAND);
}
}
}
}
data.m_iLevel = 3;
data.m_pArtist = NULL;
data.m_pAlbum = NULL;
const vector<PlaylistItem*>* trackList;
vector<PlaylistItem*>::const_iterator track;
trackList = m_context->catalog->GetUnsortedMusic();
for(track = trackList->begin();
track != trackList->end();
track++)
{
data.m_pTrack = (*track);
metadata = (*track)->GetMetaData();
if (metadata.Title() == string(" ") ||
metadata.Title().length() == 0)
insert.item.pszText = "Unknown";
else
insert.item.pszText = (char *)(metadata.Title().c_str());
insert.item.cchTextMax = metadata.Title().length();
insert.item.iImage = 4;
insert.item.iSelectedImage = 4;
insert.item.cChildren= 0;
insert.item.lParam = (LPARAM) new TreeData(data);
insert.hInsertAfter = TVI_SORT;
insert.hParent = m_hAllItem;
TreeView_InsertItem(m_hMusicView, &insert);
}
//TreeView_SortChildren(m_hMusicView, m_hAllItem, 0);
delete m_fillAllThread;
}
void MusicBrowserUI::FillUncatTracks()
{
TV_INSERTSTRUCT insert;
const vector<PlaylistItem*>* trackList;
vector<PlaylistItem *>::const_iterator track;
TreeData data;
MetaData metadata;
insert.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_CHILDREN |
TVIF_SELECTEDIMAGE | TVIF_PARAM;
data.m_iLevel = 3;
data.m_pArtist = NULL;
data.m_pAlbum = NULL;
trackList = m_context->catalog->GetUnsortedMusic();
for(track = trackList->begin();
track != trackList->end();
track++)
{
data.m_pTrack = (*track);
metadata = (*track)->GetMetaData();
if (metadata.Title() == string(" ") ||
metadata.Title().length() == 0)
insert.item.pszText = "Unknown";
else
insert.item.pszText = (char *)(metadata.Title().c_str());
insert.item.cchTextMax = metadata.Title().length();
insert.item.iImage = 4;
insert.item.iSelectedImage = 4;
insert.item.cChildren= 0;
insert.item.lParam = (LPARAM) new TreeData(data);
insert.hInsertAfter = TVI_LAST;
insert.hParent = m_hUncatItem;
TreeView_InsertItem(m_hMusicView, &insert);
}
TreeView_SortChildren(m_hMusicView, m_hUncatItem, 0);
}
void MusicBrowserUI::FillPlaylists()
{
TV_INSERTSTRUCT insert;
vector<string>::const_iterator url;
const vector<string>* playlists;
char szBase[MAX_PATH];
TreeData data;
insert.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_CHILDREN |
TVIF_SELECTEDIMAGE | TVIF_PARAM;
playlists = m_context->catalog->GetPlaylists();
data.m_iLevel = 1;
for(url = playlists->begin();
url != playlists->end();
url++)
{
_splitpath((char *)(*url).c_str(), NULL, NULL, szBase, NULL);
data.m_oPlaylistName = string(szBase);
data.m_oPlaylistPath = *url;
insert.item.pszText = szBase;
insert.item.cchTextMax = strlen(szBase);
insert.item.iImage = 1;
insert.item.iSelectedImage = 1;
insert.item.cChildren= 0;
insert.item.lParam = (LPARAM) new TreeData(data);
insert.hInsertAfter = TVI_SORT;
insert.hParent = m_hPlaylistItem;
TreeView_InsertItem(m_hMusicView, &insert);
}
insert.item.pszText = kNewPlaylist;
insert.item.cchTextMax = strlen(kNewPlaylist);
insert.item.iImage = 1;
insert.item.iSelectedImage = 1;
insert.item.cChildren= 0;
insert.item.lParam = NULL;
insert.hInsertAfter = TVI_FIRST;
insert.hParent = m_hPlaylistItem;
m_hNewPlaylistItem = TreeView_InsertItem(m_hMusicView, &insert);
}
void MusicBrowserUI::FillRelatable()
{
TV_INSERTSTRUCT insert;
StreamList streams;
StreamList::iterator i;
TreeData data;
insert.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_CHILDREN |
TVIF_SELECTEDIMAGE | TVIF_PARAM;
m_context->aps->APSGetStreams(&streams);
data.m_iLevel = 1;
for(i = streams.begin(); i != streams.end(); i++)
{
PlaylistItem* stream = new PlaylistItem((*i).second.c_str());
MetaData metadata;
metadata.SetTitle((*i).first.c_str());
stream->SetMetaData(&metadata);
data.m_pStream = stream;
insert.item.pszText = (char*)stream->GetMetaData().Title().c_str();
insert.item.cchTextMax = strlen(insert.item.pszText);
insert.item.iImage = 8;
insert.item.iSelectedImage = 8;
insert.item.cChildren= 0;
insert.item.lParam = (LPARAM) new TreeData(data);
insert.hInsertAfter = TVI_SORT;
insert.hParent = m_hRelatableItem;
TreeView_InsertItem(m_hMusicView, &insert);
}
}
void MusicBrowserUI::FillFavorites()
{
TV_INSERTSTRUCT insert;
vector<PlaylistItem*>::const_iterator url;
const vector<PlaylistItem*>* streams;
TreeData data;
insert.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_CHILDREN |
TVIF_SELECTEDIMAGE | TVIF_PARAM;
streams = m_context->catalog->GetStreams();
data.m_iLevel = 1;
for(url = streams->begin();
url != streams->end();
url++)
{
PlaylistItem* stream = new PlaylistItem(**url);
MetaData metadata;
//stream->SetURL(urls[i]);
//metadata.SetTitle(stations[i]);
//metadata.SetArtist("Wired Planet");
//stream->SetMetaData(&metadata);
data.m_pStream = stream;
insert.item.pszText = (char*)stream->GetMetaData().Title().c_str();
insert.item.cchTextMax = strlen(insert.item.pszText);
insert.item.iImage = 8;
insert.item.iSelectedImage = 8;
insert.item.cChildren= 0;
insert.item.lParam = (LPARAM) new TreeData(data);
insert.hInsertAfter = TVI_SORT;
insert.hParent = m_hFavoritesItem;
TreeView_InsertItem(m_hMusicView, &insert);
}
insert.item.pszText = kNewFavorite;
insert.item.cchTextMax = strlen(insert.item.pszText);
insert.item.iImage = 8;
insert.item.iSelectedImage = 8;
insert.item.cChildren= 0;
insert.item.lParam = NULL;
insert.hInsertAfter = TVI_FIRST;
insert.hParent = m_hFavoritesItem;
m_hNewFavoritesItem = TreeView_InsertItem(m_hMusicView, &insert);
}
void MusicBrowserUI::FillStreams()
{
TV_INSERTSTRUCT insert;
insert.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_CHILDREN |
TVIF_SELECTEDIMAGE | TVIF_PARAM;
insert.item.pszText = kFavorites;
insert.item.cchTextMax = lstrlen(insert.item.pszText);
insert.item.iImage = 14;
insert.item.iSelectedImage = 14;
insert.item.cChildren= 1;
insert.item.lParam = NULL;
insert.hInsertAfter = TVI_FIRST;
insert.hParent = m_hStreamsItem;
m_hFavoritesItem = TreeView_InsertItem(m_hMusicView, &insert);
insert.item.pszText = kRecommendedStreams;
insert.item.cchTextMax = lstrlen(insert.item.pszText);
insert.item.iImage = 14;
insert.item.iSelectedImage = 14;
insert.item.cChildren = 1;
insert.item.lParam = NULL;
insert.hInsertAfter = TVI_LAST;
insert.hParent = m_hStreamsItem;
m_hRelatableItem = TreeView_InsertItem(m_hMusicView, &insert);
m_fillStreamsThread = Thread::CreateThread();
m_fillStreamsThread->Create(MusicBrowserUI::streams_timer, this);
//m_context->timerManager->StartTimer(&m_streamsTimer,
// MusicBrowserUI::streams_timer,
// 60,
// this);
}
void MusicBrowserUI::FillPortables()
{
TV_INSERTSTRUCT insert;
char* buffer = NULL;
uint32 size = 0;
set<string> portablePlayers;
TreeData data;
uint32 count = 0;
HTREEITEM item;
// remove old ones if they exist
while(item = TreeView_GetChild(m_hMusicView, m_hPortableItem))
{
TreeView_DeleteItem(m_hMusicView, item);
}
insert.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_CHILDREN |
TVIF_SELECTEDIMAGE | TVIF_PARAM;
if(kError_BufferTooSmall == m_context->prefs->GetPrefString(kUsersPortablePlayersPref, buffer, &size))
{
buffer = (char*)malloc(size);
if(buffer)
{
m_context->prefs->GetPrefString(kUsersPortablePlayersPref, buffer, &size);
char* cp = buffer;
char* name = cp;
while(cp = strchr(cp, ';'))
{
*cp = 0x00;
portablePlayers.insert(string(name));
cp++;
name = cp;
}
if(*name)
{
portablePlayers.insert(string(name));
}
free(buffer);
}
}
uint32 i = 0;
DeviceInfo device;
while(IsntError(m_plm->GetSupportedPortables(&device, i++)))
{
if( portablePlayers.end() !=
portablePlayers.find(string(device.GetPluginName())) )
{
string displayString;
displayString = device.GetManufacturer();
displayString += " ";
displayString += device.GetDevice();
if(displayString.size())
{
insert.item.pszText = (char*)displayString.c_str();
}
else
{
insert.item.pszText = (char*)device.GetPluginName();
}
data.m_pPortable = new DeviceInfo(device);
insert.item.cchTextMax = strlen(insert.item.pszText);
insert.item.iImage = 7;
insert.item.iSelectedImage = 7;
insert.item.cChildren= 0;
insert.item.lParam = (LPARAM) new TreeData(data);
insert.hInsertAfter = TVI_SORT;
insert.hParent = m_hPortableItem;
TreeView_InsertItem(m_hMusicView, &insert);
count++;
}
}
if(!count)
{
insert.item.pszText = kNewPortable;
insert.item.cchTextMax = strlen(insert.item.pszText);
insert.item.iImage = 7;
insert.item.iSelectedImage = 7;
insert.item.cChildren= 0;
insert.item.lParam = NULL;
insert.hInsertAfter = TVI_FIRST;
insert.hParent = m_hPortableItem;
m_hNewPortableItem = TreeView_InsertItem(m_hMusicView, &insert);
}
}
void MusicBrowserUI::streams_timer(void *arg)
{
MusicBrowserUI *ui = (MusicBrowserUI*)arg;
ui->StreamsTimer();
}
void MusicBrowserUI::StreamsTimer()
{
Error error;
Http streamDownload(m_context);
string page;
vector<FreeAmpStreamInfo> list;
FreeAmpStreams freeampStream;
const string URL = "http://www.freeamp.org/streams.xml";
error = streamDownload.DownloadToString(URL, page);
if(IsntError(error))
{
freeampStream.ParseStreamXML(page, list);
if(list.size() > 0)
{
UpdateStreams(list);
}
}
}
void MusicBrowserUI::UpdateStreams(vector<FreeAmpStreamInfo> &list)
{
HTREEITEM treeItem;
while(treeItem = TreeView_GetNextSibling(m_hMusicView, m_hRelatableItem))
{
TreeView_DeleteItem(m_hMusicView, treeItem);
}
TV_INSERTSTRUCT insert;
TreeData data;
insert.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_CHILDREN |
TVIF_SELECTEDIMAGE | TVIF_PARAM;
data.m_iLevel = 1;
vector<FreeAmpStreamInfo>::iterator i = list.begin();
for(; i != list.end(); i++)
{
PlaylistItem* stream = new PlaylistItem;
MetaData metadata;
stream->SetURL(i->m_streamUrl.c_str());
stream->SetWebURL(i->m_webUrl.c_str());
metadata.SetTitle(i->m_name.c_str());
metadata.SetArtist(i->m_webUrl.c_str());
metadata.SetComment(i->m_desc.c_str());
stream->SetMetaData(&metadata);
data.m_pStream = stream;
insert.item.pszText = (char*)i->m_name.c_str();
insert.item.cchTextMax = strlen(insert.item.pszText);
insert.item.iImage = 8;
insert.item.iSelectedImage = 8;
insert.item.cChildren= 0;
insert.item.lParam = (LPARAM) new TreeData(data);
insert.hInsertAfter = TVI_LAST;
insert.hParent = CreateStreamFolder(i->m_treePath);
TreeView_InsertItem(m_hMusicView, &insert);
}
if(m_fillStreamsThread)
{
delete m_fillStreamsThread;
m_fillStreamsThread = NULL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -