Jestem programistą i dodałem „sortuj według wykonawców” do „rhythmdb_query_model_album_sort_func” - patrz poniżej.
Jeśli jesteś użytkownikiem końcowym, który jest w stanie przygotować system do budowania pakietów, załataj źródło, skompiluj nowe pakiety, zainstaluj, a następnie śmiało! ;-) .
Ta łatka została wykonana z wersją rb v2.97, nowsze wersje mogą mieć różne numery linii (jeszcze tego nie sprawdziłem), ale w zasadzie kod powinien być taki sam.
Description: sort albums with same title first by artist, remove unnecesary space and tab
--- rhythmbox-2.97.orig/rhythmdb/rhythmdb-query-model.c
+++ rhythmbox-2.97/rhythmdb/rhythmdb-query-model.c
@@ -2192,7 +2192,7 @@ rhythmdb_query_model_drag_data_received
return FALSE;
}
-/*
+/*
* determines whether reordering is possible by checking up
* the chain for a model with a sort function set.
*/
@@ -2921,7 +2921,7 @@
* @data: nothing
*
* Sort function for sorting by album. Sorts by album, then
- * disc number, then track number, then title.
+ * artist, then disc number, then track number, then title.
*
* Returns: result of sort comparison between a and b.
*/
@@ -2959,6 +2959,31 @@ rhythmdb_query_model_album_sort_func (Rh
if (ret != 0)
return ret;
+ /* Then by artist */
+ a_val = rhythmdb_entry_get_string (a, RHYTHMDB_PROP_ARTIST_SORTNAME_SORT_KEY);
+ if (a_val[0] == '\0') {
+ a_val = rhythmdb_entry_get_string (a, RHYTHMDB_PROP_ARTIST_SORT_KEY);
+ }
+ b_val = rhythmdb_entry_get_string (b, RHYTHMDB_PROP_ARTIST_SORTNAME_SORT_KEY);
+ if (b_val[0] == '\0') {
+ b_val = rhythmdb_entry_get_string (b, RHYTHMDB_PROP_ARTIST_SORT_KEY);
+ }
+
+ if (a_val == NULL) {
+ if (b_val == NULL)
+ ret = 0;
+ else
+ ret = -1;
+ } else if (b_val == NULL)
+ ret = 1;
+ else
+ ret = strcmp (a_val, b_val);
+
+ if (ret != 0)
+ return ret;
+ /*else
+ return rhythmdb_query_model_album_sort_func (a, b, data); */
+
/* Then by disc number (assume 1 if non-existent) */
a_num = rhythmdb_entry_get_ulong (a, RHYTHMDB_PROP_DISC_NUMBER);
b_num = rhythmdb_entry_get_ulong (b, RHYTHMDB_PROP_DISC_NUMBER);
@@ -3168,7 +3193,7 @@
gpointer data)
{
gulong a_val, b_val;
-
+
if (rhythmdb_entry_is_lossless (a)) {
if (rhythmdb_entry_is_lossless (b))
return rhythmdb_query_model_location_sort_func (a, b, data);
Dalsze instrukcje dotyczące budowania pakietów tutaj i tutaj