[PATCH] Randomize selection

Malte Rohde <[email protected]> Sat, 5 Feb 2005 22:07:01 +0000
Newsgroups gmane.comp.multimedia.xmms.devel
Message-ID <20050205220701.735dbfec@jamaica>
The following lines will add a randomizing feature for selected entries.
Patch should apply against cvs. Don't know whether this is the right way
to submit and if the patch is finally gettin' included, but its worth a
try.

malte



diff -u xmms-orig/playlist.c xmms/playlist.c
--- xmms-orig/playlist.c	2004-07-16 22:53:53.000000000 +0000
+++ xmms/playlist.c	2005-02-05 21:47:51.312090592 +0000
@@ -43,6 +43,7 @@
 static int __get_playlist_length(void);
 static void playlist_generate_shuffle_list(void);
 static void __playlist_generate_shuffle_list(void);
+static GList *playlist_shuffle_list(GList *list);
 
 struct devino {
 	dev_t dev;
@@ -1565,8 +1566,12 @@
 		}
 		list1 = list2;
 	}
-
-	temp_list = g_list_sort(temp_list, cmpfunc);
+	
+	if (cmpfunc)
+		temp_list = g_list_sort(temp_list, cmpfunc);
+	else
+		temp_list = playlist_shuffle_list(temp_list);
+		
 	list1 = temp_list;
 	list2 = index_list;
 
@@ -1675,6 +1680,13 @@
 	PL_UNLOCK();
 }
 
+void playlist_random_selected(void)
+{
+	PL_LOCK();
+	playlist = playlist_sort_selected(playlist, NULL);
+	PL_UNLOCK();
+}
+
 GList * playlist_get_selected(void)
 {
 	GList *node, *list = NULL;
diff -u xmms-orig/playlist.h xmms/playlist.h
--- xmms-orig/playlist.h	2004-03-21 16:41:56.000000000 +0000
+++ xmms/playlist.h	2005-02-05 21:47:51.312090592 +0000
@@ -75,6 +75,7 @@
 void playlist_sort_selected_by_date(void);
 void playlist_reverse(void);
 void playlist_random(void);
+void playlist_random_selected();
 void playlist_remove_dead_files(void);
 void playlist_fileinfo_current(void);
 void playlist_fileinfo(gint pos);
diff -u xmms-orig/playlistwin.c xmms/playlistwin.c
--- xmms-orig/playlistwin.c	2005-01-31 21:31:13.000000000 +0000
+++ xmms/playlistwin.c	2005-02-05 21:47:51.314090288 +0000
@@ -86,7 +86,8 @@
 	PLAYLISTWIN_SORT_BYPATH, PLAYLISTWIN_SORT_BYDATE,
 	PLAYLISTWIN_SORT_SEL_BYTITLE, PLAYLISTWIN_SORT_SEL_BYFILENAME,
 	PLAYLISTWIN_SORT_SEL_BYPATH, PLAYLISTWIN_SORT_SEL_BYDATE,
-	PLAYLISTWIN_SORT_RANDOMIZE, PLAYLISTWIN_SORT_REVERSE
+	PLAYLISTWIN_SORT_RANDOMIZE, PLAYLISTWIN_SORT_REVERSE,
+	PLAYLISTWIN_SORT_SEL_RANDOMIZE
 };
 
 GtkItemFactoryEntry playlistwin_sort_menu_entries[] =
@@ -112,6 +113,8 @@
 	{"/-", NULL, NULL, 0, "<Separator>"},
 	{N_("/Randomize List"), NULL, playlistwin_sort_menu_callback,
 					PLAYLISTWIN_SORT_RANDOMIZE, "<Item>"},
+	{N_("/Randomize Selection"), NULL, playlistwin_sort_menu_callback,
+					PLAYLISTWIN_SORT_SEL_RANDOMIZE, "<Item>"},
 	{N_("/Reverse List"), NULL, playlistwin_sort_menu_callback,
 					PLAYLISTWIN_SORT_REVERSE, "<Item>"},
 };
@@ -1783,6 +1786,10 @@
 			playlist_random();
 			playlistwin_update_list();
 			break;
+		case PLAYLISTWIN_SORT_SEL_RANDOMIZE:
+			playlist_random_selected();
+			playlistwin_update_list();
+			break;
 	}
 }