[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