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; _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits