new feature: locate song in tag editor
This commit is contained in:
@@ -204,6 +204,9 @@ void Help::GetKeybindings()
|
||||
*w << DisplayKeys(Key.ToggleFindMode) << "Toggle find mode (normal/wrapped)\n";
|
||||
*w << DisplayKeys(Key.GoToContainingDir) << "Locate song in browser\n";
|
||||
*w << DisplayKeys(Key.GoToMediaLibrary) << "Locate current song in media library\n";
|
||||
# ifdef HAVE_TAGLIB_H
|
||||
*w << DisplayKeys(Key.GoToTagEditor) << "Locate current song in tag editor\n";
|
||||
# endif // HAVE_TAGLIB_H
|
||||
*w << DisplayKeys(Key.ToggleDisplayMode) << "Toggle display mode\n";
|
||||
*w << DisplayKeys(Key.ToggleInterface) << "Toggle user interface\n";
|
||||
*w << DisplayKeys(Key.GoToPosition) << "Go to given position in current song (in % by default)\n";
|
||||
|
||||
@@ -1614,6 +1614,14 @@ int main(int argc, char *argv[])
|
||||
if (s)
|
||||
myLibrary->LocateSong(*s);
|
||||
}
|
||||
# ifdef HAVE_TAGLIB_H
|
||||
else if (Keypressed(input, Key.GoToTagEditor))
|
||||
{
|
||||
CHECK_MPD_MUSIC_DIR;
|
||||
if (Song *s = myScreen->CurrentSong())
|
||||
myTagEditor->LocateSong(*s);
|
||||
}
|
||||
# endif // HAVE_TAGLIB_H
|
||||
else if (Keypressed(input, Key.GoToPosition))
|
||||
{
|
||||
if (!Mpd.GetTotalTime())
|
||||
|
||||
@@ -224,6 +224,7 @@ void NcmpcppKeys::SetDefaults()
|
||||
GoToNowPlaying[0] = 'o';
|
||||
GoToContainingDir[0] = 'G';
|
||||
GoToMediaLibrary[0] = '~';
|
||||
GoToTagEditor[0] = 'E';
|
||||
ToggleAutoCenter[0] = 'U';
|
||||
ToggleDisplayMode[0] = 'p';
|
||||
ToggleInterface[0] = '\\';
|
||||
@@ -303,6 +304,7 @@ void NcmpcppKeys::SetDefaults()
|
||||
GoToNowPlaying[1] = NullKey;
|
||||
GoToContainingDir[1] = NullKey;
|
||||
GoToMediaLibrary[1] = NullKey;
|
||||
GoToTagEditor[1] = NullKey;
|
||||
ToggleAutoCenter[1] = NullKey;
|
||||
ToggleDisplayMode[1] = NullKey;
|
||||
ToggleInterface[1] = NullKey;
|
||||
|
||||
@@ -128,6 +128,7 @@ struct NcmpcppKeys
|
||||
int GoToNowPlaying[2];
|
||||
int GoToContainingDir[2];
|
||||
int GoToMediaLibrary[2];
|
||||
int GoToTagEditor[2];
|
||||
int ToggleAutoCenter[2];
|
||||
int ToggleDisplayMode[2];
|
||||
int ToggleInterface[2];
|
||||
|
||||
@@ -847,6 +847,63 @@ void TagEditor::PrevColumn()
|
||||
}
|
||||
}
|
||||
|
||||
void TagEditor::LocateSong(const MPD::Song &s)
|
||||
{
|
||||
if (s.GetDirectory().empty())
|
||||
return;
|
||||
|
||||
if (LeftColumn == Albums)
|
||||
{
|
||||
Config.albums_in_tag_editor = false;
|
||||
if (w == LeftColumn)
|
||||
w = Dirs;
|
||||
LeftColumn = Dirs;
|
||||
}
|
||||
|
||||
if (Global::myScreen != this)
|
||||
SwitchTo();
|
||||
|
||||
// go to right directory
|
||||
if (itsBrowsedDir != s.GetDirectory())
|
||||
{
|
||||
itsBrowsedDir = s.GetDirectory();
|
||||
itsBrowsedDir = itsBrowsedDir.substr(0, itsBrowsedDir.find('/'));
|
||||
if (itsBrowsedDir.empty())
|
||||
itsBrowsedDir = "/";
|
||||
Dirs->Clear();
|
||||
Update();
|
||||
}
|
||||
if (itsBrowsedDir == "/")
|
||||
Dirs->Reset(); // go to the first pos, which is "." (music dir root)
|
||||
|
||||
// highlight directory we need and get files from it
|
||||
std::string dir = ExtractTopDirectory(s.GetDirectory());
|
||||
for (size_t i = 0; i < Dirs->Size(); ++i)
|
||||
{
|
||||
if ((*Dirs)[i].first == dir)
|
||||
{
|
||||
Dirs->Highlight(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
Tags->Clear();
|
||||
Update();
|
||||
|
||||
// go to the right column
|
||||
NextColumn();
|
||||
NextColumn();
|
||||
|
||||
// highlight our file
|
||||
for (size_t i = 0; i < Tags->Size(); ++i)
|
||||
{
|
||||
if ((*Tags)[i].GetHash() == s.GetHash())
|
||||
{
|
||||
Tags->Highlight(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TagEditor::ReadTags(MPD::Song &s)
|
||||
{
|
||||
TagLib::FileRef f(s.GetFile().c_str());
|
||||
|
||||
@@ -68,6 +68,8 @@ class TagEditor : public Screen<Window>
|
||||
void NextColumn();
|
||||
void PrevColumn();
|
||||
|
||||
void LocateSong(const MPD::Song &s);
|
||||
|
||||
Menu<string_pair> *LeftColumn;
|
||||
Menu<string_pair> *Albums;
|
||||
Menu<string_pair> *Dirs;
|
||||
|
||||
Reference in New Issue
Block a user