$OpenBSD: patch-src_screens_media_library_cpp,v 1.1 2017/09/05 14:25:47 dcoppa Exp $

Sort songs in media library by their display format if there are
no track numbers (git commits def5c46225896373adb8a7d749cfa4a019b1c1fd
and 4a6e7d305b0b5a8ab101ff05f541f527f2d2bc42)

Index: src/screens/media_library.cpp
--- src/screens/media_library.cpp.orig
+++ src/screens/media_library.cpp
@@ -109,19 +109,23 @@ struct SortSongs { (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;
 		}
 		try {
-			int ret = boost::lexical_cast<int>(a.getTags(&MPD::Song::getTrackNumber))
-			        - boost::lexical_cast<int>(b.getTags(&MPD::Song::getTrackNumber));
-			return ret < 0;
+			ret = boost::lexical_cast<int>(a.getTags(&MPD::Song::getTrackNumber))
+			    - boost::lexical_cast<int>(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;
+		return Format::stringify<char>(Config.song_library_format, &a)
+		     < Format::stringify<char>(Config.song_library_format, &b);
 	}
 };
 
