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

📄 opensaveplaylists.cpp

📁 FreeAMP(MP3播放)程序源代码-用来研究MP3解码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                              "not read-only?", BRANDING, MB_OK);                              
           result = false;
        }
        else
        {
            if(addToDB)
            {
                m_context->catalog->AddPlaylist(url); 
            }

            if(m_pParent)
            {
                m_currentListName = oName;
                SetTitles();
            }

            m_bListChanged = false;
            UpdateButtonStates();
        }
    }

    return result;
}

void MusicBrowserUI::OpenPlaylist(void)
{
    int32              i, iOffset = 0;
    PlaylistFormatInfo format;
    char               szFilter[512];
    OPENFILENAME       sOpen;
    char               szFile[MAX_PATH];
        
    for(i = 0; ; i++)
    {
       if (m_plm->GetSupportedPlaylistFormats(&format, i) != kError_NoErr)
          break;
    
       sprintf(szFilter + iOffset, "%s (.%s)", 
            format.GetDescription(),
            format.GetExtension());
       iOffset += strlen(szFilter + iOffset) + 1;     

       sprintf(szFilter + iOffset, "*.%s", 
            format.GetExtension());
       iOffset += strlen(szFilter + iOffset) + 1;     
    }
    
    strcpy(szFilter + iOffset, "All Files (*.*)\0");
    iOffset += strlen(szFilter + iOffset) + 1;     
    strcpy(szFilter + iOffset, "*.*\0");
    iOffset += strlen(szFilter + iOffset) + 1;     
    szFilter[iOffset] = 0;
    
    szFile[0] = 0;
    sOpen.lStructSize = sizeof(OPENFILENAME);
    sOpen.hwndOwner = m_hWnd;
    sOpen.hInstance = NULL;
    sOpen.lpstrFilter = szFilter;
    sOpen.lpstrCustomFilter = NULL;
    sOpen.nMaxCustFilter = 0;
    sOpen.nFilterIndex = 1;
    sOpen.lpstrFile = szFile;
    sOpen.nMaxFile = MAX_PATH;
    sOpen.lpstrFileTitle = NULL;
    sOpen.lpstrInitialDir = NULL;
    sOpen.lpstrTitle = "Open Playlist";
    sOpen.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
    sOpen.lpstrDefExt = "m3u";
      
    if (GetOpenFileName(&sOpen))
    {
        char   url[MAX_PATH + 8];
        uint32 len = sizeof(url);

        FilePathToURL(sOpen.lpstrFile, url, &len);

        string playlist = url;
        
        EditPlaylist(playlist);
    }
}

void MusicBrowserUI::NewPlaylist(void)
{
    MusicBrowserUI *pNew;
    
    if(m_pParent)
    {
       pNew = new MusicBrowserUI(m_context, m_pParent, m_hWnd, string(""));
       m_pParent->AddMusicBrowserWindow(pNew);
    }   
    else   
    {
       pNew = new MusicBrowserUI(m_context, this, m_hWnd, string(""));
       AddMusicBrowserWindow(pNew);
    }   
       
    pNew->Init(SECONDARY_UI_STARTUP);
}

void MusicBrowserUI::EditPlaylist(const string &oList)
{
    MusicBrowserUI *pNew;
    
    if(m_pParent)
    {
       pNew = new MusicBrowserUI(m_context, m_pParent, m_hWnd, oList);
       m_pParent->AddMusicBrowserWindow(pNew);
    }   
    else   
    {
       pNew = new MusicBrowserUI(m_context, this, m_hWnd, oList);
       AddMusicBrowserWindow(pNew);
    }   
       
    pNew->Init(SECONDARY_UI_STARTUP);
}

void MusicBrowserUI::EditPortablePlaylist(DeviceInfo* device)
{
    MusicBrowserUI *pNew;
    
    if(m_pParent)
    {
       pNew = new MusicBrowserUI(m_context, m_pParent, m_hWnd, device);
       m_pParent->AddMusicBrowserWindow(pNew);
    }   
    else   
    {
       pNew = new MusicBrowserUI(m_context, this, m_hWnd, device);
       AddMusicBrowserWindow(pNew);
    }   
       
    pNew->Init(SECONDARY_UI_STARTUP);
}

void MusicBrowserUI::SavePortablePlaylist()
{
    if(m_plm->IsPortableAvailable(m_portableDevice))
    {
        m_plm->SyncPortablePlaylist(m_portableDevice);
    }
}

void MusicBrowserUI::ImportTracksAndPlaylists(void)
{
    PlaylistFormatInfo format;
    int32 i, iOffset = 0;
    
    char szFilter[1024] = "MPEG Audio Streams (.mp1;.mp2;.mp3;.mpp)\0"
                          "*.mp1;*.mp2;*.mp3;*.mpp\0"
                          "Ogg/Vorbis Streams (.ogg)\0"
                          "*.ogg\0";

    // we need a way to iterate LMCs...
    iOffset += strlen(szFilter) + 1; 
    iOffset += strlen(szFilter + iOffset) + 1;  
    iOffset += strlen(szFilter + iOffset) + 1;  
    iOffset += strlen(szFilter + iOffset) + 1;  
        
    for(i = 0; ; i++)
    {
       if (m_plm->GetSupportedPlaylistFormats(&format, i) != kError_NoErr)
          break;
    
       sprintf(szFilter + iOffset, "%s (.%s)", 
            format.GetDescription(),
            format.GetExtension());
       iOffset += strlen(szFilter + iOffset) + 1;     

       sprintf(szFilter + iOffset, "*.%s", 
            format.GetExtension());
       iOffset += strlen(szFilter + iOffset) + 1;     
    }
    
    strcpy(szFilter + iOffset, "All Files (*.*)\0");
    iOffset += strlen(szFilter + iOffset) + 1;     
    strcpy(szFilter + iOffset, "*.*\0");
    iOffset += strlen(szFilter + iOffset) + 1;     
    szFilter[iOffset] = 0;
    
    vector<string> oFileList;

    if (FileOpenDialog(m_hWnd, "Import Tracks and Playlists",
                       szFilter, 
                       &oFileList,
                       false) )
    {
        vector<string>::iterator i;

        for(i = oFileList.begin(); i != oFileList.end(); i++)
        {
            char* ext = NULL;

            ext = strrchr((*i).c_str(), '.');
            
            if(ext && m_plm->IsSupportedPlaylistFormat(++ext))
                m_context->catalog->AddPlaylist((*i).c_str());
            else
                m_context->catalog->AddSong((*i).c_str());
        }
    }
}


bool MusicBrowserUI::ExportPlaylist(string &oPlaylist)
{
    bool                result = false;
    int32               i, iOffset = 0;
    uint32              size;
    PlaylistFormatInfo  format;
    char                szFilter[512];
    OPENFILENAME        sOpen;
    char                szPlaylistDir[MAX_PATH];
    char                szFile[MAX_PATH] = {0x00};
    char                szInitialDir[MAX_PATH] = {0x00};
    char                szExt[MAX_PATH] = {0x00};
    bool                addToDB = false;
    
    size = MAX_PATH;
    m_context->prefs->GetPrefString(kOpenSaveDirPref, szInitialDir, &size);

    for(i = 0; ; i++)
    {
       if (m_plm->GetSupportedPlaylistFormats(&format, i) != kError_NoErr)
          break;
    
       sprintf(szFilter + iOffset, "%s (.%s)", 
            format.GetDescription(),
            format.GetExtension());
       iOffset += strlen(szFilter + iOffset) + 1;     

       sprintf(szFilter + iOffset, "*.%s", 
            format.GetExtension());
       iOffset += strlen(szFilter + iOffset) + 1;     
    }
    
    strcpy(szFilter + iOffset, "All Files (*.*)\0");
    iOffset += strlen(szFilter + iOffset) + 1;     
    strcpy(szFilter + iOffset, "*.*\0");
    iOffset += strlen(szFilter + iOffset) + 1;     
    szFilter[iOffset] = 0;

    strcpy(szPlaylistDir, oPlaylist.c_str());

    char* cp = NULL;

    // this should be a url so search for /
    if(cp = strrchr(szPlaylistDir, '/'))
    {
        strcpy(szFile, cp + 1);
    }
    else if(cp = strrchr(szPlaylistDir, '\\'))
    {
        strcpy(szFile, cp + 1);
    }

    if(cp = strrchr(szFile, '.'))
    {
        *cp = 0x00; // get rid of extension
    }

    sOpen.lStructSize = sizeof(OPENFILENAME);
    sOpen.hwndOwner = m_hWnd;
    sOpen.hInstance = NULL;
    sOpen.lpstrFilter = szFilter;
    sOpen.lpstrCustomFilter = NULL;
    sOpen.nMaxCustFilter = 0;
    sOpen.nFilterIndex = 1;
    sOpen.lpstrInitialDir = szInitialDir;
    sOpen.lpstrFile = szFile;
    sOpen.nMaxFile = MAX_PATH;
    sOpen.lpstrFileTitle = NULL;
    sOpen.lpstrTitle = "Export Playlist As";
    sOpen.Flags = OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY |
                  OFN_PATHMUSTEXIST;
    sOpen.lpstrDefExt = "m3u";
  
    if(GetSaveFileName(&sOpen))
    {
        result =  true;
    }

    if(result)
    {
        vector<PlaylistItem*> items;

        m_plm->ReadPlaylist((char*)oPlaylist.c_str(), &items);

        char   url[MAX_PATH + 7]; // make room for file://
        uint32 len = sizeof(url);
    
        FilePathToURL(sOpen.lpstrFile, url, &len);
        
        if(IsError(m_plm->WritePlaylist(url, &items)))
        {
           MessageBox(m_hWnd, "Cannot save playlist to disk. Make sure there "
                              "is room on the drive or that the directory is "
                              "not read-only?", BRANDING, MB_OK);                              
           result = false;
        }

        vector<PlaylistItem*>::iterator i;

        for(i = items.begin(); i != items.end(); i++)
            delete (*i);
    }

    return result;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -