[Xfce4-commits] <parole:0.5> Make remove-duplicates work again
Sean Davis
noreply at xfce.org
Wed Oct 30 05:00:03 CET 2013
Updating branch refs/heads/0.5
to 95f32035b80c1ba8d06a7006d922560ce83ae432 (commit)
from 4f17bbef7315210f8022926427dd2935de1f5629 (commit)
commit 95f32035b80c1ba8d06a7006d922560ce83ae432
Author: Sean Davis <smd.seandavis at gmail.com>
Date: Tue Oct 29 23:58:58 2013 -0400
Make remove-duplicates work again
src/parole-medialist.c | 67 +++++++++++++++++++++++++++++++++++++-----------
1 file changed, 52 insertions(+), 15 deletions(-)
diff --git a/src/parole-medialist.c b/src/parole-medialist.c
index 85aad22..f63eadd 100644
--- a/src/parole-medialist.c
+++ b/src/parole-medialist.c
@@ -260,31 +260,67 @@ parole_media_list_add (ParoleMediaList *list, ParoleFile *file, gboolean disc, g
GtkTreeIter iter;
gint nch;
+ /* Objects used for the remove-duplicates functionality. */
+ gchar *filename;
+ ParoleFile *row_file;
+ gboolean remove_duplicates;
+ g_object_get (G_OBJECT (list->priv->conf),
+ "remove-duplicated", &remove_duplicates,
+ NULL);
+
+ /* Set the list_store variable based on with store we're viewing. */
if (disc)
list_store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (list->priv->disc_view)));
else
list_store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (list->priv->view)));
+
+ /* Remove duplicates functionality. If the file being added is already in the
+ * playlist, remove it from its current position in the playlist before
+ * adding it again. */
+ if (!disc && remove_duplicates && gtk_tree_model_iter_n_children (GTK_TREE_MODEL(list_store), NULL) != 0)
+ {
+ filename = g_strdup(parole_file_get_file_name(file));
+
+ /* Check the first row */
+ gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter);
+ gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, DATA_COL, &row_file, -1);
+ if (g_strcmp0(filename, parole_file_get_file_name(row_file)) == 0)
+ {
+ gtk_list_store_remove (GTK_LIST_STORE(list_store), &iter);
+ }
+
+ /* Check subsequent rows */
+ while (gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter)) {
+ gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, DATA_COL, &row_file, -1);
+ if (g_strcmp0(filename, parole_file_get_file_name(row_file)) == 0)
+ {
+ gtk_list_store_remove (GTK_LIST_STORE(list_store), &iter);
+ }
+ }
+
+ g_object_unref(row_file);
+ }
+ /* Add the file to the playlist */
gtk_list_store_append (list_store, &iter);
-
gtk_list_store_set (list_store,
- &iter,
- NAME_COL, parole_file_get_display_name (file),
- DATA_COL, file,
- LENGTH_COL, parole_taglibc_get_media_length (file),
- PIXBUF_COL, NULL,
- -1);
+ &iter,
+ NAME_COL, parole_file_get_display_name (file),
+ DATA_COL, file,
+ LENGTH_COL, parole_taglibc_get_media_length (file),
+ PIXBUF_COL, NULL,
+ -1);
if ( emit || select_row )
{
- path = gtk_tree_model_get_path (GTK_TREE_MODEL (list_store), &iter);
- row = gtk_tree_row_reference_new (GTK_TREE_MODEL (list_store), path);
- if ( select_row )
- parole_media_list_select_path (list, disc, path);
- gtk_tree_path_free (path);
- if ( emit )
- g_signal_emit (G_OBJECT (list), signals [MEDIA_ACTIVATED], 0, row);
- gtk_tree_row_reference_free (row);
+ path = gtk_tree_model_get_path (GTK_TREE_MODEL (list_store), &iter);
+ row = gtk_tree_row_reference_new (GTK_TREE_MODEL (list_store), path);
+ if ( select_row )
+ parole_media_list_select_path (list, disc, path);
+ gtk_tree_path_free (path);
+ if ( emit )
+ g_signal_emit (G_OBJECT (list), signals [MEDIA_ACTIVATED], 0, row);
+ gtk_tree_row_reference_free (row);
}
/*
@@ -293,6 +329,7 @@ parole_media_list_add (ParoleMediaList *list, ParoleFile *file, gboolean disc, g
*/
g_object_unref (file);
+ /* Update the playlist count. */
if (disc)
nch = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (list->priv->disc_store), NULL);
else
More information about the Xfce4-commits
mailing list