rpms/gmpc/F-7 gmpc-fix-album-play-order.diff, NONE, 1.1 gmpc.spec, 1.10, 1.11

Adrian Reber (adrian) fedora-extras-commits at redhat.com
Thu Jun 21 14:02:37 UTC 2007


Author: adrian

Update of /cvs/extras/rpms/gmpc/F-7
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv26145

Modified Files:
	gmpc.spec 
Added Files:
	gmpc-fix-album-play-order.diff 
Log Message:
* Wed Jun 20 2007 Adrian Reber <adrian at lisas.de> - 0.14.0-2
- applied patch to fix album play order from David Woodhouse


gmpc-fix-album-play-order.diff:

--- NEW FILE gmpc-fix-album-play-order.diff ---
--- gmpc-0.14.0/src/playlist3-artist-browser.c~	2007-06-13 09:40:34.000000000 +0100
+++ gmpc-0.14.0/src/playlist3-artist-browser.c	2007-06-13 11:13:16.000000000 +0100
@@ -32,6 +32,7 @@
 #include "playlist3-artist-browser.h"
 #include "config1.h"
 #include "TreeSearchWidget.h"
+#include <libmpd/libmpd-internal.h>
 
 static void pl3_artist_browser_add(GtkWidget *cat_tree);
 static void pl3_artist_browser_fill_tree(GtkWidget *, GtkTreeIter *);
@@ -50,6 +51,7 @@ static int pl3_artist_browser_playlist_k
 static void pl3_artist_browser_connection_changed(MpdObj *mi, int connect, gpointer data);
 static int pl3_artist_browser_key_press_event(GtkWidget *mw, GdkEventKey *event, int type);
 static void pl3_artist_browser_status_changed(MpdObj *mi,ChangedStatusType what, void *data);
+static MpdData *pl3_artist_browser_sort_tracks(MpdData *);
 
 static void pl3_artist_browser_reupdate(void);
 
@@ -270,7 +272,60 @@ static void pl3_artist_browser_cover_art
 
 }
 
+static MpdData *pl3_artist_browser_sort_tracks(MpdData *data)
+{
+	MpdData_real *new_list = NULL;
+
+	/* This should always be the case anyway, but just to make sure... */
+	data = mpd_data_get_first(data);
+
+	while (data) {
+		/* Insert new element 'data' into list 'new_list' */
+		MpdData_real **pos;
+		MpdData_real *data_real = (MpdData_real *)data;
+
+		data = mpd_data_get_next_real(data, FALSE);
+
+		data_real->next = NULL;
+
+		for (pos = &new_list; *pos; pos = &(*pos)->next) {
+			/* Sort on two keys. First album... */
+			int cmp = strcmp((*pos)->song->album?:"",
+					 data_real->song->album?:"");
+
+			if (cmp > 0)
+				break;
+			if (cmp < 0)
+				continue;
 
+			cmp = strcmp((*pos)->song->disc?:"",
+					 data_real->song->disc?:"");
+			if (cmp > 0)
+				break;
+			if (cmp < 0)
+				continue;
+
+			/* ... then track number */
+			if (atoi((*pos)->song->track?:"") >
+			    atoi(data_real->song->track?:""))
+				break;
+		}
+		data_real->next = *pos;
+		*pos = data_real;
+	}
+	data = (MpdData *)new_list;
+
+	if (new_list) {
+		new_list->head->first = new_list;
+
+		new_list->prev = NULL;
+		while (new_list->next) {
+			new_list->next->prev = new_list;
+			new_list = new_list->next;
+		}
+	}		
+	return data;
+}
 
 static long unsigned pl3_artist_browser_view_folder(GtkTreeIter *iter_cat)
 {
@@ -392,6 +447,7 @@ static long unsigned pl3_artist_browser_
 
 
 		data = mpd_database_find(connection, MPD_TABLE_ARTIST, artist, TRUE);
+		data = pl3_artist_browser_sort_tracks(data);
 		/* artist is selected */
 		while(data != NULL)
 		{
@@ -456,6 +512,7 @@ static long unsigned pl3_artist_browser_
 		if(pb) g_object_unref(pb);	
 		/* artist and album is selected */
 		data = mpd_database_find(connection,MPD_TABLE_ALBUM, string, TRUE);
+		data = pl3_artist_browser_sort_tracks(data);
 		while (data != NULL)
 		{
 			if(data->type == MPD_DATA_TYPE_SONG)
@@ -594,6 +651,7 @@ static void pl3_artist_browser_add_folde
 			/* artist selected */
 			gchar *message = g_strdup_printf("Added songs from artist '%s'",artist);
 			MpdData * data = mpd_database_find(connection, MPD_TABLE_ARTIST, artist, TRUE);
+			data = pl3_artist_browser_sort_tracks(data);
 			while (data != NULL)
 			{
 				if(data->type == MPD_DATA_TYPE_SONG)
@@ -612,6 +670,7 @@ static void pl3_artist_browser_add_folde
 			/* fetch all songs by this album and check if the artist is right. from mpd and add them to the add-list */
 			gchar *message = g_strdup_printf("Added songs from album '%s' ",title);
 			MpdData *data = mpd_database_find(connection, MPD_TABLE_ALBUM, title, TRUE);
+			data = pl3_artist_browser_sort_tracks(data);
 			while (data != NULL)
 			{
 				if(data->type == MPD_DATA_TYPE_SONG)
@@ -896,6 +955,7 @@ static void pl3_artist_browser_add_selec
 			else if (type&PL3_ENTRY_ARTIST)
 			{
 				MpdData * data = mpd_database_find(connection, MPD_TABLE_ARTIST, artist, TRUE);
+				data = pl3_artist_browser_sort_tracks(data);
 				while (data != NULL)
 				{
 					if(data->type == MPD_DATA_TYPE_SONG)
@@ -910,6 +970,7 @@ static void pl3_artist_browser_add_selec
 			{
 				MpdData *data = NULL;
 				data = mpd_database_find(connection, MPD_TABLE_ALBUM, album, TRUE);
+				data = pl3_artist_browser_sort_tracks(data);
 				while (data != NULL)
 				{
 					if(data->type == MPD_DATA_TYPE_SONG)


Index: gmpc.spec
===================================================================
RCS file: /cvs/extras/rpms/gmpc/F-7/gmpc.spec,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- gmpc.spec	25 Mar 2007 16:42:33 -0000	1.10
+++ gmpc.spec	21 Jun 2007 14:01:54 -0000	1.11
@@ -1,7 +1,7 @@
 Name:           gmpc
 Summary:        GNOME frontend for the MPD
 Version:        0.14.0
-Release:        1%{?dist}
+Release:        2%{?dist}
 
 License:        GPL
 Group:          Applications/Multimedia
@@ -19,6 +19,7 @@
 Source9:        gmpc-coveramazon-0.14.0.tar.gz
 Source10:       gmpc-autoplaylist-0.14.0.tar.gz
 Patch0:         gmpc-lib-plugins.diff
+Patch1:         gmpc-fix-album-play-order.diff
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
 BuildRequires:  scrollkeeper, gtk2-devel, libglade2-devel
@@ -51,6 +52,7 @@
 # this patch adds %{_libdir}/gmpc/plugins to the plugins search path
 %patch0
 sed -i -e 's,@@PLUGINS_PATH@@,"%{_libdir}/%{name}",g' src/main.c
+%patch1 -p1
 
 
 %build
@@ -115,6 +117,9 @@
 %{_libdir}/pkgconfig/*.pc
 
 %changelog
+* Wed Jun 20 2007 Adrian Reber <adrian at lisas.de> - 0.14.0-2
+- applied patch to fix album play order from David Woodhouse
+
 * Sun Mar 25 2007 Adrian Reber <adrian at lisas.de> - 0.14.0-1
 - updated to 0.14.0
 - added more plugins




More information about the fedora-extras-commits mailing list