use Info::Tags in tag editor
This commit is contained in:
@@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
#include "display.h"
|
#include "display.h"
|
||||||
#include "helpers.h"
|
#include "helpers.h"
|
||||||
|
#include "info.h"
|
||||||
#include "playlist.h"
|
#include "playlist.h"
|
||||||
|
|
||||||
std::string Display::Columns()
|
std::string Display::Columns()
|
||||||
@@ -283,49 +284,17 @@ void Display::Songs(const MPD::Song &s, void *data, Menu<MPD::Song> *menu)
|
|||||||
|
|
||||||
void Display::Tags(const MPD::Song &s, void *data, Menu<MPD::Song> *menu)
|
void Display::Tags(const MPD::Song &s, void *data, Menu<MPD::Song> *menu)
|
||||||
{
|
{
|
||||||
switch (static_cast<Menu<std::string> *>(data)->Choice())
|
size_t i = static_cast<Menu<std::string> *>(data)->Choice();
|
||||||
|
if (i < 11)
|
||||||
{
|
{
|
||||||
case 0:
|
ShowTag(*menu, s.GetTags(Info::Tags[i].Get));
|
||||||
ShowTag(*menu, s.GetTags(&MPD::Song::GetTitle));
|
}
|
||||||
return;
|
else if (i == 12)
|
||||||
case 1:
|
{
|
||||||
ShowTag(*menu, s.GetTags(&MPD::Song::GetArtist));
|
if (s.GetNewName().empty())
|
||||||
return;
|
*menu << s.GetName();
|
||||||
case 2:
|
else
|
||||||
ShowTag(*menu, s.GetTags(&MPD::Song::GetAlbumArtist));
|
*menu << s.GetName() << Config.color2 << " -> " << clEnd << s.GetNewName();
|
||||||
return;
|
|
||||||
case 3:
|
|
||||||
ShowTag(*menu, s.GetTags(&MPD::Song::GetAlbum));
|
|
||||||
return;
|
|
||||||
case 4:
|
|
||||||
ShowTag(*menu, s.GetTags(&MPD::Song::GetDate));
|
|
||||||
return;
|
|
||||||
case 5:
|
|
||||||
ShowTag(*menu, s.GetTags(&MPD::Song::GetTrack));
|
|
||||||
return;
|
|
||||||
case 6:
|
|
||||||
ShowTag(*menu, s.GetTags(&MPD::Song::GetGenre));
|
|
||||||
return;
|
|
||||||
case 7:
|
|
||||||
ShowTag(*menu, s.GetTags(&MPD::Song::GetComposer));
|
|
||||||
return;
|
|
||||||
case 8:
|
|
||||||
ShowTag(*menu, s.GetTags(&MPD::Song::GetPerformer));
|
|
||||||
return;
|
|
||||||
case 9:
|
|
||||||
ShowTag(*menu, s.GetTags(&MPD::Song::GetDisc));
|
|
||||||
return;
|
|
||||||
case 10:
|
|
||||||
ShowTag(*menu, s.GetTags(&MPD::Song::GetComment));
|
|
||||||
return;
|
|
||||||
case 12:
|
|
||||||
if (s.GetNewName().empty())
|
|
||||||
*menu << s.GetName();
|
|
||||||
else
|
|
||||||
*menu << s.GetName() << Config.color2 << " -> " << clEnd << s.GetNewName();
|
|
||||||
return;
|
|
||||||
default:
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
#include "charset.h"
|
#include "charset.h"
|
||||||
#include "display.h"
|
#include "display.h"
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
|
#include "info.h"
|
||||||
#include "playlist.h"
|
#include "playlist.h"
|
||||||
|
|
||||||
using Global::MainHeight;
|
using Global::MainHeight;
|
||||||
@@ -82,17 +83,8 @@ void TagEditor::Init()
|
|||||||
TagTypes->CyclicScrolling(Config.use_cyclic_scrolling);
|
TagTypes->CyclicScrolling(Config.use_cyclic_scrolling);
|
||||||
TagTypes->SetItemDisplayer(Display::Generic);
|
TagTypes->SetItemDisplayer(Display::Generic);
|
||||||
|
|
||||||
TagTypes->AddOption("Title");
|
for (const Info::Metadata *m = Info::Tags; m->Name; ++m)
|
||||||
TagTypes->AddOption("Artist");
|
TagTypes->AddOption(m->Name);
|
||||||
TagTypes->AddOption("Album Artist");
|
|
||||||
TagTypes->AddOption("Album");
|
|
||||||
TagTypes->AddOption("Year");
|
|
||||||
TagTypes->AddOption("Track");
|
|
||||||
TagTypes->AddOption("Genre");
|
|
||||||
TagTypes->AddOption("Composer");
|
|
||||||
TagTypes->AddOption("Performer");
|
|
||||||
TagTypes->AddOption("Disc");
|
|
||||||
TagTypes->AddOption("Comment");
|
|
||||||
TagTypes->AddSeparator();
|
TagTypes->AddSeparator();
|
||||||
TagTypes->AddOption("Filename");
|
TagTypes->AddOption("Filename");
|
||||||
TagTypes->AddSeparator();
|
TagTypes->AddSeparator();
|
||||||
@@ -513,85 +505,65 @@ void TagEditor::EnterPressed()
|
|||||||
for (size_t i = 0; i < Tags->Size(); ++i)
|
for (size_t i = 0; i < Tags->Size(); ++i)
|
||||||
EditedSongs.push_back(&(*Tags)[i]);
|
EditedSongs.push_back(&(*Tags)[i]);
|
||||||
|
|
||||||
MPD::Song::GetFunction get = 0;
|
|
||||||
MPD::Song::SetFunction set = 0;
|
|
||||||
|
|
||||||
size_t id = TagTypes->RealChoice();
|
size_t id = TagTypes->RealChoice();
|
||||||
switch (id)
|
|
||||||
|
if (w == TagTypes && id == 5)
|
||||||
{
|
{
|
||||||
case 0:
|
LockStatusbar();
|
||||||
get = &MPD::Song::GetTitle;
|
Statusbar() << "Number tracks? [" << fmtBold << 'y' << fmtBoldEnd << '/' << fmtBold << 'n' << fmtBoldEnd << "] ";
|
||||||
set = &MPD::Song::SetTitle;
|
wFooter->Refresh();
|
||||||
break;
|
int in = 0;
|
||||||
case 1:
|
do
|
||||||
get = &MPD::Song::GetArtist;
|
{
|
||||||
set = &MPD::Song::SetArtist;
|
TraceMpdStatus();
|
||||||
break;
|
wFooter->ReadKey(in);
|
||||||
case 2:
|
}
|
||||||
get = &MPD::Song::GetAlbumArtist;
|
while (in != 'y' && in != 'n');
|
||||||
set = &MPD::Song::SetAlbumArtist;
|
UnlockStatusbar();
|
||||||
break;
|
if (in == 'y')
|
||||||
case 3:
|
{
|
||||||
get = &MPD::Song::GetAlbum;
|
MPD::SongList::iterator it = EditedSongs.begin();
|
||||||
set = &MPD::Song::SetAlbum;
|
for (unsigned i = 1; i <= EditedSongs.size(); ++i, ++it)
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
get = &MPD::Song::GetDate;
|
|
||||||
set = &MPD::Song::SetDate;
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
get = &MPD::Song::GetTrack;
|
|
||||||
set = &MPD::Song::SetTrack;
|
|
||||||
if (w == TagTypes)
|
|
||||||
{
|
{
|
||||||
LockStatusbar();
|
if (Config.tag_editor_extended_numeration)
|
||||||
Statusbar() << "Number tracks? [" << fmtBold << 'y' << fmtBoldEnd << '/' << fmtBold << 'n' << fmtBoldEnd << "] ";
|
(*it)->SetTrack(IntoStr(i) + "/" + IntoStr(EditedSongs.size()));
|
||||||
wFooter->Refresh();
|
|
||||||
int in = 0;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
TraceMpdStatus();
|
|
||||||
wFooter->ReadKey(in);
|
|
||||||
}
|
|
||||||
while (in != 'y' && in != 'n');
|
|
||||||
UnlockStatusbar();
|
|
||||||
if (in == 'y')
|
|
||||||
{
|
|
||||||
MPD::SongList::iterator it = EditedSongs.begin();
|
|
||||||
for (unsigned i = 1; i <= EditedSongs.size(); ++i, ++it)
|
|
||||||
{
|
|
||||||
if (Config.tag_editor_extended_numeration)
|
|
||||||
(*it)->SetTrack(IntoStr(i) + "/" + IntoStr(EditedSongs.size()));
|
|
||||||
else
|
|
||||||
(*it)->SetTrack(i);
|
|
||||||
}
|
|
||||||
ShowMessage("Tracks numbered!");
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
ShowMessage("Aborted!");
|
(*it)->SetTrack(i);
|
||||||
}
|
}
|
||||||
break;
|
ShowMessage("Tracks numbered!");
|
||||||
case 6:
|
}
|
||||||
get = &MPD::Song::GetGenre;
|
else
|
||||||
set = &MPD::Song::SetGenre;
|
ShowMessage("Aborted!");
|
||||||
break;
|
return;
|
||||||
case 7:
|
}
|
||||||
get = &MPD::Song::GetComposer;
|
|
||||||
set = &MPD::Song::SetComposer;
|
if (id < 11)
|
||||||
break;
|
{
|
||||||
case 8:
|
MPD::Song::GetFunction get = Info::Tags[id].Get;
|
||||||
get = &MPD::Song::GetPerformer;
|
MPD::Song::SetFunction set = Info::Tags[id].Set;
|
||||||
set = &MPD::Song::SetPerformer;
|
if (id > 0 && w == TagTypes)
|
||||||
break;
|
{
|
||||||
case 9:
|
LockStatusbar();
|
||||||
get = &MPD::Song::GetDisc;
|
Statusbar() << fmtBold << TagTypes->Current() << fmtBoldEnd << ": ";
|
||||||
set = &MPD::Song::SetDisc;
|
std::string new_tag = wFooter->GetString(Tags->Current().GetTags(get));
|
||||||
break;
|
UnlockStatusbar();
|
||||||
case 10:
|
for (MPD::SongList::iterator it = EditedSongs.begin(); it != EditedSongs.end(); ++it)
|
||||||
get = &MPD::Song::GetComment;
|
(*it)->SetTags(set, new_tag);
|
||||||
set = &MPD::Song::SetComment;
|
}
|
||||||
break;
|
else if (w == Tags)
|
||||||
case 11:
|
{
|
||||||
|
LockStatusbar();
|
||||||
|
Statusbar() << fmtBold << TagTypes->Current() << fmtBoldEnd << ": ";
|
||||||
|
std::string new_tag = wFooter->GetString(Tags->Current().GetTags(get));
|
||||||
|
UnlockStatusbar();
|
||||||
|
if (new_tag != Tags->Current().GetTags(get))
|
||||||
|
Tags->Current().SetTags(set, new_tag);
|
||||||
|
Tags->Scroll(wDown);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (id == 11) // filename related options
|
||||||
{
|
{
|
||||||
if (w == TagTypes)
|
if (w == TagTypes)
|
||||||
{
|
{
|
||||||
@@ -618,15 +590,13 @@ void TagEditor::EnterPressed()
|
|||||||
s.SetNewName(new_name + extension);
|
s.SetNewName(new_name + extension);
|
||||||
Tags->Scroll(wDown);
|
Tags->Scroll(wDown);
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
case 12: // reset
|
else if (id == 12) // reset
|
||||||
{
|
{
|
||||||
Tags->Clear();
|
Tags->Clear();
|
||||||
ShowMessage("Changes reset");
|
ShowMessage("Changes reset");
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
case 13: // save
|
else if (id == 13) // save
|
||||||
{
|
{
|
||||||
bool success = 1;
|
bool success = 1;
|
||||||
ShowMessage("Writing changes...");
|
ShowMessage("Writing changes...");
|
||||||
@@ -653,46 +623,21 @@ void TagEditor::EnterPressed()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
Tags->Clear();
|
Tags->Clear();
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
case 14: // capitalize first letters
|
else if (id == 14) // capitalize first letters
|
||||||
{
|
{
|
||||||
ShowMessage("Processing...");
|
ShowMessage("Processing...");
|
||||||
for (MPD::SongList::iterator it = EditedSongs.begin(); it != EditedSongs.end(); ++it)
|
for (MPD::SongList::iterator it = EditedSongs.begin(); it != EditedSongs.end(); ++it)
|
||||||
CapitalizeFirstLetters(**it);
|
CapitalizeFirstLetters(**it);
|
||||||
ShowMessage("Done!");
|
ShowMessage("Done!");
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case 15: // lower all letters
|
else if (id == 15) // lower all letters
|
||||||
{
|
{
|
||||||
ShowMessage("Processing...");
|
ShowMessage("Processing...");
|
||||||
for (MPD::SongList::iterator it = EditedSongs.begin(); it != EditedSongs.end(); ++it)
|
for (MPD::SongList::iterator it = EditedSongs.begin(); it != EditedSongs.end(); ++it)
|
||||||
LowerAllLetters(**it);
|
LowerAllLetters(**it);
|
||||||
ShowMessage("Done!");
|
ShowMessage("Done!");
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (w == TagTypes && id != 0 && id != 5 && set)
|
|
||||||
{
|
|
||||||
LockStatusbar();
|
|
||||||
Statusbar() << fmtBold << TagTypes->Current() << fmtBoldEnd << ": ";
|
|
||||||
std::string new_tag = wFooter->GetString(Tags->Current().GetTags(get));
|
|
||||||
UnlockStatusbar();
|
|
||||||
for (MPD::SongList::iterator it = EditedSongs.begin(); it != EditedSongs.end(); ++it)
|
|
||||||
(*it)->SetTags(set, new_tag);
|
|
||||||
}
|
|
||||||
else if (w == Tags && set)
|
|
||||||
{
|
|
||||||
LockStatusbar();
|
|
||||||
Statusbar() << fmtBold << TagTypes->Current() << fmtBoldEnd << ": ";
|
|
||||||
std::string new_tag = wFooter->GetString(Tags->Current().GetTags(get));
|
|
||||||
UnlockStatusbar();
|
|
||||||
if (new_tag != Tags->Current().GetTags(get))
|
|
||||||
Tags->Current().SetTags(set, new_tag);
|
|
||||||
Tags->Scroll(wDown);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1056,54 +1001,25 @@ std::string TagEditor::CapitalizeFirstLetters(const std::string &s)
|
|||||||
|
|
||||||
void TagEditor::CapitalizeFirstLetters(MPD::Song &s)
|
void TagEditor::CapitalizeFirstLetters(MPD::Song &s)
|
||||||
{
|
{
|
||||||
s.SetTitle(CapitalizeFirstLetters(s.GetTitle()));
|
for (const Info::Metadata *m = Info::Tags; m->Name; ++m)
|
||||||
s.SetArtist(CapitalizeFirstLetters(s.GetArtist()));
|
{
|
||||||
s.SetAlbum(CapitalizeFirstLetters(s.GetAlbum()));
|
unsigned i = 0;
|
||||||
s.SetAlbumArtist(CapitalizeFirstLetters(s.GetAlbumArtist()));
|
for (std::string tag; !(tag = (s.*m->Get)(i)).empty(); ++i)
|
||||||
s.SetGenre(CapitalizeFirstLetters(s.GetGenre()));
|
(s.*m->Set)(CapitalizeFirstLetters(tag), i);
|
||||||
s.SetComposer(CapitalizeFirstLetters(s.GetComposer()));
|
}
|
||||||
s.SetPerformer(CapitalizeFirstLetters(s.GetPerformer()));
|
|
||||||
s.SetDisc(CapitalizeFirstLetters(s.GetDisc()));
|
|
||||||
s.SetComment(CapitalizeFirstLetters(s.GetComment()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TagEditor::LowerAllLetters(MPD::Song &s)
|
void TagEditor::LowerAllLetters(MPD::Song &s)
|
||||||
{
|
{
|
||||||
std::string conv = s.GetTitle();
|
for (const Info::Metadata *m = Info::Tags; m->Name; ++m)
|
||||||
ToLower(conv);
|
{
|
||||||
s.SetTitle(conv);
|
unsigned i = 0;
|
||||||
|
for (std::string tag; !(tag = (s.*m->Get)(i)).empty(); ++i)
|
||||||
conv = s.GetArtist();
|
{
|
||||||
ToLower(conv);
|
ToLower(tag);
|
||||||
s.SetArtist(conv);
|
(s.*m->Set)(tag, i);
|
||||||
|
}
|
||||||
conv = s.GetAlbum();
|
}
|
||||||
ToLower(conv);
|
|
||||||
s.SetAlbum(conv);
|
|
||||||
|
|
||||||
conv = s.GetAlbumArtist();
|
|
||||||
ToLower(conv);
|
|
||||||
s.SetAlbumArtist(conv);
|
|
||||||
|
|
||||||
conv = s.GetGenre();
|
|
||||||
ToLower(conv);
|
|
||||||
s.SetGenre(conv);
|
|
||||||
|
|
||||||
conv = s.GetComposer();
|
|
||||||
ToLower(conv);
|
|
||||||
s.SetComposer(conv);
|
|
||||||
|
|
||||||
conv = s.GetPerformer();
|
|
||||||
ToLower(conv);
|
|
||||||
s.SetPerformer(conv);
|
|
||||||
|
|
||||||
conv = s.GetDisc();
|
|
||||||
ToLower(conv);
|
|
||||||
s.SetDisc(conv);
|
|
||||||
|
|
||||||
conv = s.GetComment();
|
|
||||||
ToLower(conv);
|
|
||||||
s.SetComment(conv);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TagEditor::GetTagList(TagLib::StringList &list, const MPD::Song &s, MPD::Song::GetFunction f)
|
void TagEditor::GetTagList(TagLib::StringList &list, const MPD::Song &s, MPD::Song::GetFunction f)
|
||||||
@@ -1117,47 +1033,11 @@ void TagEditor::GetTagList(TagLib::StringList &list, const MPD::Song &s, MPD::So
|
|||||||
std::string TagEditor::TagToString(const MPD::Song &s, void *data)
|
std::string TagEditor::TagToString(const MPD::Song &s, void *data)
|
||||||
{
|
{
|
||||||
std::string result;
|
std::string result;
|
||||||
switch (static_cast<Menu<std::string> *>(data)->Choice())
|
size_t i = static_cast<Menu<std::string> *>(data)->Choice();
|
||||||
{
|
if (i < 11)
|
||||||
case 0:
|
result = (s.*Info::Tags[i].Get)(0);
|
||||||
result = s.GetTitle();
|
else if (i == 12)
|
||||||
break;
|
result = s.GetNewName().empty() ? s.GetName() : s.GetName() + " -> " + s.GetNewName();
|
||||||
case 1:
|
|
||||||
result = s.GetArtist();
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
result = s.GetAlbumArtist();
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
result = s.GetAlbum();
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
result = s.GetDate();
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
result = s.GetTrack();
|
|
||||||
break;
|
|
||||||
case 6:
|
|
||||||
result = s.GetGenre();
|
|
||||||
break;
|
|
||||||
case 7:
|
|
||||||
result = s.GetComposer();
|
|
||||||
break;
|
|
||||||
case 8:
|
|
||||||
result = s.GetPerformer();
|
|
||||||
break;
|
|
||||||
case 9:
|
|
||||||
result = s.GetDisc();
|
|
||||||
break;
|
|
||||||
case 10:
|
|
||||||
result = s.GetComment();
|
|
||||||
break;
|
|
||||||
case 12:
|
|
||||||
result = s.GetNewName().empty() ? s.GetName() : s.GetName() + " -> " + s.GetNewName();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return result.empty() ? Config.empty_tag : result;
|
return result.empty() ? Config.empty_tag : result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user