diff --git a/doc/config b/doc/config index c6255fe0..62f70749 100644 --- a/doc/config +++ b/doc/config @@ -302,6 +302,8 @@ # #tag_editor_extended_numeration = "no" # +#media_library_display_date = "yes" +# #enable_window_title = "yes" # ## diff --git a/doc/ncmpcpp.1 b/doc/ncmpcpp.1 index cee0a40e..740e572c 100644 --- a/doc/ncmpcpp.1 +++ b/doc/ncmpcpp.1 @@ -255,6 +255,9 @@ If enabled, ncmpcpp will be able to delete directories using its browser screen. .B tag_editor_extended_numeration = yes/no If enabled, tag editor will number tracks using format xx/yy (where xx is the current track and yy is total amount of all numbered tracks), not plain xx. .TP +.B media_library_display_date = yes/no +If enabled, dates of albums in media library will be displayed and respected in searching, otherwise not. +.TP .B enable_window_title = yes/no If enabled, ncmpcpp will override current window title with its own one. .TP diff --git a/src/media_library.cpp b/src/media_library.cpp index dabcc6d2..1fb2c3bb 100644 --- a/src/media_library.cpp +++ b/src/media_library.cpp @@ -64,6 +64,7 @@ void MediaLibrary::Init() Albums->SetSelectSuffix(&Config.selected_item_suffix); Albums->SetItemDisplayer(DisplayAlbums); Albums->SetGetStringFunction(AlbumToString); + Albums->SetGetStringFunctionUserData(this); Songs = new Menu(itsRightColStartX, MainStartY, itsRightColWidth, MainHeight, "Songs", Config.main_color, brNone); Songs->HighlightColor(Config.main_highlight_color); @@ -194,16 +195,24 @@ void MediaLibrary::Update() for (TagList::iterator it = list.begin(); it != list.end(); ++it) { - TagList l; - Mpd.StartFieldSearch(MPD_TAG_DATE); - Mpd.AddSearch(Config.media_lib_primary_tag, Artists->Current()); - Mpd.AddSearch(MPD_TAG_ALBUM, *it); - Mpd.CommitSearch(l); - utf_to_locale(*it); - for (TagList::iterator j = l.begin(); j != l.end(); ++j) + if (Config.media_library_display_date) { - utf_to_locale(*j); - Albums->AddOption(SearchConstraints(*it, *j)); + TagList l; + Mpd.StartFieldSearch(MPD_TAG_DATE); + Mpd.AddSearch(Config.media_lib_primary_tag, Artists->Current()); + Mpd.AddSearch(MPD_TAG_ALBUM, *it); + Mpd.CommitSearch(l); + utf_to_locale(*it); + for (TagList::iterator j = l.begin(); j != l.end(); ++j) + { + utf_to_locale(*j); + Albums->AddOption(SearchConstraints(*it, *j)); + } + } + else + { + utf_to_locale(*it); + Albums->AddOption(SearchConstraints(*it, "")); } } utf_to_locale(Artists->Current()); @@ -228,26 +237,35 @@ void MediaLibrary::Update() Mpd.CommitSearch(albums); for (TagList::iterator j = albums.begin(); j != albums.end(); ++j) { - if (Config.media_lib_primary_tag != MPD_TAG_DATE) + if (Config.media_library_display_date) { - TagList years; - Mpd.StartFieldSearch(MPD_TAG_DATE); - Mpd.AddSearch(Config.media_lib_primary_tag, *i); - Mpd.AddSearch(MPD_TAG_ALBUM, *j); - Mpd.CommitSearch(years); - utf_to_locale(*i); - utf_to_locale(*j); - for (TagList::iterator k = years.begin(); k != years.end(); ++k) + if (Config.media_lib_primary_tag != MPD_TAG_DATE) { - utf_to_locale(*k); - Albums->AddOption(SearchConstraints(*i, *j, *k)); + TagList years; + Mpd.StartFieldSearch(MPD_TAG_DATE); + Mpd.AddSearch(Config.media_lib_primary_tag, *i); + Mpd.AddSearch(MPD_TAG_ALBUM, *j); + Mpd.CommitSearch(years); + utf_to_locale(*i); + utf_to_locale(*j); + for (TagList::iterator k = years.begin(); k != years.end(); ++k) + { + utf_to_locale(*k); + Albums->AddOption(SearchConstraints(*i, *j, *k)); + } + } + else + { + utf_to_locale(*i); + utf_to_locale(*j); + Albums->AddOption(SearchConstraints(*i, *j, *i)); } } else { utf_to_locale(*i); utf_to_locale(*j); - Albums->AddOption(SearchConstraints(*i, *j, *i)); + Albums->AddOption(SearchConstraints(*i, *j, "")); } } } @@ -278,7 +296,8 @@ void MediaLibrary::Update() else { Mpd.AddSearch(MPD_TAG_ALBUM, locale_to_utf_cpy(Albums->Current().Album)); - Mpd.AddSearch(MPD_TAG_DATE, locale_to_utf_cpy(Albums->Current().Year)); + if (Config.media_library_display_date) + Mpd.AddSearch(MPD_TAG_DATE, locale_to_utf_cpy(Albums->Current().Year)); } Mpd.CommitSearch(list); @@ -661,12 +680,12 @@ std::string MediaLibrary::SongToString(const MPD::Song &s, void *) return s.toString(Config.song_library_format); } -std::string MediaLibrary::AlbumToString(const SearchConstraints &sc, void *) +std::string MediaLibrary::AlbumToString(const SearchConstraints &sc, void *ptr) { std::string result; if (!sc.Artist.empty()) (result += sc.Artist) += " - "; - if (!sc.Year.empty()) + if ((!static_cast(ptr)->hasTwoColumns || Config.media_lib_primary_tag != MPD_TAG_DATE) && !sc.Year.empty()) ((result += "(") += sc.Year) += ") "; result += sc.Album.empty() ? "" : sc.Album; return result; diff --git a/src/settings.cpp b/src/settings.cpp index fc1f6a70..96d47b7f 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -325,6 +325,7 @@ void DefaultConfiguration(ncmpcpp_config &conf) conf.visualizer_use_wave = true; conf.browser_sort_by_mtime = false; conf.tag_editor_extended_numeration = false; + conf.media_library_display_date = true; conf.set_window_title = true; conf.mpd_port = 6600; conf.mpd_connection_timeout = 15; @@ -874,6 +875,10 @@ void ReadConfiguration(ncmpcpp_config &conf) { conf.tag_editor_extended_numeration = v == "yes"; } + else if (cl.find("media_library_display_date") != std::string::npos) + { + conf.media_library_display_date = v == "yes"; + } else if (cl.find("enable_window_title") != std::string::npos) { conf.set_window_title = v == "yes"; diff --git a/src/settings.h b/src/settings.h index 006da7de..cfb8a68d 100644 --- a/src/settings.h +++ b/src/settings.h @@ -217,6 +217,7 @@ struct ncmpcpp_config bool visualizer_use_wave; bool browser_sort_by_mtime; bool tag_editor_extended_numeration; + bool media_library_display_date; int mpd_port; int mpd_connection_timeout;