⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 musictree.cpp

📁 FreeAMP(MP3播放)程序源代码-用来研究MP3解码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
					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 + -