From def5c46225896373adb8a7d749cfa4a019b1c1fd Mon Sep 17 00:00:00 2001 From: Andrzej Rybczak Date: Thu, 31 Aug 2017 09:41:20 +0200 Subject: [PATCH] Media library: sort songs by name if there are no track numbers --- NEWS | 1 + src/screens/media_library.cpp | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/NEWS b/NEWS index e1a67556..eaa766b8 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,7 @@ ncmpcpp-0.8.1 (????-??-??) * Setting 'colors_enabled' to 'no' no longer results in a crash. * Using '--quiet' command line argument no longer results in a crash. +* If songs in media library have no track numbers, sort them by name. ncmpcpp-0.8 (2017-05-21) * Configuration variable 'execute_on_player_state_change' was added. diff --git a/src/screens/media_library.cpp b/src/screens/media_library.cpp index aad516eb..33fba24e 100644 --- a/src/screens/media_library.cpp +++ b/src/screens/media_library.cpp @@ -109,19 +109,26 @@ public: return (*this)(a.value(), b.value()); } bool operator()(const MPD::Song &a, const MPD::Song &b) { + int ret; for (auto get = GetFuns.begin()+m_offset; get != GetFuns.end(); ++get) { - int ret = m_cmp(a.getTags(*get), - b.getTags(*get)); + ret = m_cmp(a.getTags(*get), + b.getTags(*get)); if (ret != 0) return ret < 0; } + + // Sort by track numbers. try { - int ret = boost::lexical_cast(a.getTags(&MPD::Song::getTrackNumber)) - - boost::lexical_cast(b.getTags(&MPD::Song::getTrackNumber)); - return ret < 0; + ret = boost::lexical_cast(a.getTags(&MPD::Song::getTrackNumber)) + - boost::lexical_cast(b.getTags(&MPD::Song::getTrackNumber)); } catch (boost::bad_lexical_cast &) { - return a.getTrackNumber() < b.getTrackNumber(); + ret = a.getTrackNumber().compare(b.getTrackNumber()); } + if (ret != 0) + return ret < 0; + + // If there are no track numbers, sort by name. + return a.getName() < b.getName(); } };