📄 opensaveplaylists.cpp
字号:
"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 + -