[Xfce4-commits] r25361 - in squeeze/trunk: libsqueeze src

Stephan Arts stephan at xfce.org
Mon Apr 2 13:09:43 CEST 2007


Author: stephan
Date: 2007-04-02 11:09:43 +0000 (Mon, 02 Apr 2007)
New Revision: 25361

Modified:
   squeeze/trunk/libsqueeze/command-builder-compr.c
   squeeze/trunk/libsqueeze/command-builder-gnu-tar.c
   squeeze/trunk/libsqueeze/command-builder-rar.c
   squeeze/trunk/libsqueeze/command-builder-zip.c
   squeeze/trunk/libsqueeze/libsqueeze.c
   squeeze/trunk/libsqueeze/libsqueeze.h
   squeeze/trunk/src/new_dialog.c
   squeeze/trunk/src/new_dialog.h
Log:
Fix bug #2774



Modified: squeeze/trunk/libsqueeze/command-builder-compr.c
===================================================================
--- squeeze/trunk/libsqueeze/command-builder-compr.c	2007-04-02 10:39:06 UTC (rev 25360)
+++ squeeze/trunk/libsqueeze/command-builder-compr.c	2007-04-02 11:09:43 UTC (rev 25361)
@@ -105,10 +105,26 @@
 	command_builder->build_refresh = lsq_command_builder_compr_build_refresh;
 
 	command_builder->mime_types = g_new0(gchar *, 5);
-	command_builder->mime_types[0] = "application/x-gzip";
-	command_builder->mime_types[1] = "application/x-bzip";
-	command_builder->mime_types[2] = "application/x-lzop";
-	command_builder->mime_types[3] = "application/x-compress";
+	gint i = 0;
+	if(g_find_program_in_path("compress"))
+	{
+		command_builder->mime_types[i] = "application/x-compress";
+		i++;
+	}
+	if(g_find_program_in_path("gzip"))
+	{
+		command_builder->mime_types[i] = "application/x-gzip";
+		i++;
+	}
+	if(g_find_program_in_path("bzip2"))
+	{
+		command_builder->mime_types[i] = "application/x-bzip";
+		i++;
+	}
+	if(g_find_program_in_path("lzop"))
+	{
+		command_builder->mime_types[i] = "application/x-lzop";
+	}
 }
 
 /**

Modified: squeeze/trunk/libsqueeze/command-builder-gnu-tar.c
===================================================================
--- squeeze/trunk/libsqueeze/command-builder-gnu-tar.c	2007-04-02 10:39:06 UTC (rev 25360)
+++ squeeze/trunk/libsqueeze/command-builder-gnu-tar.c	2007-04-02 11:09:43 UTC (rev 25361)
@@ -105,11 +105,30 @@
 	command_builder->build_refresh = lsq_command_builder_gnu_tar_build_refresh;
 
 	command_builder->mime_types = g_new0(gchar *, 6);
-	command_builder->mime_types[0] = "application/x-tar";
-	command_builder->mime_types[1] = "application/x-tarz";
-	command_builder->mime_types[2] = "application/x-compressed-tar";
-	command_builder->mime_types[3] = "application/x-bzip-compressed-tar";
-	command_builder->mime_types[4] = "application/x-tzo";
+	if(g_find_program_in_path("tar"))
+	{
+		command_builder->mime_types[0] = "application/x-tar";
+		int i = 1;
+		if(g_find_program_in_path("compress"))
+		{
+			command_builder->mime_types[i] = "application/x-tarz";
+			i++;
+		}
+		if(g_find_program_in_path("gzip"))
+		{
+			command_builder->mime_types[i] = "application/x-compressed-tar";
+			i++;
+		}
+		if(g_find_program_in_path("bzip2"))
+		{
+			command_builder->mime_types[i] = "application/x-bzip-compressed-tar";
+			i++;
+		}
+		if(g_find_program_in_path("lzop"))
+		{
+			command_builder->mime_types[i] = "application/x-tzo";
+		}
+	}
 
 	lsq_builder_settings_set_property_types(command_builder->settings, 
 	                                        _("Rights"), /* rights*/

Modified: squeeze/trunk/libsqueeze/command-builder-rar.c
===================================================================
--- squeeze/trunk/libsqueeze/command-builder-rar.c	2007-04-02 10:39:06 UTC (rev 25360)
+++ squeeze/trunk/libsqueeze/command-builder-rar.c	2007-04-02 11:09:43 UTC (rev 25361)
@@ -105,13 +105,23 @@
 {
 	LSQCommandBuilder *command_builder = LSQ_COMMAND_BUILDER(command_builder_rar);
 
-	command_builder->build_add = lsq_command_builder_rar_build_add;
-	command_builder->build_extract = lsq_command_builder_rar_build_extract;
-	command_builder->build_remove = lsq_command_builder_rar_build_remove;
-	command_builder->build_refresh = lsq_command_builder_rar_build_refresh;
+	gchar *rar_path = g_find_program_in_path("rar");
+	gchar *unrar_path = g_find_program_in_path("unrar");
 
+	if(rar_path)
+	{
+		command_builder->build_add = lsq_command_builder_rar_build_add;
+		command_builder->build_remove = lsq_command_builder_rar_build_remove;
+	}
+	if(unrar_path)
+	{
+		command_builder->build_extract = lsq_command_builder_rar_build_extract;
+		command_builder->build_refresh = lsq_command_builder_rar_build_refresh;
+	}
+
 	command_builder->mime_types = g_new0(gchar *, 2);
-	command_builder->mime_types[0] = "application/x-rar";
+	if(rar_path || unrar_path)
+		command_builder->mime_types[0] = "application/x-rar";
 
 	lsq_builder_settings_set_property_types(command_builder->settings, 
 	                                        _("Compressed"), /* length */
@@ -133,6 +143,8 @@
 	                                        _("Version"), /* version*/
 	                                        G_TYPE_STRING,
                                           NULL);
+	g_free(rar_path);
+	g_free(unrar_path);
 }
 
 /**

Modified: squeeze/trunk/libsqueeze/command-builder-zip.c
===================================================================
--- squeeze/trunk/libsqueeze/command-builder-zip.c	2007-04-02 10:39:06 UTC (rev 25360)
+++ squeeze/trunk/libsqueeze/command-builder-zip.c	2007-04-02 11:09:43 UTC (rev 25361)
@@ -100,7 +100,8 @@
 	command_builder->build_refresh = lsq_command_builder_zip_build_refresh;
 
 	command_builder->mime_types = g_new0(gchar *, 2);
-	command_builder->mime_types[0] = "application/zip";
+	if(g_find_program_in_path("zip") && g_find_program_in_path("unzip"))
+		command_builder->mime_types[0] = "application/zip";
 
 	lsq_builder_settings_set_property_types(command_builder->settings, 
 	                                        _("Compressed"), /* length */

Modified: squeeze/trunk/libsqueeze/libsqueeze.c
===================================================================
--- squeeze/trunk/libsqueeze/libsqueeze.c	2007-04-02 10:39:06 UTC (rev 25360)
+++ squeeze/trunk/libsqueeze/libsqueeze.c	2007-04-02 11:09:43 UTC (rev 25361)
@@ -137,9 +137,23 @@
 }
 
 GSList *
-lsq_get_supported_mime_types()
+lsq_get_supported_mime_types(LSQSupportTypes types)
 {
-	return g_slist_copy(lsq_mime_info_list);
+	GSList *m_types = g_slist_copy(lsq_mime_info_list);
+	if(types &= LSQ_SUPPORT_ADD)
+	{
+		GSList *_types = m_types;
+		while(_types)
+		{
+			LSQArchiveMime *mime = _types->data;
+			LSQCommandBuilder *builder = mime->command_builders->data;
+			if(!builder->build_add)
+				m_types = g_slist_remove(m_types, mime);
+			_types = g_slist_next(_types);
+		}
+	}
+	
+	return m_types;
 }
 
 static gint

Modified: squeeze/trunk/libsqueeze/libsqueeze.h
===================================================================
--- squeeze/trunk/libsqueeze/libsqueeze.h	2007-04-02 10:39:06 UTC (rev 25360)
+++ squeeze/trunk/libsqueeze/libsqueeze.h	2007-04-02 11:09:43 UTC (rev 25361)
@@ -24,6 +24,14 @@
 
 G_BEGIN_DECLS
 
+typedef enum
+{
+	LSQ_SUPPORT_ADD = 1,
+	LSQ_SUPPORT_REMOVE = 2,
+	LSQ_SUPPORT_REFRESH = 3,
+	LSQ_SUPPORT_EXTRACT = 4
+} LSQSupportTypes;
+
 /*
  * void
  * lsq_init()
@@ -73,7 +81,7 @@
 lsq_close_archive( LSQArchive *archive );
 
 GSList *
-lsq_get_supported_mime_types();
+lsq_get_supported_mime_types(LSQSupportTypes);
 
 gboolean
 lsq_is_supported(const gchar *filename);

Modified: squeeze/trunk/src/new_dialog.c
===================================================================
--- squeeze/trunk/src/new_dialog.c	2007-04-02 10:39:06 UTC (rev 25360)
+++ squeeze/trunk/src/new_dialog.c	2007-04-02 11:09:43 UTC (rev 25361)
@@ -73,7 +73,8 @@
 
 	gtk_widget_show_all(hbox);
 
-	GSList *_supported_mime_types = lsq_get_supported_mime_types();
+	dialog->supported_mime_types = lsq_get_supported_mime_types(LSQ_SUPPORT_ADD);
+	GSList *_supported_mime_types = dialog->supported_mime_types;
 
 	dialog->file_filter = gtk_file_filter_new();
 	gtk_file_filter_set_name(dialog->file_filter, _("Archives"));
@@ -85,7 +86,7 @@
 		gtk_file_filter_add_mime_type(dialog->file_filter,
 		        lsq_archive_mime_get_name((LSQArchiveMime *)(_supported_mime_types->data)));
 		if(!strcmp(lsq_archive_mime_get_name((LSQArchiveMime *)_supported_mime_types->data), "application/x-compressed-tar"))
-			gtk_combo_box_set_active(GTK_COMBO_BOX(dialog->archive_types_combo), g_slist_index(lsq_get_supported_mime_types(), _supported_mime_types->data));
+			gtk_combo_box_set_active(GTK_COMBO_BOX(dialog->archive_types_combo), g_slist_index(dialog->supported_mime_types, _supported_mime_types->data));
 		_supported_mime_types = g_slist_next(_supported_mime_types);
 	}
 
@@ -127,7 +128,7 @@
 	{
 		g_free(base);
 		gint i;
-		GSList *_supported_mime_types = lsq_get_supported_mime_types();
+		GSList *_supported_mime_types = dialog->supported_mime_types;
 		for(i = 0; i < gtk_combo_box_get_active(GTK_COMBO_BOX(dialog->archive_types_combo)); i++)
 		{
 			_supported_mime_types = g_slist_next(_supported_mime_types);

Modified: squeeze/trunk/src/new_dialog.h
===================================================================
--- squeeze/trunk/src/new_dialog.h	2007-04-02 10:39:06 UTC (rev 25360)
+++ squeeze/trunk/src/new_dialog.h	2007-04-02 11:09:43 UTC (rev 25361)
@@ -45,6 +45,7 @@
 	GtkFileChooserDialog parent;
 	GtkWidget *archive_types_combo;
 	GtkFileFilter *file_filter; /* HACK -- should just be set inside the constructor */
+	GSList *supported_mime_types;
 };
 
 typedef struct _SQNewArchiveDialogClass SQNewArchiveDialogClass;



More information about the Xfce4-commits mailing list