[Xfce4-commits] <parole:master> Add and option in the media chooser dialog to enable/disable scanning folders recursively for media files.

Ali Abdallah noreply at xfce.org
Tue Nov 17 09:30:03 CET 2009


Updating branch refs/heads/master
         to 913d5e3a6dab7a1f7c5ffeb17e3bf274cd789d0c (commit)
       from 1455521efb23df728d589cd781f4429e3481584b (commit)

commit 913d5e3a6dab7a1f7c5ffeb17e3bf274cd789d0c
Author: Ali Abdallah <ali at ali-xfce.org>
Date:   Tue Nov 17 09:04:43 2009 +0100

    Add and option in the media chooser dialog to enable/disable
    scanning folders recursively for media files.

 data/interfaces/mediachooser.ui |   17 ++++++++++++++++-
 parole/parole-filters.c         |    8 ++++----
 parole/parole-filters.h         |    1 +
 parole/parole-mediachooser.c    |   29 ++++++++++++++++++++++++++++-
 parole/parole-medialist.c       |    2 +-
 5 files changed, 50 insertions(+), 7 deletions(-)

diff --git a/data/interfaces/mediachooser.ui b/data/interfaces/mediachooser.ui
index 991065f..b5023cd 100644
--- a/data/interfaces/mediachooser.ui
+++ b/data/interfaces/mediachooser.ui
@@ -20,6 +20,21 @@
       </packing>
     </child>
     <child>
+      <object class="GtkCheckButton" id="recursive">
+        <property name="label" translatable="yes">Scan folders recursively</property>
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="draw_indicator">True</property>
+        <signal name="toggled" handler="parole_media_chooser_recursive_toggled_cb"/>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="fill">False</property>
+        <property name="position">1</property>
+      </packing>
+    </child>
+    <child>
       <object class="GtkHButtonBox" id="hbuttonbox1">
         <property name="visible">True</property>
         <property name="border_width">5</property>
@@ -57,7 +72,7 @@
       </object>
       <packing>
         <property name="expand">False</property>
-        <property name="position">1</property>
+        <property name="position">2</property>
       </packing>
     </child>
   </object>
diff --git a/parole/parole-filters.c b/parole/parole-filters.c
index 5f52422..0d8811b 100644
--- a/parole/parole-filters.c
+++ b/parole/parole-filters.c
@@ -148,7 +148,8 @@ gboolean parole_file_filter (GtkFileFilter *filter, ParoleFile *file)
     return ret;
 }
 
-void parole_get_media_files (GtkFileFilter *filter, const gchar *path, GSList **list)
+void parole_get_media_files (GtkFileFilter *filter, const gchar *path, 
+			     gboolean recursive, GSList **list)
 {
     GtkFileFilter *playlist_filter;
     GSList *list_internal = NULL;
@@ -189,9 +190,9 @@ void parole_get_media_files (GtkFileFilter *filter, const gchar *path, GSList **
 	while ( (name = g_dir_read_name (dir)) )
 	{
 	    gchar *path_internal = g_strdup_printf ("%s/%s", path, name);
-	    if ( g_file_test (path_internal, G_FILE_TEST_IS_DIR) )
+	    if ( g_file_test (path_internal, G_FILE_TEST_IS_DIR) && recursive)
 	    {
-		parole_get_media_files (filter, path_internal, list);
+		parole_get_media_files (filter, path_internal, TRUE, list);
 	    }
 	    else if ( g_file_test (path_internal, G_FILE_TEST_IS_REGULAR) )
 	    {
@@ -218,6 +219,5 @@ void parole_get_media_files (GtkFileFilter *filter, const gchar *path, GSList **
 	g_dir_close (dir);
 	*list = g_slist_concat (*list, list_internal);
     }
-    
     g_object_unref (playlist_filter);
 }
diff --git a/parole/parole-filters.h b/parole/parole-filters.h
index 73308dd..2a12951 100644
--- a/parole/parole-filters.h
+++ b/parole/parole-filters.h
@@ -53,6 +53,7 @@ ParoleFileFormat	 parole_file_guess_format		(ParoleFile *file);
 
 void			 parole_get_media_files			(GtkFileFilter *filter,
 								 const gchar *path,
+								 gboolean recursive,
 								 GSList **list);
 
 G_END_DECLS
diff --git a/parole/parole-mediachooser.c b/parole/parole-mediachooser.c
index 7af1af3..55464b8 100644
--- a/parole/parole-mediachooser.c
+++ b/parole/parole-mediachooser.c
@@ -56,6 +56,11 @@ void	media_chooser_folder_changed_cb (GtkWidget *widget,
 void	media_chooser_file_activate_cb  (GtkFileChooser *filechooser,
 					 ParoleMediaChooser *chooser);
 
+void	parole_media_chooser_recursive_toggled_cb (GtkToggleButton *recursive,
+						   gpointer data);
+    
+    
+
 enum
 {
     MEDIA_FILES_OPENED,
@@ -90,6 +95,8 @@ parole_media_chooser_add (ParoleMediaChooser *chooser, GtkWidget *file_chooser)
     GSList *media_files = NULL;
     GSList *files;
     GtkFileFilter *filter;
+    GtkWidget *recursive;
+    gboolean scan_recursive;
     gchar *file;
     guint    i;
     guint len;
@@ -100,12 +107,16 @@ parole_media_chooser_add (ParoleMediaChooser *chooser, GtkWidget *file_chooser)
     if ( G_UNLIKELY (files == NULL) )
 	return;
 	
+    recursive = g_object_get_data (G_OBJECT (chooser), "recursive");
+    
+    scan_recursive = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (recursive));
+    
     len = g_slist_length (files);
     
     for ( i = 0; i < len; i++)
     {
 	file = g_slist_nth_data (files, i);
-	parole_get_media_files (filter, file, &media_files);
+	parole_get_media_files (filter, file, scan_recursive, &media_files);
     }
     
     g_signal_emit (G_OBJECT (chooser), signals [MEDIA_FILES_OPENED], 0, media_files);
@@ -132,6 +143,14 @@ void media_chooser_file_activate_cb (GtkFileChooser *filechooser, ParoleMediaCho
     parole_media_chooser_open (NULL, chooser);
 }
 
+void	parole_media_chooser_recursive_toggled_cb (GtkToggleButton *recursive,
+						   gpointer data)
+{
+    parole_rc_write_entry_bool ("scan-recursive", 
+			        PAROLE_RC_GROUP_GENERAL, 
+				gtk_toggle_button_get_active (recursive));
+}
+
 static void
 parole_media_chooser_open_internal (GtkWidget *chooser)
 {
@@ -141,6 +160,8 @@ parole_media_chooser_open_internal (GtkWidget *chooser)
     GtkBuilder  *builder;
     GtkWidget   *open;
     GtkWidget   *img;
+    GtkWidget   *recursive;
+    gboolean     scan_recursive;
     const gchar *folder;
 
     media_chooser = PAROLE_MEDIA_CHOOSER (chooser);
@@ -167,6 +188,11 @@ parole_media_chooser_open_internal (GtkWidget *chooser)
     
     gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (file_chooser), TRUE);
     
+    scan_recursive = parole_rc_read_entry_bool ("scan-recursive", PAROLE_RC_GROUP_GENERAL, TRUE);
+    
+    recursive = GTK_WIDGET (gtk_builder_get_object (builder, "recursive"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (recursive), scan_recursive);
+    
     img = gtk_image_new_from_stock (GTK_STOCK_ADD, GTK_ICON_SIZE_BUTTON);
     
     g_object_set (G_OBJECT (open),
@@ -175,6 +201,7 @@ parole_media_chooser_open_internal (GtkWidget *chooser)
 		  NULL);
     
     g_object_set_data (G_OBJECT (chooser), "file-chooser", file_chooser);
+    g_object_set_data (G_OBJECT (chooser), "recursive", recursive);
     
     gtk_container_add (GTK_CONTAINER (GTK_DIALOG (media_chooser)->vbox), vbox);
     gtk_builder_connect_signals (builder, chooser);
diff --git a/parole/parole-medialist.c b/parole/parole-medialist.c
index 1faa0f4..d023911 100644
--- a/parole/parole-medialist.c
+++ b/parole/parole-medialist.c
@@ -1093,7 +1093,7 @@ parole_media_list_add_by_path (ParoleMediaList *list, const gchar *path, gboolea
     filter = parole_get_supported_media_filter ();
     g_object_ref_sink (filter);
     
-    parole_get_media_files (filter, path, &file_list);
+    parole_get_media_files (filter, path, TRUE, &file_list);
     
     parole_media_list_files_opened_cb (NULL, file_list, list);
     len = g_slist_length (file_list);



More information about the Xfce4-commits mailing list