summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--deadbeef.h3
-rw-r--r--playlist.c35
-rw-r--r--playlist.h6
-rw-r--r--plugins/gtkui/callbacks.c13
-rw-r--r--plugins/gtkui/callbacks.h8
-rw-r--r--plugins/gtkui/deadbeef.glade31
-rw-r--r--plugins/gtkui/gtkui.c2
-rw-r--r--plugins/gtkui/interface.c103
-rw-r--r--streamer.c17
9 files changed, 151 insertions, 67 deletions
diff --git a/deadbeef.h b/deadbeef.h
index 57cc035b..bd1655c7 100644
--- a/deadbeef.h
+++ b/deadbeef.h
@@ -182,8 +182,9 @@ enum output_state_t {
// playback order
enum playback_order_t {
PLAYBACK_ORDER_LINEAR = 0,
- PLAYBACK_ORDER_SHUFFLE = 1,
+ PLAYBACK_ORDER_SHUFFLE_TRACKS = 1,
PLAYBACK_ORDER_RANDOM = 2,
+ PLAYBACK_ORDER_SHUFFLE_ALBUMS = 3,
};
// playback modes
diff --git a/playlist.c b/playlist.c
index 25472bb4..a6b9d02c 100644
--- a/playlist.c
+++ b/playlist.c
@@ -92,6 +92,23 @@ static uintptr_t mutex_plt;
static playlist_t dummy_playlist; // used at startup to prevent crashes
+static int pl_order; // mirrors "playback.order" config variable
+
+void
+pl_set_order (int order) {
+ printf ("pl_set_order %d\n", order);
+ if (pl_order != order) {
+ pl_order = order;
+ pl_reshuffle (NULL, NULL);
+ }
+
+}
+
+int
+pl_get_order (void) {
+ return pl_order;
+}
+
int
pl_init (void) {
playlist = &dummy_playlist;
@@ -1631,7 +1648,13 @@ plt_insert_item (playlist_t *playlist, playItem_t *after, playItem_t *it) {
playlist->count[PL_MAIN]++;
// shuffle
- it->shufflerating = rand ();
+ playItem_t *prev = it->prev[PL_MAIN];
+ if (pl_order == PLAYBACK_ORDER_SHUFFLE_ALBUMS && prev && pl_find_meta (prev, "album") == pl_find_meta (it, "album")) {
+ it->shufflerating = prev->shufflerating;
+ }
+ else {
+ it->shufflerating = rand ();
+ }
it->played = 0;
// totaltime
@@ -2393,11 +2416,18 @@ pl_select_all (void) {
void
plt_reshuffle (playlist_t *playlist, playItem_t **ppmin, playItem_t **ppmax) {
+ printf ("pl_order: %d\n", pl_order);
GLOBAL_LOCK;
playItem_t *pmin = NULL;
playItem_t *pmax = NULL;
+ playItem_t *prev = NULL;
for (playItem_t *it = playlist->head[PL_MAIN]; it; it = it->next[PL_MAIN]) {
- it->shufflerating = rand ();
+ if (pl_order == PLAYBACK_ORDER_SHUFFLE_ALBUMS && prev && pl_find_meta (prev, "album") == pl_find_meta (it, "album")) {
+ it->shufflerating = prev->shufflerating;
+ }
+ else {
+ it->shufflerating = rand ();
+ }
if (!pmin || it->shufflerating < pmin->shufflerating) {
pmin = it;
}
@@ -2405,6 +2435,7 @@ plt_reshuffle (playlist_t *playlist, playItem_t **ppmin, playItem_t **ppmax) {
pmax = it;
}
it->played = 0;
+ prev = it;
}
if (ppmin) {
*ppmin = pmin;
diff --git a/playlist.h b/playlist.h
index d8fdb6c9..bc429b23 100644
--- a/playlist.h
+++ b/playlist.h
@@ -349,4 +349,10 @@ pl_items_copy_junk (struct playItem_s *from, struct playItem_s *first, struct pl
struct DB_metaInfo_s *
pl_get_metadata (playItem_t *it);
+void
+pl_set_order (int order);
+
+int
+pl_get_order (void);
+
#endif // __PLAYLIST_H
diff --git a/plugins/gtkui/callbacks.c b/plugins/gtkui/callbacks.c
index e7f6f77c..a601b205 100644
--- a/plugins/gtkui/callbacks.c
+++ b/plugins/gtkui/callbacks.c
@@ -345,7 +345,7 @@ void
on_order_linear_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
- deadbeef->conf_set_int ("playback.order", 0);
+ deadbeef->conf_set_int ("playback.order", PLAYBACK_ORDER_LINEAR);
}
@@ -353,15 +353,21 @@ void
on_order_shuffle_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
- deadbeef->conf_set_int ("playback.order", 1);
+ deadbeef->conf_set_int ("playback.order", PLAYBACK_ORDER_SHUFFLE_TRACKS);
}
+void
+on_order_shuffle_albums_activate (GtkMenuItem *menuitem,
+ gpointer user_data)
+{
+ deadbeef->conf_set_int ("playback.order", PLAYBACK_ORDER_SHUFFLE_ALBUMS);
+}
void
on_order_random_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
- deadbeef->conf_set_int ("playback.order", 2);
+ deadbeef->conf_set_int ("playback.order", PLAYBACK_ORDER_RANDOM);
}
@@ -1180,4 +1186,3 @@ encoder_cmdline_help_link_create (gchar *widget_name, gchar *string1, gchar *str
GtkWidget *link = gtk_link_button_new_with_label ("http://sourceforge.net/apps/mediawiki/deadbeef/index.php?title=Encoder_Command_Line", "Help");
return link;
}
-
diff --git a/plugins/gtkui/callbacks.h b/plugins/gtkui/callbacks.h
index 0853eaab..e02794e8 100644
--- a/plugins/gtkui/callbacks.h
+++ b/plugins/gtkui/callbacks.h
@@ -1089,3 +1089,11 @@ on_dsp_preset_plugin_down_clicked (GtkButton *button,
void
on_converter_output_format_changed (GtkComboBox *combobox,
gpointer user_data);
+
+void
+on_shuffle_albums1_activate (GtkMenuItem *menuitem,
+ gpointer user_data);
+
+void
+on_order_shuffle_albums_activate (GtkMenuItem *menuitem,
+ gpointer user_data);
diff --git a/plugins/gtkui/deadbeef.glade b/plugins/gtkui/deadbeef.glade
index 1420b1bf..4b4cb1c9 100644
--- a/plugins/gtkui/deadbeef.glade
+++ b/plugins/gtkui/deadbeef.glade
@@ -62,7 +62,7 @@
<accelerator key="O" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
- <widget class="GtkImage" id="image460">
+ <widget class="GtkImage" id="image512">
<property name="visible">True</property>
<property name="stock">gtk-open</property>
<property name="icon_size">1</property>
@@ -89,7 +89,7 @@
<signal name="activate" handler="on_add_files_activate" last_modification_time="Sat, 04 Jul 2009 13:04:01 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image461">
+ <widget class="GtkImage" id="image513">
<property name="visible">True</property>
<property name="stock">gtk-add</property>
<property name="icon_size">1</property>
@@ -110,7 +110,7 @@
<signal name="activate" handler="on_add_folders_activate" last_modification_time="Sun, 06 Sep 2009 17:51:40 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image462">
+ <widget class="GtkImage" id="image514">
<property name="visible">True</property>
<property name="stock">gtk-add</property>
<property name="icon_size">1</property>
@@ -190,7 +190,7 @@
<accelerator key="Q" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
- <widget class="GtkImage" id="image463">
+ <widget class="GtkImage" id="image515">
<property name="visible">True</property>
<property name="stock">gtk-quit</property>
<property name="icon_size">1</property>
@@ -224,7 +224,7 @@
<signal name="activate" handler="on_clear1_activate" last_modification_time="Sun, 06 Sep 2009 18:30:03 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image464">
+ <widget class="GtkImage" id="image516">
<property name="visible">True</property>
<property name="stock">gtk-clear</property>
<property name="icon_size">1</property>
@@ -283,7 +283,7 @@
<signal name="activate" handler="on_remove1_activate" last_modification_time="Sun, 06 Sep 2009 18:30:03 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image465">
+ <widget class="GtkImage" id="image517">
<property name="visible">True</property>
<property name="stock">gtk-remove</property>
<property name="icon_size">1</property>
@@ -471,7 +471,7 @@
<child>
<widget class="GtkRadioMenuItem" id="order_shuffle">
<property name="visible">True</property>
- <property name="label" translatable="yes">Shuffle</property>
+ <property name="label" translatable="yes">Shuffle tracks</property>
<property name="use_underline">True</property>
<property name="active">True</property>
<property name="group">order_linear</property>
@@ -480,6 +480,17 @@
</child>
<child>
+ <widget class="GtkRadioMenuItem" id="order_shuffle_albums">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Shuffle albums</property>
+ <property name="use_underline">True</property>
+ <property name="active">True</property>
+ <property name="group">order_linear</property>
+ <signal name="activate" handler="on_order_shuffle_albums_activate" last_modification_time="Sun, 12 Dec 2010 18:14:47 GMT"/>
+ </widget>
+ </child>
+
+ <child>
<widget class="GtkRadioMenuItem" id="order_random">
<property name="visible">True</property>
<property name="label" translatable="yes">Random</property>
@@ -607,7 +618,7 @@
<signal name="activate" handler="on_help1_activate" last_modification_time="Tue, 08 Sep 2009 17:32:06 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image466">
+ <widget class="GtkImage" id="image518">
<property name="visible">True</property>
<property name="stock">gtk-help</property>
<property name="icon_size">1</property>
@@ -667,7 +678,7 @@
<signal name="activate" handler="on_about1_activate" last_modification_time="Sat, 04 Jul 2009 12:57:58 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image467">
+ <widget class="GtkImage" id="image519">
<property name="visible">True</property>
<property name="stock">gtk-about</property>
<property name="icon_size">1</property>
@@ -688,7 +699,7 @@
<signal name="activate" handler="on_translators1_activate" last_modification_time="Sun, 19 Sep 2010 13:38:07 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image468">
+ <widget class="GtkImage" id="image520">
<property name="visible">True</property>
<property name="stock">gtk-about</property>
<property name="icon_size">1</property>
diff --git a/plugins/gtkui/gtkui.c b/plugins/gtkui/gtkui.c
index 3bdab517..79a9075b 100644
--- a/plugins/gtkui/gtkui.c
+++ b/plugins/gtkui/gtkui.c
@@ -621,7 +621,7 @@ gtkui_on_configchanged (DB_event_t *ev, uintptr_t data) {
const char *w;
// order
- const char *orderwidgets[3] = { "order_linear", "order_shuffle", "order_random" };
+ const char *orderwidgets[4] = { "order_linear", "order_shuffle", "order_random", "order_shuffle_albums" };
w = orderwidgets[deadbeef->conf_get_int ("playback.order", PLAYBACK_ORDER_LINEAR)];
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (lookup_widget (mainwin, w)), TRUE);
diff --git a/plugins/gtkui/interface.c b/plugins/gtkui/interface.c
index 1a7519ff..f2877b01 100644
--- a/plugins/gtkui/interface.c
+++ b/plugins/gtkui/interface.c
@@ -35,12 +35,12 @@ create_mainwin (void)
GtkWidget *File;
GtkWidget *File_menu;
GtkWidget *open;
- GtkWidget *image460;
+ GtkWidget *image512;
GtkWidget *separator2;
GtkWidget *add_files;
- GtkWidget *image461;
+ GtkWidget *image513;
GtkWidget *add_folders;
- GtkWidget *image462;
+ GtkWidget *image514;
GtkWidget *add_location1;
GtkWidget *separatormenuitem1;
GtkWidget *new_playlist1;
@@ -49,18 +49,18 @@ create_mainwin (void)
GtkWidget *playlist_save_as;
GtkWidget *separator8;
GtkWidget *quit;
- GtkWidget *image463;
+ GtkWidget *image515;
GtkWidget *Edit;
GtkWidget *Edit_menu;
GtkWidget *clear1;
- GtkWidget *image464;
+ GtkWidget *image516;
GtkWidget *select_all1;
GtkWidget *deselect_all1;
GtkWidget *invert_selection1;
GtkWidget *Selection;
GtkWidget *Selection_menu;
GtkWidget *remove1;
- GtkWidget *image465;
+ GtkWidget *image517;
GtkWidget *crop1;
GtkWidget *find1;
GtkWidget *sort_by1;
@@ -84,6 +84,7 @@ create_mainwin (void)
GSList *order_linear_group = NULL;
GtkWidget *order_linear;
GtkWidget *order_shuffle;
+ GtkWidget *order_shuffle_albums;
GtkWidget *order_random;
GtkWidget *Looping;
GtkWidget *Looping_menu;
@@ -99,16 +100,16 @@ create_mainwin (void)
GtkWidget *Help;
GtkWidget *Help_menu;
GtkWidget *help1;
- GtkWidget *image466;
+ GtkWidget *image518;
GtkWidget *changelog1;
GtkWidget *separator10;
GtkWidget *gpl1;
GtkWidget *lgpl1;
GtkWidget *separator9;
GtkWidget *about1;
- GtkWidget *image467;
+ GtkWidget *image519;
GtkWidget *translators1;
- GtkWidget *image468;
+ GtkWidget *image520;
GtkWidget *hbox2;
GtkWidget *hbox3;
GtkWidget *stopbtn;
@@ -159,9 +160,9 @@ create_mainwin (void)
GDK_O, (GdkModifierType) GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE);
- image460 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image460);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (open), image460);
+ image512 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image512);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (open), image512);
separator2 = gtk_separator_menu_item_new ();
gtk_widget_show (separator2);
@@ -172,17 +173,17 @@ create_mainwin (void)
gtk_widget_show (add_files);
gtk_container_add (GTK_CONTAINER (File_menu), add_files);
- image461 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image461);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_files), image461);
+ image513 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image513);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_files), image513);
add_folders = gtk_image_menu_item_new_with_mnemonic (_("Add folder(s)"));
gtk_widget_show (add_folders);
gtk_container_add (GTK_CONTAINER (File_menu), add_folders);
- image462 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image462);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_folders), image462);
+ image514 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image514);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_folders), image514);
add_location1 = gtk_menu_item_new_with_mnemonic (_("Add location"));
gtk_widget_show (add_location1);
@@ -224,9 +225,9 @@ create_mainwin (void)
GDK_Q, (GdkModifierType) GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE);
- image463 = gtk_image_new_from_stock ("gtk-quit", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image463);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (quit), image463);
+ image515 = gtk_image_new_from_stock ("gtk-quit", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image515);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (quit), image515);
Edit = gtk_menu_item_new_with_mnemonic (_("_Edit"));
gtk_widget_show (Edit);
@@ -239,9 +240,9 @@ create_mainwin (void)
gtk_widget_show (clear1);
gtk_container_add (GTK_CONTAINER (Edit_menu), clear1);
- image464 = gtk_image_new_from_stock ("gtk-clear", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image464);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (clear1), image464);
+ image516 = gtk_image_new_from_stock ("gtk-clear", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image516);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (clear1), image516);
select_all1 = gtk_menu_item_new_with_mnemonic (_("Select all"));
gtk_widget_show (select_all1);
@@ -272,9 +273,9 @@ create_mainwin (void)
gtk_widget_show (remove1);
gtk_container_add (GTK_CONTAINER (Selection_menu), remove1);
- image465 = gtk_image_new_from_stock ("gtk-remove", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image465);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (remove1), image465);
+ image517 = gtk_image_new_from_stock ("gtk-remove", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image517);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (remove1), image517);
crop1 = gtk_menu_item_new_with_mnemonic (_("Crop"));
gtk_widget_show (crop1);
@@ -362,12 +363,18 @@ create_mainwin (void)
gtk_container_add (GTK_CONTAINER (Order_menu), order_linear);
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (order_linear), TRUE);
- order_shuffle = gtk_radio_menu_item_new_with_mnemonic (order_linear_group, _("Shuffle"));
+ order_shuffle = gtk_radio_menu_item_new_with_mnemonic (order_linear_group, _("Shuffle tracks"));
order_linear_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (order_shuffle));
gtk_widget_show (order_shuffle);
gtk_container_add (GTK_CONTAINER (Order_menu), order_shuffle);
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (order_shuffle), TRUE);
+ order_shuffle_albums = gtk_radio_menu_item_new_with_mnemonic (order_linear_group, _("Shuffle albums"));
+ order_linear_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (order_shuffle_albums));
+ gtk_widget_show (order_shuffle_albums);
+ gtk_container_add (GTK_CONTAINER (Order_menu), order_shuffle_albums);
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (order_shuffle_albums), TRUE);
+
order_random = gtk_radio_menu_item_new_with_mnemonic (order_linear_group, _("Random"));
order_linear_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (order_random));
gtk_widget_show (order_random);
@@ -438,9 +445,9 @@ create_mainwin (void)
gtk_widget_show (help1);
gtk_container_add (GTK_CONTAINER (Help_menu), help1);
- image466 = gtk_image_new_from_stock ("gtk-help", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image466);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (help1), image466);
+ image518 = gtk_image_new_from_stock ("gtk-help", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image518);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (help1), image518);
changelog1 = gtk_menu_item_new_with_mnemonic (_("_ChangeLog"));
gtk_widget_show (changelog1);
@@ -468,17 +475,17 @@ create_mainwin (void)
gtk_widget_show (about1);
gtk_container_add (GTK_CONTAINER (Help_menu), about1);
- image467 = gtk_image_new_from_stock ("gtk-about", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image467);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (about1), image467);
+ image519 = gtk_image_new_from_stock ("gtk-about", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image519);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (about1), image519);
translators1 = gtk_image_menu_item_new_with_mnemonic (_("_Translators"));
gtk_widget_show (translators1);
gtk_container_add (GTK_CONTAINER (Help_menu), translators1);
- image468 = gtk_image_new_from_stock ("gtk-about", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image468);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (translators1), image468);
+ image520 = gtk_image_new_from_stock ("gtk-about", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image520);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (translators1), image520);
hbox2 = gtk_hbox_new (FALSE, 0);
gtk_widget_show (hbox2);
@@ -707,6 +714,9 @@ create_mainwin (void)
g_signal_connect ((gpointer) order_shuffle, "activate",
G_CALLBACK (on_order_shuffle_activate),
NULL);
+ g_signal_connect ((gpointer) order_shuffle_albums, "activate",
+ G_CALLBACK (on_order_shuffle_albums_activate),
+ NULL);
g_signal_connect ((gpointer) order_random, "activate",
G_CALLBACK (on_order_random_activate),
NULL);
@@ -772,12 +782,12 @@ create_mainwin (void)
GLADE_HOOKUP_OBJECT (mainwin, File, "File");
GLADE_HOOKUP_OBJECT (mainwin, File_menu, "File_menu");
GLADE_HOOKUP_OBJECT (mainwin, open, "open");
- GLADE_HOOKUP_OBJECT (mainwin, image460, "image460");
+ GLADE_HOOKUP_OBJECT (mainwin, image512, "image512");
GLADE_HOOKUP_OBJECT (mainwin, separator2, "separator2");
GLADE_HOOKUP_OBJECT (mainwin, add_files, "add_files");
- GLADE_HOOKUP_OBJECT (mainwin, image461, "image461");
+ GLADE_HOOKUP_OBJECT (mainwin, image513, "image513");
GLADE_HOOKUP_OBJECT (mainwin, add_folders, "add_folders");
- GLADE_HOOKUP_OBJECT (mainwin, image462, "image462");
+ GLADE_HOOKUP_OBJECT (mainwin, image514, "image514");
GLADE_HOOKUP_OBJECT (mainwin, add_location1, "add_location1");
GLADE_HOOKUP_OBJECT (mainwin, separatormenuitem1, "separatormenuitem1");
GLADE_HOOKUP_OBJECT (mainwin, new_playlist1, "new_playlist1");
@@ -786,18 +796,18 @@ create_mainwin (void)
GLADE_HOOKUP_OBJECT (mainwin, playlist_save_as, "playlist_save_as");
GLADE_HOOKUP_OBJECT (mainwin, separator8, "separator8");
GLADE_HOOKUP_OBJECT (mainwin, quit, "quit");
- GLADE_HOOKUP_OBJECT (mainwin, image463, "image463");
+ GLADE_HOOKUP_OBJECT (mainwin, image515, "image515");
GLADE_HOOKUP_OBJECT (mainwin, Edit, "Edit");
GLADE_HOOKUP_OBJECT (mainwin, Edit_menu, "Edit_menu");
GLADE_HOOKUP_OBJECT (mainwin, clear1, "clear1");
- GLADE_HOOKUP_OBJECT (mainwin, image464, "image464");
+ GLADE_HOOKUP_OBJECT (mainwin, image516, "image516");
GLADE_HOOKUP_OBJECT (mainwin, select_all1, "select_all1");
GLADE_HOOKUP_OBJECT (mainwin, deselect_all1, "deselect_all1");
GLADE_HOOKUP_OBJECT (mainwin, invert_selection1, "invert_selection1");
GLADE_HOOKUP_OBJECT (mainwin, Selection, "Selection");
GLADE_HOOKUP_OBJECT (mainwin, Selection_menu, "Selection_menu");
GLADE_HOOKUP_OBJECT (mainwin, remove1, "remove1");
- GLADE_HOOKUP_OBJECT (mainwin, image465, "image465");
+ GLADE_HOOKUP_OBJECT (mainwin, image517, "image517");
GLADE_HOOKUP_OBJECT (mainwin, crop1, "crop1");
GLADE_HOOKUP_OBJECT (mainwin, find1, "find1");
GLADE_HOOKUP_OBJECT (mainwin, sort_by1, "sort_by1");
@@ -820,6 +830,7 @@ create_mainwin (void)
GLADE_HOOKUP_OBJECT (mainwin, Order_menu, "Order_menu");
GLADE_HOOKUP_OBJECT (mainwin, order_linear, "order_linear");
GLADE_HOOKUP_OBJECT (mainwin, order_shuffle, "order_shuffle");
+ GLADE_HOOKUP_OBJECT (mainwin, order_shuffle_albums, "order_shuffle_albums");
GLADE_HOOKUP_OBJECT (mainwin, order_random, "order_random");
GLADE_HOOKUP_OBJECT (mainwin, Looping, "Looping");
GLADE_HOOKUP_OBJECT (mainwin, Looping_menu, "Looping_menu");
@@ -834,16 +845,16 @@ create_mainwin (void)
GLADE_HOOKUP_OBJECT (mainwin, Help, "Help");
GLADE_HOOKUP_OBJECT (mainwin, Help_menu, "Help_menu");
GLADE_HOOKUP_OBJECT (mainwin, help1, "help1");
- GLADE_HOOKUP_OBJECT (mainwin, image466, "image466");
+ GLADE_HOOKUP_OBJECT (mainwin, image518, "image518");
GLADE_HOOKUP_OBJECT (mainwin, changelog1, "changelog1");
GLADE_HOOKUP_OBJECT (mainwin, separator10, "separator10");
GLADE_HOOKUP_OBJECT (mainwin, gpl1, "gpl1");
GLADE_HOOKUP_OBJECT (mainwin, lgpl1, "lgpl1");
GLADE_HOOKUP_OBJECT (mainwin, separator9, "separator9");
GLADE_HOOKUP_OBJECT (mainwin, about1, "about1");
- GLADE_HOOKUP_OBJECT (mainwin, image467, "image467");
+ GLADE_HOOKUP_OBJECT (mainwin, image519, "image519");
GLADE_HOOKUP_OBJECT (mainwin, translators1, "translators1");
- GLADE_HOOKUP_OBJECT (mainwin, image468, "image468");
+ GLADE_HOOKUP_OBJECT (mainwin, image520, "image520");
GLADE_HOOKUP_OBJECT (mainwin, hbox2, "hbox2");
GLADE_HOOKUP_OBJECT (mainwin, hbox3, "hbox3");
GLADE_HOOKUP_OBJECT (mainwin, stopbtn, "stopbtn");
diff --git a/streamer.c b/streamer.c
index 1c48020e..a6f0ff8c 100644
--- a/streamer.c
+++ b/streamer.c
@@ -268,7 +268,8 @@ streamer_move_to_nextsong (int reason) {
pl_global_unlock ();
return 0;
}
- int pl_order = conf_get_int ("playback.order", 0);
+ int pl_order = pl_get_order ();
+
int pl_loop_mode = conf_get_int ("playback.loop", 0);
if (reason == 0 && pl_loop_mode == PLAYBACK_MODE_LOOP_SINGLE) { // song finished, loop mode is "loop 1 track"
@@ -283,7 +284,7 @@ streamer_move_to_nextsong (int reason) {
return 0;
}
- if (pl_order == PLAYBACK_ORDER_SHUFFLE) { // shuffle
+ if (pl_order == PLAYBACK_ORDER_SHUFFLE_TRACKS || pl_order == PLAYBACK_ORDER_SHUFFLE_ALBUMS) { // shuffle
if (!curr) {
// find minimal notplayed
playItem_t *pmin = NULL; // notplayed minimum
@@ -404,7 +405,7 @@ streamer_move_to_prevsong (void) {
}
int pl_order = conf_get_int ("playback.order", 0);
int pl_loop_mode = conf_get_int ("playback.loop", 0);
- if (pl_order == PLAYBACK_ORDER_SHUFFLE) { // shuffle
+ if (pl_order == PLAYBACK_ORDER_SHUFFLE_TRACKS || pl_order == PLAYBACK_ORDER_SHUFFLE_ALBUMS) { // shuffle
if (!playlist_track) {
plt_unlock ();
return streamer_move_to_nextsong (1);
@@ -426,6 +427,13 @@ streamer_move_to_prevsong (void) {
pmax = i;
}
}
+
+ if (pmax && pl_order == PLAYBACK_ORDER_SHUFFLE_ALBUMS) {
+ while (pmax && pmax->next[PL_MAIN] && pmax->next[PL_MAIN]->played && pmax->shufflerating == pmax->next[PL_MAIN]->shufflerating) {
+ pmax = pmax->next[PL_MAIN];
+ }
+ }
+
playItem_t *it = pmax;
if (!it) {
// that means 1st in playlist, take amax
@@ -1128,6 +1136,8 @@ streamer_init (void) {
mutex = mutex_create ();
decodemutex = mutex_create ();
+ pl_set_order (conf_get_int ("playback.order", 0));
+
// find src plugin, and use it if found
srcplug = (DB_dsp_t*)plug_get_for_id ("SRC");
if (srcplug) {
@@ -1524,6 +1534,7 @@ void
streamer_configchanged (void) {
conf_replaygain_mode = conf_get_int ("replaygain_mode", 0);
conf_replaygain_scale = conf_get_int ("replaygain_scale", 1);
+ pl_set_order (conf_get_int ("playback.order", 0));
if (srcplug) {
srcplug->set_param (src, SRC_PARAM_QUALITY, conf_get_int ("src_quality", 2));