You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2933 lines
107 KiB
2933 lines
107 KiB
From c5fbd2427753add9f05cc87d0f25789cce37b2e2 Mon Sep 17 00:00:00 2001 |
|
From: Carlos Soriano <csoriano@gnome.org> |
|
Date: Wed, 6 Jun 2018 14:59:39 +0200 |
|
Subject: [PATCH] Remove autoar |
|
|
|
--- |
|
meson.build | 2 - |
|
po/POTFILES.in | 4 +- |
|
src/meson.build | 5 +- |
|
src/nautilus-compress-dialog-controller.c | 339 -------- |
|
src/nautilus-compress-dialog-controller.h | 36 - |
|
src/nautilus-file-operations.c | 857 ------------------- |
|
src/nautilus-file-operations.h | 14 - |
|
src/nautilus-file-undo-operations.c | 320 ------- |
|
src/nautilus-file-undo-operations.h | 58 -- |
|
src/nautilus-file.c | 38 +- |
|
src/nautilus-files-view.c | 636 +------------- |
|
src/nautilus-mime-actions.c | 28 - |
|
src/resources/nautilus.gresource.xml | 1 - |
|
src/resources/ui/nautilus-compress-dialog.ui | 186 ---- |
|
14 files changed, 37 insertions(+), 2487 deletions(-) |
|
delete mode 100644 src/nautilus-compress-dialog-controller.c |
|
delete mode 100644 src/nautilus-compress-dialog-controller.h |
|
delete mode 100644 src/resources/ui/nautilus-compress-dialog.ui |
|
|
|
diff --git a/meson.build b/meson.build |
|
index 6256193cc..7a450292d 100644 |
|
--- a/meson.build |
|
+++ b/meson.build |
|
@@ -29,7 +29,6 @@ exif_ver = '>=0.6.20' |
|
exempi_ver = '>=2.1.0' |
|
notify_ver = '0.7.0' |
|
schemas_ver = '>=3.8.0' |
|
-autoar_ver = '>=0.2.1' |
|
selinux_ver = '>=2.0' |
|
|
|
cc = meson.get_compiler ('c') |
|
@@ -39,7 +38,6 @@ i18n = import ('i18n') |
|
|
|
glib = dependency ('glib-2.0', version: glib_ver) |
|
gtk = dependency ('gtk+-3.0', version: gtk_ver) |
|
-autoar = dependency ('gnome-autoar-0', version: autoar_ver) |
|
|
|
gail = dependency ('gail-3.0') |
|
gnome_desktop = dependency ('gnome-desktop-3.0', version: gnome_desktop_ver) |
|
diff --git a/po/POTFILES.in b/po/POTFILES.in |
|
index 277a7ff0a..fbc896866 100644 |
|
--- a/po/POTFILES.in |
|
+++ b/po/POTFILES.in |
|
@@ -32,7 +32,6 @@ src/nautilus-canvas-view-container.c |
|
src/nautilus-clipboard.c |
|
src/nautilus-column-chooser.c |
|
src/nautilus-column-utilities.c |
|
-src/nautilus-compress-dialog-controller.c |
|
src/nautilus-desktop-item-properties.c |
|
src/nautilus-directory.c |
|
src/nautilus-dnd.c |
|
@@ -81,7 +80,6 @@ src/nautilus-x-content-bar.c |
|
src/resources/gtk/help-overlay.ui |
|
src/resources/gtk/menus.ui |
|
src/resources/ui/nautilus-batch-rename-dialog.ui |
|
-src/resources/ui/nautilus-compress-dialog.ui |
|
src/resources/ui/nautilus-create-folder-dialog.ui |
|
src/resources/ui/nautilus-files-view-context-menus.ui |
|
src/resources/ui/nautilus-folder-is-empty.ui |
|
@@ -100,4 +98,4 @@ src/resources/ui/nautilus-window.ui |
|
src/gtk/nautilusgtkplacesview.c |
|
src/gtk/nautilusgtkplacesviewrow.c |
|
src/gtk/nautilusgtkplacesviewrow.ui |
|
-src/gtk/nautilusgtkplacesview.ui |
|
+src/gtk/nautilusgtkplacesview.ui |
|
\ No newline at end of file |
|
diff --git a/src/meson.build b/src/meson.build |
|
index cc08345d8..e83190d25 100644 |
|
--- a/src/meson.build |
|
+++ b/src/meson.build |
|
@@ -176,8 +176,6 @@ libnautilus_sources = [ |
|
'nautilus-rename-file-popover-controller.h', |
|
'nautilus-new-folder-dialog-controller.c', |
|
'nautilus-new-folder-dialog-controller.h', |
|
- 'nautilus-compress-dialog-controller.c', |
|
- 'nautilus-compress-dialog-controller.h', |
|
'nautilus-operations-ui-manager.c', |
|
'nautilus-operations-ui-manager.h', |
|
'nautilus-file-operations.c', |
|
@@ -264,7 +262,6 @@ libnautilus_sources = [ |
|
|
|
nautilus_deps = [glib, |
|
gtk, |
|
- autoar, |
|
xml, |
|
gsettings_desktop_schemas, |
|
libgd_dep, |
|
@@ -312,4 +309,4 @@ test ('nautilus', nautilus, args: ['--check', '--g-fatal-warnings']) |
|
nautilus_autorun_software = executable ('nautilus-autorun-software', |
|
'nautilus-autorun-software.c', |
|
dependencies: libnautilus_dep, |
|
- install: true) |
|
+ install: true) |
|
\ No newline at end of file |
|
diff --git a/src/nautilus-compress-dialog-controller.c b/src/nautilus-compress-dialog-controller.c |
|
deleted file mode 100644 |
|
index 3937181a8..000000000 |
|
--- a/src/nautilus-compress-dialog-controller.c |
|
+++ /dev/null |
|
@@ -1,339 +0,0 @@ |
|
-/* nautilus-compress-dialog-controller.h |
|
- * |
|
- * Copyright (C) 2016 the Nautilus developers |
|
- * |
|
- * This program is free software; you can redistribute it and/or |
|
- * modify it under the terms of the GNU General Public License as |
|
- * published by the Free Software Foundation; either version 2 of the |
|
- * License, or (at your option) any later version. |
|
- * |
|
- * This program is distributed in the hope that it will be useful, |
|
- * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
- * General Public License for more details. |
|
- * |
|
- * You should have received a copy of the GNU General Public |
|
- * License along with this program; if not, see <http://www.gnu.org/licenses/>. |
|
- * |
|
- */ |
|
- |
|
-#include <glib/gi18n.h> |
|
-#include <gnome-autoar/gnome-autoar.h> |
|
- |
|
-#include <eel/eel-vfs-extensions.h> |
|
- |
|
-#include "nautilus-compress-dialog-controller.h" |
|
- |
|
-#include "nautilus-global-preferences.h" |
|
- |
|
-struct _NautilusCompressDialogController |
|
-{ |
|
- NautilusFileNameWidgetController parent_instance; |
|
- |
|
- GtkWidget *compress_dialog; |
|
- GtkWidget *description_stack; |
|
- GtkWidget *name_entry; |
|
- GtkWidget *zip_radio_button; |
|
- GtkWidget *tar_xz_radio_button; |
|
- GtkWidget *seven_zip_radio_button; |
|
- |
|
- const char *extension; |
|
- |
|
- gint response_handler_id; |
|
-}; |
|
- |
|
-G_DEFINE_TYPE (NautilusCompressDialogController, nautilus_compress_dialog_controller, NAUTILUS_TYPE_FILE_NAME_WIDGET_CONTROLLER); |
|
- |
|
-static gboolean |
|
-nautilus_compress_dialog_controller_name_is_valid (NautilusFileNameWidgetController *self, |
|
- gchar *name, |
|
- gchar **error_message) |
|
-{ |
|
- if (strlen (name) == 0) |
|
- { |
|
- return FALSE; |
|
- } |
|
- |
|
- if (strstr (name, "/") != NULL) |
|
- { |
|
- *error_message = _("Archive names cannot contain “/”."); |
|
- } |
|
- else if (strcmp (name, ".") == 0) |
|
- { |
|
- *error_message = _("An archive cannot be called “.”."); |
|
- } |
|
- else if (strcmp (name, "..") == 0) |
|
- { |
|
- *error_message = _("An archive cannot be called “..”."); |
|
- } |
|
- |
|
- return *error_message == NULL; |
|
-} |
|
- |
|
-static gchar * |
|
-nautilus_compress_dialog_controller_get_new_name (NautilusFileNameWidgetController *controller) |
|
-{ |
|
- NautilusCompressDialogController *self; |
|
- g_autofree gchar *basename = NULL; |
|
- gchar *error_message = NULL; |
|
- gboolean valid_name; |
|
- |
|
- self = NAUTILUS_COMPRESS_DIALOG_CONTROLLER (controller); |
|
- |
|
- basename = NAUTILUS_FILE_NAME_WIDGET_CONTROLLER_CLASS (nautilus_compress_dialog_controller_parent_class)->get_new_name (controller); |
|
- /* Do not check or add the extension if the name is invalid */ |
|
- valid_name = nautilus_compress_dialog_controller_name_is_valid (controller, |
|
- basename, |
|
- &error_message); |
|
- |
|
- if (!valid_name) |
|
- { |
|
- return g_strdup (basename); |
|
- } |
|
- |
|
- if (g_str_has_suffix (basename, self->extension)) |
|
- { |
|
- return g_strdup (basename); |
|
- } |
|
- |
|
- return g_strconcat (basename, self->extension, NULL); |
|
-} |
|
- |
|
-static void |
|
-compress_dialog_controller_on_response (GtkDialog *dialog, |
|
- gint response_id, |
|
- gpointer user_data) |
|
-{ |
|
- NautilusCompressDialogController *controller; |
|
- |
|
- controller = NAUTILUS_COMPRESS_DIALOG_CONTROLLER (user_data); |
|
- |
|
- if (response_id != GTK_RESPONSE_OK) |
|
- { |
|
- g_signal_emit_by_name (controller, "cancelled"); |
|
- } |
|
-} |
|
- |
|
-static void |
|
-update_selected_format (NautilusCompressDialogController *self, |
|
- NautilusCompressionFormat format) |
|
-{ |
|
- const char *extension; |
|
- const char *description_label_name; |
|
- GtkWidget *active_button; |
|
- |
|
- switch (format) |
|
- { |
|
- case NAUTILUS_COMPRESSION_ZIP: |
|
- { |
|
- extension = ".zip"; |
|
- description_label_name = "zip-description-label"; |
|
- active_button = self->zip_radio_button; |
|
- } |
|
- break; |
|
- |
|
- case NAUTILUS_COMPRESSION_TAR_XZ: |
|
- { |
|
- extension = ".tar.xz"; |
|
- description_label_name = "tar-xz-description-label"; |
|
- active_button = self->tar_xz_radio_button; |
|
- } |
|
- break; |
|
- |
|
- case NAUTILUS_COMPRESSION_7ZIP: |
|
- { |
|
- extension = ".7z"; |
|
- description_label_name = "seven-zip-description-label"; |
|
- active_button = self->seven_zip_radio_button; |
|
- } |
|
- break; |
|
- |
|
- default: |
|
- { |
|
- g_assert_not_reached (); |
|
- } |
|
- break; |
|
- } |
|
- |
|
- self->extension = extension; |
|
- |
|
- gtk_stack_set_visible_child_name (GTK_STACK (self->description_stack), |
|
- description_label_name); |
|
- |
|
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (active_button), |
|
- TRUE); |
|
- |
|
- g_settings_set_enum (nautilus_compression_preferences, |
|
- NAUTILUS_PREFERENCES_DEFAULT_COMPRESSION_FORMAT, |
|
- format); |
|
- /* Since the extension changes when the button is toggled, force a |
|
- * verification of the new file name by simulating an entry change |
|
- */ |
|
- g_signal_emit_by_name (self->name_entry, "changed"); |
|
-} |
|
- |
|
-static void |
|
-zip_radio_button_on_toggled (GtkToggleButton *toggle_button, |
|
- gpointer user_data) |
|
-{ |
|
- NautilusCompressDialogController *controller; |
|
- |
|
- controller = NAUTILUS_COMPRESS_DIALOG_CONTROLLER (user_data); |
|
- |
|
- if (!gtk_toggle_button_get_active (toggle_button)) |
|
- { |
|
- return; |
|
- } |
|
- |
|
- update_selected_format (controller, |
|
- NAUTILUS_COMPRESSION_ZIP); |
|
-} |
|
- |
|
-static void |
|
-tar_xz_radio_button_on_toggled (GtkToggleButton *toggle_button, |
|
- gpointer user_data) |
|
-{ |
|
- NautilusCompressDialogController *controller; |
|
- |
|
- controller = NAUTILUS_COMPRESS_DIALOG_CONTROLLER (user_data); |
|
- |
|
- if (!gtk_toggle_button_get_active (toggle_button)) |
|
- { |
|
- return; |
|
- } |
|
- |
|
- update_selected_format (controller, |
|
- NAUTILUS_COMPRESSION_TAR_XZ); |
|
-} |
|
- |
|
-static void |
|
-seven_zip_radio_button_on_toggled (GtkToggleButton *toggle_button, |
|
- gpointer user_data) |
|
-{ |
|
- NautilusCompressDialogController *controller; |
|
- |
|
- controller = NAUTILUS_COMPRESS_DIALOG_CONTROLLER (user_data); |
|
- |
|
- if (!gtk_toggle_button_get_active (toggle_button)) |
|
- { |
|
- return; |
|
- } |
|
- |
|
- update_selected_format (controller, |
|
- NAUTILUS_COMPRESSION_7ZIP); |
|
-} |
|
- |
|
-NautilusCompressDialogController * |
|
-nautilus_compress_dialog_controller_new (GtkWindow *parent_window, |
|
- NautilusDirectory *destination_directory, |
|
- gchar *initial_name) |
|
-{ |
|
- NautilusCompressDialogController *self; |
|
- g_autoptr (GtkBuilder) builder = NULL; |
|
- GtkWidget *compress_dialog; |
|
- GtkWidget *error_revealer; |
|
- GtkWidget *error_label; |
|
- GtkWidget *name_entry; |
|
- GtkWidget *activate_button; |
|
- GtkWidget *description_stack; |
|
- GtkWidget *zip_radio_button; |
|
- GtkWidget *tar_xz_radio_button; |
|
- GtkWidget *seven_zip_radio_button; |
|
- NautilusCompressionFormat format; |
|
- |
|
- builder = gtk_builder_new_from_resource ("/org/gnome/nautilus/ui/nautilus-compress-dialog.ui"); |
|
- compress_dialog = GTK_WIDGET (gtk_builder_get_object (builder, "compress_dialog")); |
|
- error_revealer = GTK_WIDGET (gtk_builder_get_object (builder, "error_revealer")); |
|
- error_label = GTK_WIDGET (gtk_builder_get_object (builder, "error_label")); |
|
- name_entry = GTK_WIDGET (gtk_builder_get_object (builder, "name_entry")); |
|
- activate_button = GTK_WIDGET (gtk_builder_get_object (builder, "activate_button")); |
|
- zip_radio_button = GTK_WIDGET (gtk_builder_get_object (builder, "zip_radio_button")); |
|
- tar_xz_radio_button = GTK_WIDGET (gtk_builder_get_object (builder, "tar_xz_radio_button")); |
|
- seven_zip_radio_button = GTK_WIDGET (gtk_builder_get_object (builder, "seven_zip_radio_button")); |
|
- description_stack = GTK_WIDGET (gtk_builder_get_object (builder, "description_stack")); |
|
- |
|
- gtk_window_set_transient_for (GTK_WINDOW (compress_dialog), |
|
- parent_window); |
|
- |
|
- self = g_object_new (NAUTILUS_TYPE_COMPRESS_DIALOG_CONTROLLER, |
|
- "error-revealer", error_revealer, |
|
- "error-label", error_label, |
|
- "name-entry", name_entry, |
|
- "activate-button", activate_button, |
|
- "containing-directory", destination_directory, NULL); |
|
- |
|
- self->compress_dialog = compress_dialog; |
|
- self->zip_radio_button = zip_radio_button; |
|
- self->tar_xz_radio_button = tar_xz_radio_button; |
|
- self->seven_zip_radio_button = seven_zip_radio_button; |
|
- self->description_stack = description_stack; |
|
- self->name_entry = name_entry; |
|
- |
|
- self->response_handler_id = g_signal_connect (compress_dialog, |
|
- "response", |
|
- (GCallback) compress_dialog_controller_on_response, |
|
- self); |
|
- |
|
- gtk_builder_add_callback_symbols (builder, |
|
- "zip_radio_button_on_toggled", |
|
- G_CALLBACK (zip_radio_button_on_toggled), |
|
- "tar_xz_radio_button_on_toggled", |
|
- G_CALLBACK (tar_xz_radio_button_on_toggled), |
|
- "seven_zip_radio_button_on_toggled", |
|
- G_CALLBACK (seven_zip_radio_button_on_toggled), |
|
- NULL); |
|
- gtk_builder_connect_signals (builder, self); |
|
- |
|
- format = g_settings_get_enum (nautilus_compression_preferences, |
|
- NAUTILUS_PREFERENCES_DEFAULT_COMPRESSION_FORMAT); |
|
- |
|
- update_selected_format (self, format); |
|
- |
|
- if (initial_name != NULL) |
|
- { |
|
- gtk_entry_set_text (GTK_ENTRY (name_entry), initial_name); |
|
- } |
|
- |
|
- gtk_widget_show_all (compress_dialog); |
|
- |
|
- return self; |
|
-} |
|
- |
|
-static void |
|
-nautilus_compress_dialog_controller_init (NautilusCompressDialogController *self) |
|
-{ |
|
-} |
|
- |
|
-static void |
|
-nautilus_compress_dialog_controller_finalize (GObject *object) |
|
-{ |
|
- NautilusCompressDialogController *self; |
|
- |
|
- self = NAUTILUS_COMPRESS_DIALOG_CONTROLLER (object); |
|
- |
|
- if (self->compress_dialog != NULL) |
|
- { |
|
- if (self->response_handler_id > 0) |
|
- { |
|
- g_signal_handler_disconnect (self->compress_dialog, |
|
- self->response_handler_id); |
|
- self->response_handler_id = 0; |
|
- } |
|
- gtk_widget_destroy (self->compress_dialog); |
|
- self->compress_dialog = NULL; |
|
- } |
|
- |
|
- G_OBJECT_CLASS (nautilus_compress_dialog_controller_parent_class)->finalize (object); |
|
-} |
|
- |
|
-static void |
|
-nautilus_compress_dialog_controller_class_init (NautilusCompressDialogControllerClass *klass) |
|
-{ |
|
- GObjectClass *object_class = G_OBJECT_CLASS (klass); |
|
- NautilusFileNameWidgetControllerClass *parent_class = NAUTILUS_FILE_NAME_WIDGET_CONTROLLER_CLASS (klass); |
|
- |
|
- object_class->finalize = nautilus_compress_dialog_controller_finalize; |
|
- |
|
- parent_class->get_new_name = nautilus_compress_dialog_controller_get_new_name; |
|
- parent_class->name_is_valid = nautilus_compress_dialog_controller_name_is_valid; |
|
-} |
|
diff --git a/src/nautilus-compress-dialog-controller.h b/src/nautilus-compress-dialog-controller.h |
|
deleted file mode 100644 |
|
index bb89413f1..000000000 |
|
--- a/src/nautilus-compress-dialog-controller.h |
|
+++ /dev/null |
|
@@ -1,36 +0,0 @@ |
|
-/* nautilus-compress-dialog-controller.h |
|
- * |
|
- * Copyright (C) 2016 the Nautilus developers |
|
- * |
|
- * This program is free software; you can redistribute it and/or |
|
- * modify it under the terms of the GNU General Public License as |
|
- * published by the Free Software Foundation; either version 2 of the |
|
- * License, or (at your option) any later version. |
|
- * |
|
- * This program is distributed in the hope that it will be useful, |
|
- * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
- * General Public License for more details. |
|
- * |
|
- * You should have received a copy of the GNU General Public |
|
- * License along with this program; if not, see <http://www.gnu.org/licenses/>. |
|
- * |
|
- */ |
|
- |
|
-#ifndef NAUTILUS_COMPRESS_DIALOG_CONTROLLER_H |
|
-#define NAUTILUS_COMPRESS_DIALOG_CONTROLLER_H |
|
- |
|
-#include <glib.h> |
|
-#include <gtk/gtk.h> |
|
- |
|
-#include "nautilus-file-name-widget-controller.h" |
|
-#include "nautilus-directory.h" |
|
- |
|
-#define NAUTILUS_TYPE_COMPRESS_DIALOG_CONTROLLER nautilus_compress_dialog_controller_get_type () |
|
-G_DECLARE_FINAL_TYPE (NautilusCompressDialogController, nautilus_compress_dialog_controller, NAUTILUS, COMPRESS_DIALOG_CONTROLLER, NautilusFileNameWidgetController) |
|
- |
|
-NautilusCompressDialogController * nautilus_compress_dialog_controller_new (GtkWindow *parent_window, |
|
- NautilusDirectory *destination_directory, |
|
- gchar *initial_name); |
|
- |
|
-#endif /* NAUTILUS_COMPRESS_DIALOG_CONTROLLER_H */ |
|
diff --git a/src/nautilus-file-operations.c b/src/nautilus-file-operations.c |
|
index 546acf835..5bcb4e357 100644 |
|
--- a/src/nautilus-file-operations.c |
|
+++ b/src/nautilus-file-operations.c |
|
@@ -160,7 +160,6 @@ typedef enum |
|
OP_KIND_MOVE, |
|
OP_KIND_DELETE, |
|
OP_KIND_TRASH, |
|
- OP_KIND_COMPRESS |
|
} OpKind; |
|
|
|
typedef struct |
|
@@ -180,40 +179,6 @@ typedef struct |
|
int last_reported_files_left; |
|
} TransferInfo; |
|
|
|
-typedef struct |
|
-{ |
|
- CommonJob common; |
|
- GList *source_files; |
|
- GFile *destination_directory; |
|
- GList *output_files; |
|
- |
|
- gdouble base_progress; |
|
- |
|
- guint64 archive_compressed_size; |
|
- guint64 total_compressed_size; |
|
- |
|
- NautilusExtractCallback done_callback; |
|
- gpointer done_callback_data; |
|
-} ExtractJob; |
|
- |
|
-typedef struct |
|
-{ |
|
- CommonJob common; |
|
- GList *source_files; |
|
- GFile *output_file; |
|
- |
|
- AutoarFormat format; |
|
- AutoarFilter filter; |
|
- |
|
- guint64 total_size; |
|
- guint total_files; |
|
- |
|
- gboolean success; |
|
- |
|
- NautilusCreateCallback done_callback; |
|
- gpointer done_callback_data; |
|
-} CompressJob; |
|
- |
|
#define SECONDS_NEEDED_FOR_RELIABLE_TRANSFER_RATE 8 |
|
#define NSEC_PER_MICROSEC 1000 |
|
#define PROGRESS_NOTIFY_INTERVAL 100 * NSEC_PER_MICROSEC |
|
@@ -3037,12 +3002,6 @@ report_preparing_count_progress (CommonJob *job, |
|
source_info->num_files); |
|
} |
|
break; |
|
- |
|
- case OP_KIND_COMPRESS: |
|
- s = g_strdup_printf (ngettext ("Preparing to compress %'d file", |
|
- "Preparing to compress %'d files", |
|
- source_info->num_files), |
|
- source_info->num_files); |
|
} |
|
|
|
nautilus_progress_info_take_details (job->progress, s); |
|
@@ -3089,9 +3048,6 @@ get_scan_primary (OpKind kind) |
|
{ |
|
return g_strdup (_("Error while moving files to trash.")); |
|
} |
|
- |
|
- case OP_KIND_COMPRESS: |
|
- return g_strdup (_("Error while compressing files.")); |
|
} |
|
} |
|
|
|
@@ -8034,819 +7990,6 @@ nautilus_file_mark_desktop_file_executable (GFile *file, |
|
g_task_run_in_thread (task, mark_desktop_file_executable_task_thread_func); |
|
} |
|
|
|
-static void |
|
-extract_task_done (GObject *source_object, |
|
- GAsyncResult *res, |
|
- gpointer user_data) |
|
-{ |
|
- ExtractJob *extract_job; |
|
- |
|
- extract_job = user_data; |
|
- |
|
- if (extract_job->done_callback) |
|
- { |
|
- extract_job->done_callback (extract_job->output_files, |
|
- extract_job->done_callback_data); |
|
- } |
|
- |
|
- g_list_free_full (extract_job->source_files, g_object_unref); |
|
- g_list_free_full (extract_job->output_files, g_object_unref); |
|
- g_object_unref (extract_job->destination_directory); |
|
- |
|
- finalize_common ((CommonJob *) extract_job); |
|
- |
|
- nautilus_file_changes_consume_changes (TRUE); |
|
-} |
|
- |
|
-static GFile * |
|
-extract_job_on_decide_destination (AutoarExtractor *extractor, |
|
- GFile *destination, |
|
- GList *files, |
|
- gpointer user_data) |
|
-{ |
|
- ExtractJob *extract_job = user_data; |
|
- GFile *decided_destination; |
|
- g_autofree char *basename = NULL; |
|
- |
|
- nautilus_progress_info_set_details (extract_job->common.progress, |
|
- _("Verifying destination")); |
|
- |
|
- basename = g_file_get_basename (destination); |
|
- decided_destination = nautilus_generate_unique_file_in_directory (extract_job->destination_directory, |
|
- basename); |
|
- |
|
- if (job_aborted ((CommonJob *) extract_job)) |
|
- { |
|
- g_object_unref (decided_destination); |
|
- return NULL; |
|
- } |
|
- |
|
- extract_job->output_files = g_list_prepend (extract_job->output_files, |
|
- decided_destination); |
|
- |
|
- return g_object_ref (decided_destination); |
|
-} |
|
- |
|
-static void |
|
-extract_job_on_progress (AutoarExtractor *extractor, |
|
- guint64 archive_current_decompressed_size, |
|
- guint archive_current_decompressed_files, |
|
- gpointer user_data) |
|
-{ |
|
- ExtractJob *extract_job = user_data; |
|
- CommonJob *common = user_data; |
|
- GFile *source_file; |
|
- char *details; |
|
- double elapsed; |
|
- double transfer_rate; |
|
- int remaining_time; |
|
- guint64 archive_total_decompressed_size; |
|
- gdouble archive_weight; |
|
- gdouble archive_decompress_progress; |
|
- guint64 job_completed_size; |
|
- gdouble job_progress; |
|
- g_autofree gchar *basename = NULL; |
|
- g_autofree gchar *formatted_size_job_completed_size = NULL; |
|
- g_autofree gchar *formatted_size_total_compressed_size = NULL; |
|
- |
|
- source_file = autoar_extractor_get_source_file (extractor); |
|
- |
|
- basename = get_basename (source_file); |
|
- nautilus_progress_info_take_status (common->progress, |
|
- g_strdup_printf (_("Extracting “%s”"), |
|
- basename)); |
|
- |
|
- archive_total_decompressed_size = autoar_extractor_get_total_size (extractor); |
|
- |
|
- archive_decompress_progress = (gdouble) archive_current_decompressed_size / |
|
- (gdouble) archive_total_decompressed_size; |
|
- |
|
- archive_weight = 0; |
|
- if (extract_job->total_compressed_size) |
|
- { |
|
- archive_weight = (gdouble) extract_job->archive_compressed_size / |
|
- (gdouble) extract_job->total_compressed_size; |
|
- } |
|
- |
|
- job_progress = archive_decompress_progress * archive_weight + extract_job->base_progress; |
|
- |
|
- elapsed = g_timer_elapsed (common->time, NULL); |
|
- |
|
- transfer_rate = 0; |
|
- remaining_time = -1; |
|
- |
|
- job_completed_size = job_progress * extract_job->total_compressed_size; |
|
- |
|
- if (elapsed > 0) |
|
- { |
|
- transfer_rate = job_completed_size / elapsed; |
|
- } |
|
- if (transfer_rate > 0) |
|
- { |
|
- remaining_time = (extract_job->total_compressed_size - job_completed_size) / |
|
- transfer_rate; |
|
- } |
|
- |
|
- formatted_size_job_completed_size = g_format_size (job_completed_size); |
|
- formatted_size_total_compressed_size = g_format_size (extract_job->total_compressed_size); |
|
- if (elapsed < SECONDS_NEEDED_FOR_RELIABLE_TRANSFER_RATE || |
|
- transfer_rate == 0) |
|
- { |
|
- /* To translators: %s will expand to a size like "2 bytes" or |
|
- * "3 MB", so something like "4 kb / 4 MB" |
|
- */ |
|
- details = g_strdup_printf (_("%s / %s"), formatted_size_job_completed_size, |
|
- formatted_size_total_compressed_size); |
|
- } |
|
- else |
|
- { |
|
- g_autofree gchar *formatted_time = NULL; |
|
- g_autofree gchar *formatted_size_transfer_rate = NULL; |
|
- |
|
- formatted_time = get_formatted_time (remaining_time); |
|
- formatted_size_transfer_rate = g_format_size ((goffset) transfer_rate); |
|
- /* To translators: %s will expand to a size like "2 bytes" or |
|
- * "3 MB", %s to a time duration like "2 minutes". So the whole |
|
- * thing will be something like |
|
- * "2 kb / 4 MB -- 2 hours left (4kb/sec)" |
|
- * |
|
- * The singular/plural form will be used depending on the |
|
- * remaining time (i.e. the %s argument). |
|
- */ |
|
- details = g_strdup_printf (ngettext ("%s / %s \xE2\x80\x94 %s left (%s/sec)", |
|
- "%s / %s \xE2\x80\x94 %s left (%s/sec)", |
|
- seconds_count_format_time_units (remaining_time)), |
|
- formatted_size_job_completed_size, |
|
- formatted_size_total_compressed_size, |
|
- formatted_time, |
|
- formatted_size_transfer_rate); |
|
- } |
|
- |
|
- nautilus_progress_info_take_details (common->progress, details); |
|
- |
|
- if (elapsed > SECONDS_NEEDED_FOR_APROXIMATE_TRANSFER_RATE) |
|
- { |
|
- nautilus_progress_info_set_remaining_time (common->progress, |
|
- remaining_time); |
|
- nautilus_progress_info_set_elapsed_time (common->progress, |
|
- elapsed); |
|
- } |
|
- |
|
- nautilus_progress_info_set_progress (common->progress, job_progress, 1); |
|
-} |
|
- |
|
-static void |
|
-extract_job_on_error (AutoarExtractor *extractor, |
|
- GError *error, |
|
- gpointer user_data) |
|
-{ |
|
- ExtractJob *extract_job = user_data; |
|
- GFile *source_file; |
|
- gint response_id; |
|
- g_autofree gchar *basename = NULL; |
|
- |
|
- source_file = autoar_extractor_get_source_file (extractor); |
|
- |
|
- if (IS_IO_ERROR (error, NOT_SUPPORTED)) |
|
- { |
|
- handle_unsupported_compressed_file (extract_job->common.parent_window, |
|
- source_file); |
|
- |
|
- return; |
|
- } |
|
- |
|
- basename = get_basename (source_file); |
|
- nautilus_progress_info_take_status (extract_job->common.progress, |
|
- g_strdup_printf (_("Error extracting “%s”"), |
|
- basename)); |
|
- |
|
- response_id = run_warning ((CommonJob *) extract_job, |
|
- g_strdup_printf (_("There was an error while extracting “%s”."), |
|
- basename), |
|
- g_strdup (error->message), |
|
- NULL, |
|
- FALSE, |
|
- CANCEL, |
|
- SKIP, |
|
- NULL); |
|
- |
|
- if (response_id == 0 || response_id == GTK_RESPONSE_DELETE_EVENT) |
|
- { |
|
- abort_job ((CommonJob *) extract_job); |
|
- } |
|
-} |
|
- |
|
-static void |
|
-extract_job_on_completed (AutoarExtractor *extractor, |
|
- gpointer user_data) |
|
-{ |
|
- ExtractJob *extract_job = user_data; |
|
- GFile *output_file; |
|
- |
|
- output_file = G_FILE (extract_job->output_files->data); |
|
- |
|
- nautilus_file_changes_queue_file_added (output_file); |
|
-} |
|
- |
|
-static void |
|
-extract_job_on_scanned (AutoarExtractor *extractor, |
|
- guint total_files, |
|
- gpointer user_data) |
|
-{ |
|
- guint64 total_size; |
|
- ExtractJob *extract_job; |
|
- GFile *source_file; |
|
- g_autofree gchar *basename; |
|
- GFileInfo *fsinfo; |
|
- guint64 free_size; |
|
- |
|
- extract_job = user_data; |
|
- total_size = autoar_extractor_get_total_size (extractor); |
|
- source_file = autoar_extractor_get_source_file (extractor); |
|
- basename = get_basename (source_file); |
|
- |
|
- fsinfo = g_file_query_filesystem_info (source_file, |
|
- G_FILE_ATTRIBUTE_FILESYSTEM_FREE "," |
|
- G_FILE_ATTRIBUTE_FILESYSTEM_READONLY, |
|
- extract_job->common.cancellable, |
|
- NULL); |
|
- free_size = g_file_info_get_attribute_uint64 (fsinfo, |
|
- G_FILE_ATTRIBUTE_FILESYSTEM_FREE); |
|
- |
|
- /* FIXME: G_MAXUINT64 is the value used by autoar when the file size cannot |
|
- * be determined. Ideally an API should be used instead. |
|
- */ |
|
- if (total_size != G_MAXUINT64 && total_size > free_size ) |
|
- { |
|
- nautilus_progress_info_take_status (extract_job->common.progress, |
|
- g_strdup_printf (_("Error extracting “%s”"), |
|
- basename)); |
|
- run_error (&extract_job->common, |
|
- g_strdup_printf (_("Not enough free space to extract %s"),basename), |
|
- NULL, |
|
- NULL, |
|
- FALSE, |
|
- CANCEL, |
|
- NULL); |
|
- |
|
- abort_job ((CommonJob *) extract_job); |
|
- } |
|
-} |
|
- |
|
-static void |
|
-report_extract_final_progress (ExtractJob *extract_job, |
|
- gint total_files) |
|
-{ |
|
- char *status; |
|
- g_autofree gchar *basename_dest = NULL; |
|
- g_autofree gchar *formatted_size = NULL; |
|
- |
|
- nautilus_progress_info_set_destination (extract_job->common.progress, |
|
- extract_job->destination_directory); |
|
- basename_dest = get_basename (extract_job->destination_directory); |
|
- |
|
- if (total_files == 1) |
|
- { |
|
- GFile *source_file; |
|
- g_autofree gchar * basename = NULL; |
|
- |
|
- source_file = G_FILE (extract_job->source_files->data); |
|
- basename = get_basename (source_file); |
|
- status = g_strdup_printf (_("Extracted “%s” to “%s”"), |
|
- basename, |
|
- basename_dest); |
|
- } |
|
- else |
|
- { |
|
- status = g_strdup_printf (ngettext ("Extracted %'d file to “%s”", |
|
- "Extracted %'d files to “%s”", |
|
- total_files), |
|
- total_files, |
|
- basename_dest); |
|
- } |
|
- |
|
- nautilus_progress_info_take_status (extract_job->common.progress, |
|
- status); |
|
- formatted_size = g_format_size (extract_job->total_compressed_size); |
|
- nautilus_progress_info_take_details (extract_job->common.progress, |
|
- g_strdup_printf (_("%s / %s"), |
|
- formatted_size, |
|
- formatted_size)); |
|
-} |
|
- |
|
-static void |
|
-extract_task_thread_func (GTask *task, |
|
- gpointer source_object, |
|
- gpointer task_data, |
|
- GCancellable *cancellable) |
|
-{ |
|
- ExtractJob *extract_job = task_data; |
|
- GList *l; |
|
- GList *existing_output_files = NULL; |
|
- gint total_files; |
|
- g_autofree guint64 *archive_compressed_sizes = NULL; |
|
- gint i; |
|
- |
|
- g_timer_start (extract_job->common.time); |
|
- |
|
- nautilus_progress_info_start (extract_job->common.progress); |
|
- |
|
- nautilus_progress_info_set_details (extract_job->common.progress, |
|
- _("Preparing to extract")); |
|
- |
|
- total_files = g_list_length (extract_job->source_files); |
|
- |
|
- archive_compressed_sizes = g_malloc0_n (total_files, sizeof (guint64)); |
|
- extract_job->total_compressed_size = 0; |
|
- |
|
- for (l = extract_job->source_files, i = 0; |
|
- l != NULL && !job_aborted ((CommonJob *) extract_job); |
|
- l = l->next, i++) |
|
- { |
|
- GFile *source_file; |
|
- g_autoptr (GFileInfo) info = NULL; |
|
- |
|
- source_file = G_FILE (l->data); |
|
- info = g_file_query_info (source_file, |
|
- G_FILE_ATTRIBUTE_STANDARD_SIZE, |
|
- G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, |
|
- extract_job->common.cancellable, |
|
- NULL); |
|
- |
|
- if (info) |
|
- { |
|
- archive_compressed_sizes[i] = g_file_info_get_size (info); |
|
- extract_job->total_compressed_size += archive_compressed_sizes[i]; |
|
- } |
|
- } |
|
- |
|
- extract_job->base_progress = 0; |
|
- |
|
- for (l = extract_job->source_files, i = 0; |
|
- l != NULL && !job_aborted ((CommonJob *) extract_job); |
|
- l = l->next, i++) |
|
- { |
|
- g_autoptr (AutoarExtractor) extractor = NULL; |
|
- |
|
- extractor = autoar_extractor_new (G_FILE (l->data), |
|
- extract_job->destination_directory); |
|
- |
|
- autoar_extractor_set_notify_interval (extractor, |
|
- PROGRESS_NOTIFY_INTERVAL); |
|
- g_signal_connect (extractor, "scanned", |
|
- G_CALLBACK (extract_job_on_scanned), |
|
- extract_job); |
|
- g_signal_connect (extractor, "error", |
|
- G_CALLBACK (extract_job_on_error), |
|
- extract_job); |
|
- g_signal_connect (extractor, "decide-destination", |
|
- G_CALLBACK (extract_job_on_decide_destination), |
|
- extract_job); |
|
- g_signal_connect (extractor, "progress", |
|
- G_CALLBACK (extract_job_on_progress), |
|
- extract_job); |
|
- g_signal_connect (extractor, "completed", |
|
- G_CALLBACK (extract_job_on_completed), |
|
- extract_job); |
|
- |
|
- extract_job->archive_compressed_size = archive_compressed_sizes[i]; |
|
- |
|
- autoar_extractor_start (extractor, |
|
- extract_job->common.cancellable); |
|
- |
|
- g_signal_handlers_disconnect_by_data (extractor, |
|
- extract_job); |
|
- |
|
- extract_job->base_progress += (gdouble) extract_job->archive_compressed_size / |
|
- (gdouble) extract_job->total_compressed_size; |
|
- } |
|
- |
|
- if (!job_aborted ((CommonJob *) extract_job)) |
|
- { |
|
- report_extract_final_progress (extract_job, total_files); |
|
- } |
|
- |
|
- for (l = extract_job->output_files; l != NULL; l = l->next) |
|
- { |
|
- GFile *output_file; |
|
- |
|
- output_file = G_FILE (l->data); |
|
- |
|
- if (g_file_query_exists (output_file, NULL)) |
|
- { |
|
- existing_output_files = g_list_prepend (existing_output_files, |
|
- g_object_ref (output_file)); |
|
- } |
|
- } |
|
- |
|
- g_list_free_full (extract_job->output_files, g_object_unref); |
|
- |
|
- extract_job->output_files = existing_output_files; |
|
- |
|
- if (extract_job->common.undo_info) |
|
- { |
|
- if (extract_job->output_files) |
|
- { |
|
- NautilusFileUndoInfoExtract *undo_info; |
|
- |
|
- undo_info = NAUTILUS_FILE_UNDO_INFO_EXTRACT (extract_job->common.undo_info); |
|
- |
|
- nautilus_file_undo_info_extract_set_outputs (undo_info, |
|
- extract_job->output_files); |
|
- } |
|
- else |
|
- { |
|
- /* There is nothing to undo if there is no output */ |
|
- g_clear_object (&extract_job->common.undo_info); |
|
- } |
|
- } |
|
-} |
|
- |
|
-void |
|
-nautilus_file_operations_extract_files (GList *files, |
|
- GFile *destination_directory, |
|
- GtkWindow *parent_window, |
|
- NautilusExtractCallback done_callback, |
|
- gpointer done_callback_data) |
|
-{ |
|
- ExtractJob *extract_job; |
|
- g_autoptr (GTask) task = NULL; |
|
- |
|
- extract_job = op_job_new (ExtractJob, parent_window); |
|
- extract_job->source_files = g_list_copy_deep (files, |
|
- (GCopyFunc) g_object_ref, |
|
- NULL); |
|
- extract_job->destination_directory = g_object_ref (destination_directory); |
|
- extract_job->done_callback = done_callback; |
|
- extract_job->done_callback_data = done_callback_data; |
|
- |
|
- inhibit_power_manager ((CommonJob *) extract_job, _("Extracting Files")); |
|
- |
|
- if (!nautilus_file_undo_manager_is_operating ()) |
|
- { |
|
- extract_job->common.undo_info = nautilus_file_undo_info_extract_new (files, |
|
- destination_directory); |
|
- } |
|
- |
|
- task = g_task_new (NULL, extract_job->common.cancellable, |
|
- extract_task_done, extract_job); |
|
- g_task_set_task_data (task, extract_job, NULL); |
|
- g_task_run_in_thread (task, extract_task_thread_func); |
|
-} |
|
- |
|
-static void |
|
-compress_task_done (GObject *source_object, |
|
- GAsyncResult *res, |
|
- gpointer user_data) |
|
-{ |
|
- CompressJob *compress_job = user_data; |
|
- |
|
- if (compress_job->done_callback) |
|
- { |
|
- compress_job->done_callback (compress_job->output_file, |
|
- compress_job->success, |
|
- compress_job->done_callback_data); |
|
- } |
|
- |
|
- g_object_unref (compress_job->output_file); |
|
- g_list_free_full (compress_job->source_files, g_object_unref); |
|
- |
|
- finalize_common ((CommonJob *) compress_job); |
|
- |
|
- nautilus_file_changes_consume_changes (TRUE); |
|
-} |
|
- |
|
-static void |
|
-compress_job_on_progress (AutoarCompressor *compressor, |
|
- guint64 completed_size, |
|
- guint completed_files, |
|
- gpointer user_data) |
|
-{ |
|
- CompressJob *compress_job = user_data; |
|
- CommonJob *common = user_data; |
|
- char *status; |
|
- char *details; |
|
- int files_left; |
|
- double elapsed; |
|
- double transfer_rate; |
|
- int remaining_time; |
|
- g_autofree gchar *basename_output_file = NULL; |
|
- |
|
- files_left = compress_job->total_files - completed_files; |
|
- basename_output_file = get_basename (compress_job->output_file); |
|
- if (compress_job->total_files == 1) |
|
- { |
|
- g_autofree gchar *basename_data = NULL; |
|
- |
|
- basename_data = get_basename (G_FILE (compress_job->source_files->data)); |
|
- status = g_strdup_printf (_("Compressing “%s” into “%s”"), |
|
- basename_data, |
|
- basename_output_file); |
|
- } |
|
- else |
|
- { |
|
- status = g_strdup_printf (ngettext ("Compressing %'d file into “%s”", |
|
- "Compressing %'d files into “%s”", |
|
- compress_job->total_files), |
|
- compress_job->total_files, |
|
- basename_output_file); |
|
- } |
|
- nautilus_progress_info_take_status (common->progress, status); |
|
- |
|
- elapsed = g_timer_elapsed (common->time, NULL); |
|
- |
|
- transfer_rate = 0; |
|
- remaining_time = -1; |
|
- |
|
- if (elapsed > 0) |
|
- { |
|
- if (completed_size > 0) |
|
- { |
|
- transfer_rate = completed_size / elapsed; |
|
- remaining_time = (compress_job->total_size - completed_size) / transfer_rate; |
|
- } |
|
- else if (completed_files > 0) |
|
- { |
|
- transfer_rate = completed_files / elapsed; |
|
- remaining_time = (compress_job->total_files - completed_files) / transfer_rate; |
|
- } |
|
- } |
|
- |
|
- if (elapsed < SECONDS_NEEDED_FOR_RELIABLE_TRANSFER_RATE || |
|
- transfer_rate == 0) |
|
- { |
|
- if (compress_job->total_files == 1) |
|
- { |
|
- g_autofree gchar *formatted_size_completed_size = NULL; |
|
- g_autofree gchar *formatted_size_total_size = NULL; |
|
- |
|
- formatted_size_completed_size = g_format_size (completed_size); |
|
- formatted_size_total_size = g_format_size (compress_job->total_size); |
|
- /* To translators: %s will expand to a size like "2 bytes" or "3 MB", so something like "4 kb / 4 MB" */ |
|
- details = g_strdup_printf (_("%s / %s"), formatted_size_completed_size, |
|
- formatted_size_total_size); |
|
- } |
|
- else |
|
- { |
|
- details = g_strdup_printf (_("%'d / %'d"), |
|
- files_left > 0 ? completed_files + 1 : completed_files, |
|
- compress_job->total_files); |
|
- } |
|
- } |
|
- else |
|
- { |
|
- if (compress_job->total_files == 1) |
|
- { |
|
- g_autofree gchar *formatted_size_completed_size = NULL; |
|
- g_autofree gchar *formatted_size_total_size = NULL; |
|
- |
|
- formatted_size_completed_size = g_format_size (completed_size); |
|
- formatted_size_total_size = g_format_size (compress_job->total_size); |
|
- |
|
- if (files_left > 0) |
|
- { |
|
- g_autofree gchar *formatted_time = NULL; |
|
- g_autofree gchar *formatted_size_transfer_rate = NULL; |
|
- |
|
- formatted_time = get_formatted_time (remaining_time); |
|
- formatted_size_transfer_rate = g_format_size ((goffset) transfer_rate); |
|
- /* To translators: %s will expand to a size like "2 bytes" or "3 MB", %s to a time duration like |
|
- * "2 minutes". So the whole thing will be something like "2 kb / 4 MB -- 2 hours left (4kb/sec)" |
|
- * |
|
- * The singular/plural form will be used depending on the remaining time (i.e. the %s argument). |
|
- */ |
|
- details = g_strdup_printf (ngettext ("%s / %s \xE2\x80\x94 %s left (%s/sec)", |
|
- "%s / %s \xE2\x80\x94 %s left (%s/sec)", |
|
- seconds_count_format_time_units (remaining_time)), |
|
- formatted_size_completed_size, |
|
- formatted_size_total_size, |
|
- formatted_time, |
|
- formatted_size_transfer_rate); |
|
- } |
|
- else |
|
- { |
|
- /* To translators: %s will expand to a size like "2 bytes" or "3 MB". */ |
|
- details = g_strdup_printf (_("%s / %s"), |
|
- formatted_size_completed_size, |
|
- formatted_size_total_size); |
|
- } |
|
- } |
|
- else |
|
- { |
|
- if (files_left > 0) |
|
- { |
|
- g_autofree gchar *formatted_time = NULL; |
|
- g_autofree gchar *formatted_size = NULL; |
|
- |
|
- formatted_time = get_formatted_time (remaining_time); |
|
- formatted_size = g_format_size ((goffset) transfer_rate); |
|
- /* To translators: %s will expand to a time duration like "2 minutes". |
|
- * So the whole thing will be something like "1 / 5 -- 2 hours left (4kb/sec)" |
|
- * |
|
- * The singular/plural form will be used depending on the remaining time (i.e. the %s argument). |
|
- */ |
|
- details = g_strdup_printf (ngettext ("%'d / %'d \xE2\x80\x94 %s left (%s/sec)", |
|
- "%'d / %'d \xE2\x80\x94 %s left (%s/sec)", |
|
- seconds_count_format_time_units (remaining_time)), |
|
- completed_files + 1, compress_job->total_files, |
|
- formatted_time, |
|
- formatted_size); |
|
- } |
|
- else |
|
- { |
|
- /* To translators: %'d is the number of files completed for the operation, |
|
- * so it will be something like 2/14. */ |
|
- details = g_strdup_printf (_("%'d / %'d"), |
|
- completed_files, |
|
- compress_job->total_files); |
|
- } |
|
- } |
|
- } |
|
- |
|
- nautilus_progress_info_take_details (common->progress, details); |
|
- |
|
- if (elapsed > SECONDS_NEEDED_FOR_APROXIMATE_TRANSFER_RATE) |
|
- { |
|
- nautilus_progress_info_set_remaining_time (common->progress, |
|
- remaining_time); |
|
- nautilus_progress_info_set_elapsed_time (common->progress, |
|
- elapsed); |
|
- } |
|
- |
|
- nautilus_progress_info_set_progress (common->progress, |
|
- completed_size, |
|
- compress_job->total_size); |
|
-} |
|
- |
|
-static void |
|
-compress_job_on_error (AutoarCompressor *compressor, |
|
- GError *error, |
|
- gpointer user_data) |
|
-{ |
|
- CompressJob *compress_job = user_data; |
|
- char *status; |
|
- g_autofree gchar *basename_output_file = NULL; |
|
- |
|
- basename_output_file = get_basename (compress_job->output_file); |
|
- if (compress_job->total_files == 1) |
|
- { |
|
- g_autofree gchar *basename_data = NULL; |
|
- |
|
- basename_data = get_basename (G_FILE (compress_job->source_files->data)); |
|
- status = g_strdup_printf (_("Error compressing “%s” into “%s”"), |
|
- basename_data, |
|
- basename_output_file); |
|
- } |
|
- else |
|
- { |
|
- status = g_strdup_printf (ngettext ("Error compressing %'d file into “%s”", |
|
- "Error compressing %'d files into “%s”", |
|
- compress_job->total_files), |
|
- compress_job->total_files, |
|
- basename_output_file); |
|
- } |
|
- nautilus_progress_info_take_status (compress_job->common.progress, |
|
- status); |
|
- |
|
- run_error ((CommonJob *) compress_job, |
|
- g_strdup (_("There was an error while compressing files.")), |
|
- g_strdup (error->message), |
|
- NULL, |
|
- FALSE, |
|
- CANCEL, |
|
- NULL); |
|
- |
|
- abort_job ((CommonJob *) compress_job); |
|
-} |
|
- |
|
-static void |
|
-compress_job_on_completed (AutoarCompressor *compressor, |
|
- gpointer user_data) |
|
-{ |
|
- CompressJob *compress_job = user_data; |
|
- g_autoptr (GFile) destination_directory = NULL; |
|
- char *status; |
|
- g_autofree gchar *basename_output_file = NULL; |
|
- |
|
- basename_output_file = get_basename (compress_job->output_file); |
|
- if (compress_job->total_files == 1) |
|
- { |
|
- g_autofree gchar *basename_data = NULL; |
|
- |
|
- basename_data = get_basename (G_FILE (compress_job->source_files->data)); |
|
- status = g_strdup_printf (_("Compressed “%s” into “%s”"), |
|
- basename_data, |
|
- basename_output_file); |
|
- } |
|
- else |
|
- { |
|
- status = g_strdup_printf (ngettext ("Compressed %'d file into “%s”", |
|
- "Compressed %'d files into “%s”", |
|
- compress_job->total_files), |
|
- compress_job->total_files, |
|
- basename_output_file); |
|
- } |
|
- |
|
- nautilus_progress_info_take_status (compress_job->common.progress, |
|
- status); |
|
- |
|
- nautilus_file_changes_queue_file_added (compress_job->output_file); |
|
- |
|
- destination_directory = g_file_get_parent (compress_job->output_file); |
|
- nautilus_progress_info_set_destination (compress_job->common.progress, |
|
- destination_directory); |
|
-} |
|
- |
|
-static void |
|
-compress_task_thread_func (GTask *task, |
|
- gpointer source_object, |
|
- gpointer task_data, |
|
- GCancellable *cancellable) |
|
-{ |
|
- CompressJob *compress_job = task_data; |
|
- SourceInfo source_info; |
|
- g_autoptr (AutoarCompressor) compressor = NULL; |
|
- |
|
- g_timer_start (compress_job->common.time); |
|
- |
|
- nautilus_progress_info_start (compress_job->common.progress); |
|
- |
|
- scan_sources (compress_job->source_files, |
|
- &source_info, |
|
- (CommonJob *) compress_job, |
|
- OP_KIND_COMPRESS); |
|
- |
|
- compress_job->total_files = source_info.num_files; |
|
- compress_job->total_size = source_info.num_bytes; |
|
- |
|
- compressor = autoar_compressor_new (compress_job->source_files, |
|
- compress_job->output_file, |
|
- compress_job->format, |
|
- compress_job->filter, |
|
- FALSE); |
|
- |
|
- autoar_compressor_set_output_is_dest (compressor, TRUE); |
|
- |
|
- autoar_compressor_set_notify_interval (compressor, |
|
- PROGRESS_NOTIFY_INTERVAL); |
|
- |
|
- g_signal_connect (compressor, "progress", |
|
- G_CALLBACK (compress_job_on_progress), compress_job); |
|
- g_signal_connect (compressor, "error", |
|
- G_CALLBACK (compress_job_on_error), compress_job); |
|
- g_signal_connect (compressor, "completed", |
|
- G_CALLBACK (compress_job_on_completed), compress_job); |
|
- autoar_compressor_start (compressor, |
|
- compress_job->common.cancellable); |
|
- |
|
- compress_job->success = g_file_query_exists (compress_job->output_file, |
|
- NULL); |
|
- |
|
- /* There is nothing to undo if the output was not created */ |
|
- if (compress_job->common.undo_info != NULL && !compress_job->success) |
|
- { |
|
- g_clear_object (&compress_job->common.undo_info); |
|
- } |
|
-} |
|
- |
|
-void |
|
-nautilus_file_operations_compress (GList *files, |
|
- GFile *output, |
|
- AutoarFormat format, |
|
- AutoarFilter filter, |
|
- GtkWindow *parent_window, |
|
- NautilusCreateCallback done_callback, |
|
- gpointer done_callback_data) |
|
-{ |
|
- g_autoptr (GTask) task = NULL; |
|
- CompressJob *compress_job; |
|
- |
|
- compress_job = op_job_new (CompressJob, parent_window); |
|
- compress_job->source_files = g_list_copy_deep (files, |
|
- (GCopyFunc) g_object_ref, |
|
- NULL); |
|
- compress_job->output_file = g_object_ref (output); |
|
- compress_job->format = format; |
|
- compress_job->filter = filter; |
|
- compress_job->done_callback = done_callback; |
|
- compress_job->done_callback_data = done_callback_data; |
|
- |
|
- inhibit_power_manager ((CommonJob *) compress_job, _("Compressing Files")); |
|
- |
|
- if (!nautilus_file_undo_manager_is_operating ()) |
|
- { |
|
- compress_job->common.undo_info = nautilus_file_undo_info_compress_new (files, |
|
- output, |
|
- format, |
|
- filter); |
|
- } |
|
- |
|
- task = g_task_new (NULL, compress_job->common.cancellable, |
|
- compress_task_done, compress_job); |
|
- g_task_set_task_data (task, compress_job, NULL); |
|
- g_task_run_in_thread (task, compress_task_thread_func); |
|
-} |
|
- |
|
#if !defined (NAUTILUS_OMIT_SELF_CHECK) |
|
|
|
void |
|
diff --git a/src/nautilus-file-operations.h b/src/nautilus-file-operations.h |
|
index a479ee6e0..4d3c4547e 100644 |
|
--- a/src/nautilus-file-operations.h |
|
+++ b/src/nautilus-file-operations.h |
|
@@ -26,7 +26,6 @@ |
|
|
|
#include <gtk/gtk.h> |
|
#include <gio/gio.h> |
|
-#include <gnome-autoar/gnome-autoar.h> |
|
|
|
|
|
#define SECONDS_NEEDED_FOR_APROXIMATE_TRANSFER_RATE 1 |
|
@@ -151,18 +150,5 @@ void nautilus_file_mark_desktop_file_executable (GFile *file, |
|
gboolean interactive, |
|
NautilusOpCallback done_callback, |
|
gpointer done_callback_data); |
|
-void nautilus_file_operations_extract_files (GList *files, |
|
- GFile *destination_directory, |
|
- GtkWindow *parent_window, |
|
- NautilusExtractCallback done_callback, |
|
- gpointer done_callback_data); |
|
-void nautilus_file_operations_compress (GList *files, |
|
- GFile *output, |
|
- AutoarFormat format, |
|
- AutoarFilter filter, |
|
- GtkWindow *parent_window, |
|
- NautilusCreateCallback done_callback, |
|
- gpointer done_callback_data); |
|
- |
|
|
|
#endif /* NAUTILUS_FILE_OPERATIONS_H */ |
|
diff --git a/src/nautilus-file-undo-operations.c b/src/nautilus-file-undo-operations.c |
|
index e833d0578..956cd9b55 100644 |
|
--- a/src/nautilus-file-undo-operations.c |
|
+++ b/src/nautilus-file-undo-operations.c |
|
@@ -2032,323 +2032,3 @@ nautilus_file_undo_info_ownership_new (NautilusFileUndoOp op_type, |
|
|
|
return NAUTILUS_FILE_UNDO_INFO (retval); |
|
} |
|
- |
|
-/* extract */ |
|
-G_DEFINE_TYPE (NautilusFileUndoInfoExtract, nautilus_file_undo_info_extract, NAUTILUS_TYPE_FILE_UNDO_INFO) |
|
- |
|
-struct _NautilusFileUndoInfoExtractDetails |
|
-{ |
|
- GList *sources; |
|
- GFile *destination_directory; |
|
- GList *outputs; |
|
-}; |
|
- |
|
-static void |
|
-extract_callback (GList *outputs, |
|
- gpointer callback_data) |
|
-{ |
|
- NautilusFileUndoInfoExtract *self = NAUTILUS_FILE_UNDO_INFO_EXTRACT (callback_data); |
|
- gboolean success; |
|
- |
|
- nautilus_file_undo_info_extract_set_outputs (self, outputs); |
|
- |
|
- success = self->priv->outputs != NULL; |
|
- |
|
- file_undo_info_transfer_callback (NULL, success, self); |
|
-} |
|
- |
|
-static void |
|
-extract_strings_func (NautilusFileUndoInfo *info, |
|
- gchar **undo_label, |
|
- gchar **undo_description, |
|
- gchar **redo_label, |
|
- gchar **redo_description) |
|
-{ |
|
- NautilusFileUndoInfoExtract *self = NAUTILUS_FILE_UNDO_INFO_EXTRACT (info); |
|
- gint total_sources; |
|
- gint total_outputs; |
|
- |
|
- *undo_label = g_strdup (_("_Undo Extract")); |
|
- *redo_label = g_strdup (_("_Redo Extract")); |
|
- |
|
- total_sources = g_list_length (self->priv->sources); |
|
- total_outputs = g_list_length (self->priv->outputs); |
|
- |
|
- if (total_outputs == 1) |
|
- { |
|
- GFile *output; |
|
- g_autofree gchar *name = NULL; |
|
- |
|
- output = self->priv->outputs->data; |
|
- name = g_file_get_parse_name (output); |
|
- |
|
- *undo_description = g_strdup_printf (_("Delete “%s”"), name); |
|
- } |
|
- else |
|
- { |
|
- *undo_description = g_strdup_printf (ngettext ("Delete %d extracted file", |
|
- "Delete %d extracted files", |
|
- total_outputs), |
|
- total_outputs); |
|
- } |
|
- |
|
- if (total_sources == 1) |
|
- { |
|
- GFile *source; |
|
- g_autofree gchar *name = NULL; |
|
- |
|
- source = self->priv->sources->data; |
|
- name = g_file_get_parse_name (source); |
|
- |
|
- *redo_description = g_strdup_printf (_("Extract “%s”"), name); |
|
- } |
|
- else |
|
- { |
|
- *redo_description = g_strdup_printf (ngettext ("Extract %d file", |
|
- "Extract %d files", |
|
- total_sources), |
|
- total_sources); |
|
- } |
|
-} |
|
- |
|
-static void |
|
-extract_redo_func (NautilusFileUndoInfo *info, |
|
- GtkWindow *parent_window) |
|
-{ |
|
- NautilusFileUndoInfoExtract *self = NAUTILUS_FILE_UNDO_INFO_EXTRACT (info); |
|
- |
|
- nautilus_file_operations_extract_files (self->priv->sources, |
|
- self->priv->destination_directory, |
|
- parent_window, |
|
- extract_callback, |
|
- self); |
|
-} |
|
- |
|
-static void |
|
-extract_undo_func (NautilusFileUndoInfo *info, |
|
- GtkWindow *parent_window) |
|
-{ |
|
- NautilusFileUndoInfoExtract *self = NAUTILUS_FILE_UNDO_INFO_EXTRACT (info); |
|
- |
|
- nautilus_file_operations_delete (self->priv->outputs, parent_window, |
|
- file_undo_info_delete_callback, self); |
|
-} |
|
- |
|
-static void |
|
-nautilus_file_undo_info_extract_init (NautilusFileUndoInfoExtract *self) |
|
-{ |
|
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, nautilus_file_undo_info_extract_get_type (), |
|
- NautilusFileUndoInfoExtractDetails); |
|
-} |
|
- |
|
-static void |
|
-nautilus_file_undo_info_extract_finalize (GObject *obj) |
|
-{ |
|
- NautilusFileUndoInfoExtract *self = NAUTILUS_FILE_UNDO_INFO_EXTRACT (obj); |
|
- |
|
- g_object_unref (self->priv->destination_directory); |
|
- g_list_free_full (self->priv->sources, g_object_unref); |
|
- if (self->priv->outputs) |
|
- { |
|
- g_list_free_full (self->priv->outputs, g_object_unref); |
|
- } |
|
- |
|
- G_OBJECT_CLASS (nautilus_file_undo_info_extract_parent_class)->finalize (obj); |
|
-} |
|
- |
|
-static void |
|
-nautilus_file_undo_info_extract_class_init (NautilusFileUndoInfoExtractClass *klass) |
|
-{ |
|
- GObjectClass *oclass = G_OBJECT_CLASS (klass); |
|
- NautilusFileUndoInfoClass *iclass = NAUTILUS_FILE_UNDO_INFO_CLASS (klass); |
|
- |
|
- oclass->finalize = nautilus_file_undo_info_extract_finalize; |
|
- |
|
- iclass->undo_func = extract_undo_func; |
|
- iclass->redo_func = extract_redo_func; |
|
- iclass->strings_func = extract_strings_func; |
|
- |
|
- g_type_class_add_private (klass, sizeof (NautilusFileUndoInfoExtractDetails)); |
|
-} |
|
- |
|
-void |
|
-nautilus_file_undo_info_extract_set_outputs (NautilusFileUndoInfoExtract *self, |
|
- GList *outputs) |
|
-{ |
|
- if (self->priv->outputs) |
|
- { |
|
- g_list_free_full (self->priv->outputs, g_object_unref); |
|
- } |
|
- self->priv->outputs = g_list_copy_deep (outputs, |
|
- (GCopyFunc) g_object_ref, |
|
- NULL); |
|
-} |
|
- |
|
-NautilusFileUndoInfo * |
|
-nautilus_file_undo_info_extract_new (GList *sources, |
|
- GFile *destination_directory) |
|
-{ |
|
- NautilusFileUndoInfoExtract *self; |
|
- |
|
- self = g_object_new (NAUTILUS_TYPE_FILE_UNDO_INFO_EXTRACT, |
|
- "item-count", 1, |
|
- "op-type", NAUTILUS_FILE_UNDO_OP_EXTRACT, |
|
- NULL); |
|
- |
|
- self->priv->sources = g_list_copy_deep (sources, |
|
- (GCopyFunc) g_object_ref, |
|
- NULL); |
|
- self->priv->destination_directory = g_object_ref (destination_directory); |
|
- |
|
- return NAUTILUS_FILE_UNDO_INFO (self); |
|
-} |
|
- |
|
- |
|
-/* compress */ |
|
-G_DEFINE_TYPE (NautilusFileUndoInfoCompress, nautilus_file_undo_info_compress, NAUTILUS_TYPE_FILE_UNDO_INFO) |
|
- |
|
-struct _NautilusFileUndoInfoCompressDetails |
|
-{ |
|
- GList *sources; |
|
- GFile *output; |
|
- AutoarFormat format; |
|
- AutoarFilter filter; |
|
-}; |
|
- |
|
-static void |
|
-compress_callback (GFile *new_file, |
|
- gboolean success, |
|
- gpointer callback_data) |
|
-{ |
|
- NautilusFileUndoInfoCompress *self = NAUTILUS_FILE_UNDO_INFO_COMPRESS (callback_data); |
|
- |
|
- if (success) |
|
- { |
|
- g_object_unref (self->priv->output); |
|
- |
|
- self->priv->output = g_object_ref (new_file); |
|
- } |
|
- |
|
- file_undo_info_transfer_callback (NULL, success, self); |
|
-} |
|
- |
|
-static void |
|
-compress_strings_func (NautilusFileUndoInfo *info, |
|
- gchar **undo_label, |
|
- gchar **undo_description, |
|
- gchar **redo_label, |
|
- gchar **redo_description) |
|
-{ |
|
- NautilusFileUndoInfoCompress *self = NAUTILUS_FILE_UNDO_INFO_COMPRESS (info); |
|
- g_autofree gchar *output_name = NULL; |
|
- gint sources_count; |
|
- |
|
- output_name = g_file_get_parse_name (self->priv->output); |
|
- *undo_description = g_strdup_printf (_("Delete “%s”"), output_name); |
|
- |
|
- sources_count = g_list_length (self->priv->sources); |
|
- if (sources_count == 1) |
|
- { |
|
- GFile *source; |
|
- g_autofree gchar *source_name = NULL; |
|
- |
|
- source = self->priv->sources->data; |
|
- source_name = g_file_get_parse_name (source); |
|
- |
|
- *redo_description = g_strdup_printf (_("Compress “%s”"), source_name); |
|
- } |
|
- else |
|
- { |
|
- *redo_description = g_strdup_printf (ngettext ("Compress %d file", |
|
- "Compress %d files", |
|
- sources_count), |
|
- sources_count); |
|
- } |
|
- |
|
- *undo_label = g_strdup (_("_Undo Compress")); |
|
- *redo_label = g_strdup (_("_Redo Compress")); |
|
-} |
|
- |
|
-static void |
|
-compress_redo_func (NautilusFileUndoInfo *info, |
|
- GtkWindow *parent_window) |
|
-{ |
|
- NautilusFileUndoInfoCompress *self = NAUTILUS_FILE_UNDO_INFO_COMPRESS (info); |
|
- |
|
- nautilus_file_operations_compress (self->priv->sources, |
|
- self->priv->output, |
|
- self->priv->format, |
|
- self->priv->filter, |
|
- parent_window, |
|
- compress_callback, |
|
- self); |
|
-} |
|
- |
|
-static void |
|
-compress_undo_func (NautilusFileUndoInfo *info, |
|
- GtkWindow *parent_window) |
|
-{ |
|
- NautilusFileUndoInfoCompress *self = NAUTILUS_FILE_UNDO_INFO_COMPRESS (info); |
|
- GList *files = NULL; |
|
- |
|
- files = g_list_prepend (files, self->priv->output); |
|
- |
|
- nautilus_file_operations_delete (files, parent_window, |
|
- file_undo_info_delete_callback, self); |
|
- |
|
- g_list_free (files); |
|
-} |
|
- |
|
-static void |
|
-nautilus_file_undo_info_compress_init (NautilusFileUndoInfoCompress *self) |
|
-{ |
|
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, nautilus_file_undo_info_compress_get_type (), |
|
- NautilusFileUndoInfoCompressDetails); |
|
-} |
|
- |
|
-static void |
|
-nautilus_file_undo_info_compress_finalize (GObject *obj) |
|
-{ |
|
- NautilusFileUndoInfoCompress *self = NAUTILUS_FILE_UNDO_INFO_COMPRESS (obj); |
|
- |
|
- g_list_free_full (self->priv->sources, g_object_unref); |
|
- g_clear_object (&self->priv->output); |
|
- |
|
- G_OBJECT_CLASS (nautilus_file_undo_info_compress_parent_class)->finalize (obj); |
|
-} |
|
- |
|
-static void |
|
-nautilus_file_undo_info_compress_class_init (NautilusFileUndoInfoCompressClass *klass) |
|
-{ |
|
- GObjectClass *oclass = G_OBJECT_CLASS (klass); |
|
- NautilusFileUndoInfoClass *iclass = NAUTILUS_FILE_UNDO_INFO_CLASS (klass); |
|
- |
|
- oclass->finalize = nautilus_file_undo_info_compress_finalize; |
|
- |
|
- iclass->undo_func = compress_undo_func; |
|
- iclass->redo_func = compress_redo_func; |
|
- iclass->strings_func = compress_strings_func; |
|
- |
|
- g_type_class_add_private (klass, sizeof (NautilusFileUndoInfoCompressDetails)); |
|
-} |
|
- |
|
-NautilusFileUndoInfo * |
|
-nautilus_file_undo_info_compress_new (GList *sources, |
|
- GFile *output, |
|
- AutoarFormat format, |
|
- AutoarFilter filter) |
|
-{ |
|
- NautilusFileUndoInfoCompress *self; |
|
- |
|
- self = g_object_new (NAUTILUS_TYPE_FILE_UNDO_INFO_COMPRESS, |
|
- "item-count", 1, |
|
- "op-type", NAUTILUS_FILE_UNDO_OP_COMPRESS, |
|
- NULL); |
|
- |
|
- self->priv->sources = g_list_copy_deep (sources, (GCopyFunc) g_object_ref, NULL); |
|
- self->priv->output = g_object_ref (output); |
|
- self->priv->format = format; |
|
- self->priv->filter = filter; |
|
- |
|
- return NAUTILUS_FILE_UNDO_INFO (self); |
|
-} |
|
diff --git a/src/nautilus-file-undo-operations.h b/src/nautilus-file-undo-operations.h |
|
index 630443f10..8a153c32d 100644 |
|
--- a/src/nautilus-file-undo-operations.h |
|
+++ b/src/nautilus-file-undo-operations.h |
|
@@ -27,7 +27,6 @@ |
|
|
|
#include <gio/gio.h> |
|
#include <gtk/gtk.h> |
|
-#include <gnome-autoar/gnome-autoar.h> |
|
|
|
typedef enum { |
|
NAUTILUS_FILE_UNDO_OP_COPY, |
|
@@ -38,8 +37,6 @@ typedef enum { |
|
NAUTILUS_FILE_UNDO_OP_CREATE_EMPTY_FILE, |
|
NAUTILUS_FILE_UNDO_OP_CREATE_FILE_FROM_TEMPLATE, |
|
NAUTILUS_FILE_UNDO_OP_CREATE_FOLDER, |
|
- NAUTILUS_FILE_UNDO_OP_EXTRACT, |
|
- NAUTILUS_FILE_UNDO_OP_COMPRESS, |
|
NAUTILUS_FILE_UNDO_OP_MOVE_TO_TRASH, |
|
NAUTILUS_FILE_UNDO_OP_RESTORE_FROM_TRASH, |
|
NAUTILUS_FILE_UNDO_OP_CREATE_LINK, |
|
@@ -328,59 +325,4 @@ NautilusFileUndoInfo *nautilus_file_undo_info_ownership_new (NautilusFileUndoOp |
|
const char *current_data, |
|
const char *new_data); |
|
|
|
-/* extract */ |
|
-#define NAUTILUS_TYPE_FILE_UNDO_INFO_EXTRACT (nautilus_file_undo_info_extract_get_type ()) |
|
-#define NAUTILUS_FILE_UNDO_INFO_EXTRACT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), NAUTILUS_TYPE_FILE_UNDO_INFO_EXTRACT, NautilusFileUndoInfoExtract)) |
|
-#define NAUTILUS_FILE_UNDO_INFO_EXTRACT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), NAUTILUS_TYPE_FILE_UNDO_INFO_EXTRACT, NautilusFileUndoInfoExtractClass)) |
|
-#define NAUTILUS_IS_FILE_UNDO_INFO_EXTRACT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), NAUTILUS_TYPE_FILE_UNDO_INFO_EXTRACT)) |
|
-#define NAUTILUS_IS_FILE_UNDO_INFO_EXTRACT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), NAUTILUS_TYPE_FILE_UNDO_INFO_EXTRACT)) |
|
-#define NAUTILUS_FILE_UNDO_INFO_EXTRACT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), NAUTILUS_TYPE_FILE_UNDO_INFO_EXTRACT, NautilusFileUndoInfoExtractClass)) |
|
- |
|
-typedef struct _NautilusFileUndoInfoExtract NautilusFileUndoInfoExtract; |
|
-typedef struct _NautilusFileUndoInfoExtractClass NautilusFileUndoInfoExtractClass; |
|
-typedef struct _NautilusFileUndoInfoExtractDetails NautilusFileUndoInfoExtractDetails; |
|
- |
|
-struct _NautilusFileUndoInfoExtract { |
|
- NautilusFileUndoInfo parent; |
|
- NautilusFileUndoInfoExtractDetails *priv; |
|
-}; |
|
- |
|
-struct _NautilusFileUndoInfoExtractClass { |
|
- NautilusFileUndoInfoClass parent_class; |
|
-}; |
|
- |
|
-GType nautilus_file_undo_info_extract_get_type (void) G_GNUC_CONST; |
|
-NautilusFileUndoInfo * nautilus_file_undo_info_extract_new (GList *sources, |
|
- GFile *destination_directory); |
|
-void nautilus_file_undo_info_extract_set_outputs (NautilusFileUndoInfoExtract *self, |
|
- GList *outputs); |
|
- |
|
-/* compress */ |
|
-#define NAUTILUS_TYPE_FILE_UNDO_INFO_COMPRESS (nautilus_file_undo_info_compress_get_type ()) |
|
-#define NAUTILUS_FILE_UNDO_INFO_COMPRESS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), NAUTILUS_TYPE_FILE_UNDO_INFO_COMPRESS, NautilusFileUndoInfoCompress)) |
|
-#define NAUTILUS_FILE_UNDO_INFO_COMPRESS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), NAUTILUS_TYPE_FILE_UNDO_INFO_COMPRESS, NautilusFileUndoInfoCompressClass)) |
|
-#define NAUTILUS_IS_FILE_UNDO_INFO_COMPRESS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), NAUTILUS_TYPE_FILE_UNDO_INFO_COMPRESS)) |
|
-#define NAUTILUS_IS_FILE_UNDO_INFO_COMPRESS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), NAUTILUS_TYPE_FILE_UNDO_INFO_COMPRESS)) |
|
-#define NAUTILUS_FILE_UNDO_INFO_COMPRESS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), NAUTILUS_TYPE_FILE_UNDO_INFO_COMPRESS, NautilusFileUndoInfoCompressClass)) |
|
- |
|
-typedef struct _NautilusFileUndoInfoCompress NautilusFileUndoInfoCompress; |
|
-typedef struct _NautilusFileUndoInfoCompressClass NautilusFileUndoInfoCompressClass; |
|
-typedef struct _NautilusFileUndoInfoCompressDetails NautilusFileUndoInfoCompressDetails; |
|
- |
|
-struct _NautilusFileUndoInfoCompress { |
|
- NautilusFileUndoInfo parent; |
|
- NautilusFileUndoInfoCompressDetails *priv; |
|
-}; |
|
- |
|
-struct _NautilusFileUndoInfoCompressClass { |
|
- NautilusFileUndoInfoClass parent_class; |
|
-}; |
|
- |
|
-GType nautilus_file_undo_info_compress_get_type (void) G_GNUC_CONST; |
|
-NautilusFileUndoInfo * nautilus_file_undo_info_compress_new (GList *sources, |
|
- GFile *output, |
|
- AutoarFormat format, |
|
- AutoarFilter filter); |
|
- |
|
- |
|
#endif /* __NAUTILUS_FILE_UNDO_OPERATIONS_H__ */ |
|
diff --git a/src/nautilus-file.c b/src/nautilus-file.c |
|
index 1657edcde..cff660f1f 100644 |
|
--- a/src/nautilus-file.c |
|
+++ b/src/nautilus-file.c |
|
@@ -51,7 +51,6 @@ |
|
#include <glib/gstdio.h> |
|
#include <gio/gio.h> |
|
#include <glib.h> |
|
-#include <gnome-autoar/gnome-autoar.h> |
|
#include <gdesktop-enums.h> |
|
#include <libnautilus-extension/nautilus-file-info.h> |
|
#include <libnautilus-extension/nautilus-extension-private.h> |
|
@@ -8262,11 +8261,38 @@ real_is_special_link (NautilusFile *file) |
|
gboolean |
|
nautilus_file_is_archive (NautilusFile *file) |
|
{ |
|
- g_autofree char *mime_type = NULL; |
|
- |
|
- mime_type = nautilus_file_get_mime_type (file); |
|
- |
|
- return autoar_check_mime_type_supported (mime_type); |
|
+ char *mime_type; |
|
+ int i; |
|
+ static const char * archive_mime_types[] = { "application/x-gtar", |
|
+ "application/x-zip", |
|
+ "application/x-zip-compressed", |
|
+ "application/zip", |
|
+ "application/x-zip", |
|
+ "application/x-tar", |
|
+ "application/x-7z-compressed", |
|
+ "application/x-rar", |
|
+ "application/x-rar-compressed", |
|
+ "application/x-jar", |
|
+ "application/x-java-archive", |
|
+ "application/x-war", |
|
+ "application/x-ear", |
|
+ "application/x-arj", |
|
+ "application/x-gzip", |
|
+ "application/x-bzip-compressed-tar", |
|
+ "application/x-compressed-tar" }; |
|
+ |
|
+ g_return_val_if_fail (file != NULL, FALSE); |
|
+ |
|
+ mime_type = nautilus_file_get_mime_type (file); |
|
+ for (i = 0; i < G_N_ELEMENTS (archive_mime_types); i++) { |
|
+ if (!strcmp (mime_type, archive_mime_types[i])) { |
|
+ g_free (mime_type); |
|
+ return TRUE; |
|
+ } |
|
+ } |
|
+ g_free (mime_type); |
|
+ |
|
+ return FALSE; |
|
} |
|
|
|
|
|
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c |
|
index 8784f63f8..90fcca9d6 100644 |
|
--- a/src/nautilus-files-view.c |
|
+++ b/src/nautilus-files-view.c |
|
@@ -48,7 +48,6 @@ |
|
#include <glib/gi18n.h> |
|
#include <glib/gstdio.h> |
|
#include <gio/gio.h> |
|
-#include <gnome-autoar/gnome-autoar.h> |
|
#include <math.h> |
|
#include <string.h> |
|
#include <sys/types.h> |
|
@@ -75,7 +74,6 @@ |
|
#include "nautilus-file-name-widget-controller.h" |
|
#include "nautilus-rename-file-popover-controller.h" |
|
#include "nautilus-new-folder-dialog-controller.h" |
|
-#include "nautilus-compress-dialog-controller.h" |
|
#include "nautilus-global-preferences.h" |
|
#include "nautilus-link.h" |
|
#include "nautilus-metadata.h" |
|
@@ -171,7 +169,6 @@ typedef struct |
|
|
|
NautilusRenameFilePopoverController *rename_file_controller; |
|
NautilusNewFolderDialogController *new_folder_controller; |
|
- NautilusCompressDialogController *compress_controller; |
|
|
|
gboolean supports_zooming; |
|
|
|
@@ -310,12 +307,6 @@ static void nautilus_files_view_select_file (NautilusFilesView *view, |
|
|
|
static void update_templates_directory (NautilusFilesView *view); |
|
|
|
-static void extract_files (NautilusFilesView *view, |
|
- GList *files, |
|
- GFile *destination_directory); |
|
-static void extract_files_to_chosen_location (NautilusFilesView *view, |
|
- GList *files); |
|
- |
|
static void nautilus_files_view_check_empty_states (NautilusFilesView *view); |
|
|
|
static gboolean nautilus_files_view_is_searching (NautilusView *view); |
|
@@ -749,15 +740,6 @@ nautilus_files_view_supports_creating_files (NautilusFilesView *view) |
|
&& !showing_recent_directory (view); |
|
} |
|
|
|
-static gboolean |
|
-nautilus_files_view_supports_extract_here (NautilusFilesView *view) |
|
-{ |
|
- g_return_val_if_fail (NAUTILUS_IS_FILES_VIEW (view), FALSE); |
|
- |
|
- return nautilus_files_view_supports_creating_files (view) |
|
- && !nautilus_view_is_searching (NAUTILUS_VIEW (view)); |
|
-} |
|
- |
|
static gboolean |
|
nautilus_files_view_is_empty (NautilusFilesView *view) |
|
{ |
|
@@ -1209,8 +1191,6 @@ nautilus_files_view_activate_files (NautilusFilesView *view, |
|
gboolean confirm_multiple) |
|
{ |
|
NautilusFilesViewPrivate *priv; |
|
- GList *files_to_extract; |
|
- GList *files_to_activate; |
|
char *path; |
|
|
|
if (files == NULL) |
|
@@ -1219,41 +1199,15 @@ nautilus_files_view_activate_files (NautilusFilesView *view, |
|
} |
|
|
|
priv = nautilus_files_view_get_instance_private (view); |
|
- |
|
- files_to_extract = nautilus_file_list_filter (files, |
|
- &files_to_activate, |
|
- (NautilusFileFilterFunc) nautilus_mime_file_extracts, |
|
- NULL); |
|
- |
|
- if (nautilus_files_view_supports_extract_here (view)) |
|
- { |
|
- g_autoptr (GFile) location = NULL; |
|
- g_autoptr (GFile) parent = NULL; |
|
- |
|
- location = nautilus_file_get_location (NAUTILUS_FILE (g_list_first (files)->data)); |
|
- /* Get a parent from a random file. We assume all files has a common parent. |
|
- * But don't assume the parent is the view location, since that's not the |
|
- * case in list view when expand-folder setting is set |
|
- */ |
|
- parent = g_file_get_parent (location); |
|
- extract_files (view, files_to_extract, parent); |
|
- } |
|
- else |
|
- { |
|
- extract_files_to_chosen_location (view, files_to_extract); |
|
- } |
|
- |
|
path = get_view_directory (view); |
|
nautilus_mime_activate_files (nautilus_files_view_get_containing_window (view), |
|
priv->slot, |
|
- files_to_activate, |
|
+ files, |
|
path, |
|
flags, |
|
confirm_multiple); |
|
|
|
g_free (path); |
|
- g_list_free (files_to_extract); |
|
- g_list_free (files_to_activate); |
|
} |
|
|
|
void |
|
@@ -2085,232 +2039,6 @@ nautilus_files_view_new_folder_dialog_new (NautilusFilesView *view, |
|
nautilus_directory_unref (containing_directory); |
|
} |
|
|
|
-typedef struct |
|
-{ |
|
- NautilusFilesView *view; |
|
- GHashTable *added_locations; |
|
-} CompressData; |
|
- |
|
-static void |
|
-compress_done (GFile *new_file, |
|
- gboolean success, |
|
- gpointer user_data) |
|
-{ |
|
- CompressData *data; |
|
- NautilusFilesView *view; |
|
- NautilusFilesViewPrivate *priv; |
|
- NautilusFile *file; |
|
- |
|
- data = user_data; |
|
- view = data->view; |
|
- |
|
- if (view == NULL) |
|
- { |
|
- goto out; |
|
- } |
|
- |
|
- priv = nautilus_files_view_get_instance_private (view); |
|
- |
|
- g_signal_handlers_disconnect_by_func (view, |
|
- G_CALLBACK (track_newly_added_locations), |
|
- data->added_locations); |
|
- |
|
- if (!success) |
|
- { |
|
- goto out; |
|
- } |
|
- |
|
- file = nautilus_file_get (new_file); |
|
- |
|
- if (g_hash_table_contains (data->added_locations, new_file)) |
|
- { |
|
- /* The file was already added */ |
|
- nautilus_files_view_select_file (view, file); |
|
- nautilus_files_view_reveal_selection (view); |
|
- } |
|
- else |
|
- { |
|
- g_hash_table_insert (priv->pending_reveal, |
|
- file, |
|
- GUINT_TO_POINTER (TRUE)); |
|
- } |
|
- |
|
- nautilus_file_unref (file); |
|
-out: |
|
- g_hash_table_destroy (data->added_locations); |
|
- |
|
- if (data->view != NULL) |
|
- { |
|
- g_object_remove_weak_pointer (G_OBJECT (data->view), |
|
- (gpointer *) &data->view); |
|
- } |
|
- |
|
- g_free (data); |
|
-} |
|
- |
|
-static void |
|
-compress_dialog_controller_on_name_accepted (NautilusFileNameWidgetController *controller, |
|
- gpointer user_data) |
|
-{ |
|
- NautilusFilesView *view; |
|
- g_autofree gchar *name = NULL; |
|
- GList *selection; |
|
- GList *source_files = NULL; |
|
- GList *l; |
|
- CompressData *data; |
|
- g_autoptr (GFile) output = NULL; |
|
- g_autoptr (GFile) parent = NULL; |
|
- NautilusCompressionFormat compression_format; |
|
- NautilusFilesViewPrivate *priv; |
|
- AutoarFormat format; |
|
- AutoarFilter filter; |
|
- |
|
- view = NAUTILUS_FILES_VIEW (user_data); |
|
- priv = nautilus_files_view_get_instance_private (view); |
|
- |
|
- selection = nautilus_files_view_get_selection_for_file_transfer (view); |
|
- |
|
- for (l = selection; l != NULL; l = l->next) |
|
- { |
|
- source_files = g_list_prepend (source_files, |
|
- nautilus_file_get_location (l->data)); |
|
- } |
|
- source_files = g_list_reverse (source_files); |
|
- |
|
- name = nautilus_file_name_widget_controller_get_new_name (controller); |
|
- /* Get a parent from a random file. We assume all files has a common parent. |
|
- * But don't assume the parent is the view location, since that's not the |
|
- * case in list view when expand-folder setting is set |
|
- */ |
|
- parent = g_file_get_parent (G_FILE (g_list_first (source_files)->data)); |
|
- output = g_file_get_child (parent, name); |
|
- |
|
- data = g_new (CompressData, 1); |
|
- data->view = view; |
|
- data->added_locations = g_hash_table_new_full (g_file_hash, (GEqualFunc) g_file_equal, |
|
- g_object_unref, NULL); |
|
- g_object_add_weak_pointer (G_OBJECT (data->view), |
|
- (gpointer *) &data->view); |
|
- |
|
- g_signal_connect_data (view, |
|
- "add-files", |
|
- G_CALLBACK (track_newly_added_locations), |
|
- data->added_locations, |
|
- NULL, |
|
- G_CONNECT_AFTER); |
|
- |
|
- compression_format = g_settings_get_enum (nautilus_compression_preferences, |
|
- NAUTILUS_PREFERENCES_DEFAULT_COMPRESSION_FORMAT); |
|
- |
|
- switch (compression_format) |
|
- { |
|
- case NAUTILUS_COMPRESSION_ZIP: |
|
- { |
|
- format = AUTOAR_FORMAT_ZIP; |
|
- filter = AUTOAR_FILTER_NONE; |
|
- } |
|
- break; |
|
- |
|
- case NAUTILUS_COMPRESSION_TAR_XZ: |
|
- { |
|
- format = AUTOAR_FORMAT_TAR; |
|
- filter = AUTOAR_FILTER_XZ; |
|
- } |
|
- break; |
|
- |
|
- case NAUTILUS_COMPRESSION_7ZIP: |
|
- { |
|
- format = AUTOAR_FORMAT_7ZIP; |
|
- filter = AUTOAR_FILTER_NONE; |
|
- } |
|
- break; |
|
- |
|
- default: |
|
- g_assert_not_reached (); |
|
- } |
|
- |
|
- nautilus_file_operations_compress (source_files, output, |
|
- format, |
|
- filter, |
|
- nautilus_files_view_get_containing_window (view), |
|
- compress_done, |
|
- data); |
|
- |
|
- nautilus_file_list_free (selection); |
|
- g_list_free_full (source_files, g_object_unref); |
|
- g_clear_object (&priv->compress_controller); |
|
-} |
|
- |
|
-static void |
|
-compress_dialog_controller_on_cancelled (NautilusNewFolderDialogController *controller, |
|
- gpointer user_data) |
|
-{ |
|
- NautilusFilesView *view; |
|
- NautilusFilesViewPrivate *priv; |
|
- |
|
- view = NAUTILUS_FILES_VIEW (user_data); |
|
- priv = nautilus_files_view_get_instance_private (view); |
|
- |
|
- g_clear_object (&priv->compress_controller); |
|
-} |
|
- |
|
- |
|
-static void |
|
-nautilus_files_view_compress_dialog_new (NautilusFilesView *view) |
|
-{ |
|
- NautilusDirectory *containing_directory; |
|
- NautilusFilesViewPrivate *priv; |
|
- GList *selection; |
|
- g_autofree char *common_prefix = NULL; |
|
- |
|
- priv = nautilus_files_view_get_instance_private (view); |
|
- |
|
- if (priv->compress_controller != NULL) |
|
- { |
|
- return; |
|
- } |
|
- |
|
- containing_directory = nautilus_directory_get_by_uri (nautilus_files_view_get_backing_uri (view)); |
|
- |
|
- selection = nautilus_view_get_selection (NAUTILUS_VIEW (view)); |
|
- |
|
- if (g_list_length (selection) == 1) |
|
- { |
|
- g_autofree char *display_name = NULL; |
|
- |
|
- display_name = nautilus_file_get_display_name (selection->data); |
|
- |
|
- if (nautilus_file_is_directory (selection->data)) |
|
- { |
|
- common_prefix = g_steal_pointer (&display_name); |
|
- } |
|
- else |
|
- { |
|
- common_prefix = eel_filename_strip_extension (display_name); |
|
- } |
|
- } |
|
- else |
|
- { |
|
- common_prefix = nautilus_get_common_filename_prefix (selection, |
|
- MIN_COMMON_FILENAME_PREFIX_LENGTH); |
|
- } |
|
- |
|
- priv->compress_controller = nautilus_compress_dialog_controller_new (nautilus_files_view_get_containing_window (view), |
|
- containing_directory, |
|
- common_prefix); |
|
- |
|
- g_signal_connect (priv->compress_controller, |
|
- "name-accepted", |
|
- (GCallback) compress_dialog_controller_on_name_accepted, |
|
- view); |
|
- g_signal_connect (priv->compress_controller, |
|
- "cancelled", |
|
- (GCallback) compress_dialog_controller_on_cancelled, |
|
- view); |
|
- |
|
- nautilus_file_list_free (selection); |
|
-} |
|
- |
|
static void |
|
nautilus_files_view_new_folder (NautilusFilesView *directory_view, |
|
gboolean with_selection) |
|
@@ -3236,7 +2964,6 @@ nautilus_files_view_finalize (GObject *object) |
|
g_clear_object (&priv->toolbar_menu_sections->extended_section); |
|
g_clear_object (&priv->rename_file_controller); |
|
g_clear_object (&priv->new_folder_controller); |
|
- g_clear_object (&priv->compress_controller); |
|
g_free (priv->toolbar_menu_sections); |
|
|
|
g_hash_table_destroy (priv->non_ready_files); |
|
@@ -6303,296 +6030,6 @@ action_rename (GSimpleAction *action, |
|
real_action_rename (NAUTILUS_FILES_VIEW (user_data)); |
|
} |
|
|
|
-typedef struct |
|
-{ |
|
- NautilusFilesView *view; |
|
- GHashTable *added_locations; |
|
-} ExtractData; |
|
- |
|
-static void |
|
-extract_done (GList *outputs, |
|
- gpointer user_data) |
|
-{ |
|
- NautilusFilesViewPrivate *priv; |
|
- ExtractData *data; |
|
- GList *l; |
|
- gboolean all_files_acknowledged; |
|
- |
|
- data = user_data; |
|
- |
|
- if (data->view == NULL) |
|
- { |
|
- goto out; |
|
- } |
|
- |
|
- priv = nautilus_files_view_get_instance_private (data->view); |
|
- |
|
- g_signal_handlers_disconnect_by_func (data->view, |
|
- G_CALLBACK (track_newly_added_locations), |
|
- data->added_locations); |
|
- |
|
- if (outputs == NULL) |
|
- { |
|
- goto out; |
|
- } |
|
- |
|
- all_files_acknowledged = TRUE; |
|
- for (l = outputs; l && all_files_acknowledged; l = l->next) |
|
- { |
|
- all_files_acknowledged = g_hash_table_contains (data->added_locations, |
|
- l->data); |
|
- } |
|
- |
|
- if (all_files_acknowledged) |
|
- { |
|
- GList *selection = NULL; |
|
- |
|
- for (l = outputs; l != NULL; l = l->next) |
|
- { |
|
- selection = g_list_prepend (selection, |
|
- nautilus_file_get (l->data)); |
|
- } |
|
- |
|
- nautilus_files_view_set_selection (NAUTILUS_VIEW (data->view), |
|
- selection); |
|
- nautilus_files_view_reveal_selection (data->view); |
|
- |
|
- nautilus_file_list_free (selection); |
|
- } |
|
- else |
|
- { |
|
- for (l = outputs; l != NULL; l = l->next) |
|
- { |
|
- gboolean acknowledged; |
|
- |
|
- acknowledged = g_hash_table_contains (data->added_locations, |
|
- l->data); |
|
- |
|
- g_hash_table_insert (priv->pending_reveal, |
|
- nautilus_file_get (l->data), |
|
- GUINT_TO_POINTER (acknowledged)); |
|
- } |
|
- } |
|
-out: |
|
- g_hash_table_destroy (data->added_locations); |
|
- |
|
- if (data->view != NULL) |
|
- { |
|
- g_object_remove_weak_pointer (G_OBJECT (data->view), |
|
- (gpointer *) &data->view); |
|
- } |
|
- |
|
- g_free (data); |
|
-} |
|
- |
|
-static void |
|
-extract_files (NautilusFilesView *view, |
|
- GList *files, |
|
- GFile *destination_directory) |
|
-{ |
|
- GList *locations = NULL; |
|
- GList *l; |
|
- gboolean extracting_to_current_directory; |
|
- |
|
- if (files == NULL) |
|
- { |
|
- return; |
|
- } |
|
- |
|
- for (l = files; l != NULL; l = l->next) |
|
- { |
|
- locations = g_list_prepend (locations, |
|
- nautilus_file_get_location (l->data)); |
|
- } |
|
- |
|
- locations = g_list_reverse (locations); |
|
- |
|
- extracting_to_current_directory = g_file_equal (destination_directory, |
|
- nautilus_view_get_location (NAUTILUS_VIEW (view))); |
|
- |
|
- if (extracting_to_current_directory) |
|
- { |
|
- ExtractData *data; |
|
- |
|
- data = g_new (ExtractData, 1); |
|
- data->view = view; |
|
- data->added_locations = g_hash_table_new_full (g_file_hash, |
|
- (GEqualFunc) g_file_equal, |
|
- g_object_unref, NULL); |
|
- |
|
- |
|
- g_object_add_weak_pointer (G_OBJECT (data->view), |
|
- (gpointer *) &data->view); |
|
- |
|
- g_signal_connect_data (view, |
|
- "add-files", |
|
- G_CALLBACK (track_newly_added_locations), |
|
- data->added_locations, |
|
- NULL, |
|
- G_CONNECT_AFTER); |
|
- |
|
- nautilus_file_operations_extract_files (locations, |
|
- destination_directory, |
|
- nautilus_files_view_get_containing_window (view), |
|
- extract_done, |
|
- data); |
|
- } |
|
- else |
|
- { |
|
- nautilus_file_operations_extract_files (locations, |
|
- destination_directory, |
|
- nautilus_files_view_get_containing_window (view), |
|
- NULL, |
|
- NULL); |
|
- } |
|
- |
|
- g_list_free_full (locations, g_object_unref); |
|
-} |
|
- |
|
-typedef struct |
|
-{ |
|
- NautilusFilesView *view; |
|
- GList *files; |
|
-} ExtractToData; |
|
- |
|
-static void |
|
-on_extract_destination_dialog_response (GtkDialog *dialog, |
|
- gint response_id, |
|
- gpointer user_data) |
|
-{ |
|
- ExtractToData *data; |
|
- |
|
- data = user_data; |
|
- |
|
- if (response_id == GTK_RESPONSE_OK) |
|
- { |
|
- g_autoptr (GFile) destination_directory = NULL; |
|
- |
|
- destination_directory = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog)); |
|
- |
|
- extract_files (data->view, data->files, destination_directory); |
|
- } |
|
- |
|
- gtk_widget_destroy (GTK_WIDGET (dialog)); |
|
- nautilus_file_list_free (data->files); |
|
- g_free (data); |
|
-} |
|
- |
|
-static void |
|
-extract_files_to_chosen_location (NautilusFilesView *view, |
|
- GList *files) |
|
-{ |
|
- NautilusFilesViewPrivate *priv; |
|
- ExtractToData *data; |
|
- GtkWidget *dialog; |
|
- g_autofree char *uri = NULL; |
|
- |
|
- priv = nautilus_files_view_get_instance_private (view); |
|
- |
|
- if (files == NULL) |
|
- { |
|
- return; |
|
- } |
|
- |
|
- data = g_new (ExtractToData, 1); |
|
- |
|
- dialog = gtk_file_chooser_dialog_new (_("Select Extract Destination"), |
|
- GTK_WINDOW (nautilus_files_view_get_window (view)), |
|
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, |
|
- _("_Cancel"), GTK_RESPONSE_CANCEL, |
|
- _("_Select"), GTK_RESPONSE_OK, |
|
- NULL); |
|
- gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (dialog), FALSE); |
|
- |
|
- gtk_dialog_set_default_response (GTK_DIALOG (dialog), |
|
- GTK_RESPONSE_OK); |
|
- |
|
- gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE); |
|
- gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); |
|
- |
|
- /* The file chooser will not be able to display the search directory, |
|
- * so we need to get the base directory of the search if we are, in fact, |
|
- * in search. |
|
- */ |
|
- if (nautilus_view_is_searching (NAUTILUS_VIEW (view))) |
|
- { |
|
- NautilusSearchDirectory *search_directory; |
|
- NautilusDirectory *directory; |
|
- |
|
- search_directory = NAUTILUS_SEARCH_DIRECTORY (priv->model); |
|
- directory = nautilus_search_directory_get_base_model (search_directory); |
|
- uri = nautilus_directory_get_uri (directory); |
|
- } |
|
- else |
|
- { |
|
- uri = nautilus_directory_get_uri (priv->model); |
|
- } |
|
- |
|
- gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (dialog), uri); |
|
- |
|
- data->view = view; |
|
- data->files = nautilus_file_list_copy (files); |
|
- |
|
- g_signal_connect (dialog, "response", |
|
- G_CALLBACK (on_extract_destination_dialog_response), |
|
- data); |
|
- |
|
- gtk_widget_show_all (dialog); |
|
-} |
|
- |
|
-static void |
|
-action_extract_here (GSimpleAction *action, |
|
- GVariant *state, |
|
- gpointer user_data) |
|
-{ |
|
- NautilusFilesView *view; |
|
- GList *selection; |
|
- g_autoptr (GFile) location = NULL; |
|
- g_autoptr (GFile) parent = NULL; |
|
- |
|
- view = NAUTILUS_FILES_VIEW (user_data); |
|
- |
|
- selection = nautilus_view_get_selection (NAUTILUS_VIEW (view)); |
|
- location = nautilus_file_get_location (NAUTILUS_FILE (g_list_first (selection)->data)); |
|
- /* Get a parent from a random file. We assume all files has a common parent. |
|
- * But don't assume the parent is the view location, since that's not the |
|
- * case in list view when expand-folder setting is set |
|
- */ |
|
- parent = g_file_get_parent (location); |
|
- |
|
- extract_files (view, selection, parent); |
|
- |
|
- nautilus_file_list_free (selection); |
|
-} |
|
- |
|
-static void |
|
-action_extract_to (GSimpleAction *action, |
|
- GVariant *state, |
|
- gpointer user_data) |
|
-{ |
|
- NautilusFilesView *view; |
|
- GList *selection; |
|
- |
|
- view = NAUTILUS_FILES_VIEW (user_data); |
|
- |
|
- selection = nautilus_view_get_selection (NAUTILUS_VIEW (view)); |
|
- |
|
- extract_files_to_chosen_location (view, selection); |
|
- |
|
- nautilus_file_list_free (selection); |
|
-} |
|
- |
|
-static void |
|
-action_compress (GSimpleAction *action, |
|
- GVariant *state, |
|
- gpointer user_data) |
|
-{ |
|
- NautilusFilesView *view = user_data; |
|
- |
|
- nautilus_files_view_compress_dialog_new (view); |
|
-} |
|
- |
|
- |
|
#define BG_KEY_PRIMARY_COLOR "primary-color" |
|
#define BG_KEY_SECONDARY_COLOR "secondary-color" |
|
#define BG_KEY_COLOR_TYPE "color-shading-type" |
|
@@ -7052,9 +6489,6 @@ const GActionEntry view_entries[] = |
|
{ "restore-from-trash", action_restore_from_trash}, |
|
{ "paste-into", action_paste_files_into }, |
|
{ "rename", action_rename}, |
|
- { "extract-here", action_extract_here }, |
|
- { "extract-to", action_extract_to }, |
|
- { "compress", action_compress }, |
|
{ "properties", action_properties}, |
|
{ "set-as-wallpaper", action_set_as_wallpaper }, |
|
{ "mount-volume", action_mount_volume }, |
|
@@ -7363,40 +6797,6 @@ all_in_trash (GList *files) |
|
return TRUE; |
|
} |
|
|
|
-static gboolean |
|
-can_extract_all (GList *files) |
|
-{ |
|
- NautilusFile *file; |
|
- GList *l; |
|
- |
|
- for (l = files; l != NULL; l = l->next) |
|
- { |
|
- file = l->data; |
|
- if (!nautilus_file_is_archive (file)) |
|
- { |
|
- return FALSE; |
|
- } |
|
- } |
|
- return TRUE; |
|
-} |
|
- |
|
-static gboolean |
|
-nautilus_handles_all_files_to_extract (GList *files) |
|
-{ |
|
- NautilusFile *file; |
|
- GList *l; |
|
- |
|
- for (l = files; l != NULL; l = l->next) |
|
- { |
|
- file = l->data; |
|
- if (!nautilus_mime_file_extracts (file)) |
|
- { |
|
- return FALSE; |
|
- } |
|
- } |
|
- return TRUE; |
|
-} |
|
- |
|
GActionGroup * |
|
nautilus_files_view_get_action_group (NautilusFilesView *view) |
|
{ |
|
@@ -7429,9 +6829,6 @@ real_update_actions_state (NautilusFilesView *view) |
|
gboolean can_trash_files; |
|
gboolean can_copy_files; |
|
gboolean can_paste_files_into; |
|
- gboolean can_extract_files; |
|
- gboolean handles_all_files_to_extract; |
|
- gboolean can_extract_here; |
|
gboolean item_opens_in_view; |
|
gboolean is_read_only; |
|
GAction *action; |
|
@@ -7480,10 +6877,6 @@ real_update_actions_state (NautilusFilesView *view) |
|
can_paste_files_into = (!selection_contains_recent && |
|
selection_count == 1 && |
|
can_paste_into_file (NAUTILUS_FILE (selection->data))); |
|
- can_extract_files = selection_count != 0 && |
|
- can_extract_all (selection); |
|
- can_extract_here = nautilus_files_view_supports_extract_here (view); |
|
- handles_all_files_to_extract = nautilus_handles_all_files_to_extract (selection); |
|
settings_show_delete_permanently = g_settings_get_boolean (nautilus_preferences, |
|
NAUTILUS_PREFERENCES_SHOW_DELETE_PERMANENTLY); |
|
settings_show_create_link = g_settings_get_boolean (nautilus_preferences, |
|
@@ -7519,17 +6912,6 @@ real_update_actions_state (NautilusFilesView *view) |
|
|
|
action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group), |
|
"extract-here"); |
|
- g_simple_action_set_enabled (G_SIMPLE_ACTION (action), |
|
- can_extract_files && |
|
- !handles_all_files_to_extract && |
|
- can_extract_here); |
|
- |
|
- action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group), |
|
- "extract-to"); |
|
- g_simple_action_set_enabled (G_SIMPLE_ACTION (action), |
|
- can_extract_files && |
|
- (!handles_all_files_to_extract || |
|
- can_extract_here)); |
|
|
|
action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group), |
|
"compress"); |
|
@@ -7804,7 +7186,6 @@ update_selection_menu (NautilusFilesView *view) |
|
gint selection_count; |
|
gboolean show_app; |
|
gboolean show_run; |
|
- gboolean show_extract; |
|
gboolean item_opens_in_view; |
|
gchar *item_label; |
|
GAppInfo *app; |
|
@@ -7844,18 +7225,13 @@ update_selection_menu (NautilusFilesView *view) |
|
g_free (item_label); |
|
|
|
/* Open With <App> menu item */ |
|
- show_extract = show_app = show_run = item_opens_in_view = selection_count != 0; |
|
+ show_app = show_run = item_opens_in_view = selection_count != 0; |
|
for (l = selection; l != NULL; l = l->next) |
|
{ |
|
NautilusFile *file; |
|
|
|
file = NAUTILUS_FILE (l->data); |
|
|
|
- if (!nautilus_mime_file_extracts (file)) |
|
- { |
|
- show_extract = FALSE; |
|
- } |
|
- |
|
if (!nautilus_mime_file_opens_in_external_app (file)) |
|
{ |
|
show_app = FALSE; |
|
@@ -7871,7 +7247,7 @@ update_selection_menu (NautilusFilesView *view) |
|
item_opens_in_view = FALSE; |
|
} |
|
|
|
- if (!show_extract && !show_app && !show_run && !item_opens_in_view) |
|
+ if (!show_app && !show_run && !item_opens_in_view) |
|
{ |
|
break; |
|
} |
|
@@ -7904,12 +7280,6 @@ update_selection_menu (NautilusFilesView *view) |
|
{ |
|
item_label = g_strdup (_("Run")); |
|
} |
|
- else if (show_extract) |
|
- { |
|
- item_label = nautilus_files_view_supports_extract_here (view) ? |
|
- g_strdup (_("Extract Here")) : |
|
- g_strdup (_("Extract to…")); |
|
- } |
|
else |
|
{ |
|
item_label = g_strdup (_("Open")); |
|
diff --git a/src/nautilus-mime-actions.c b/src/nautilus-mime-actions.c |
|
index 882716054..7a4029cbb 100644 |
|
--- a/src/nautilus-mime-actions.c |
|
+++ b/src/nautilus-mime-actions.c |
|
@@ -56,7 +56,6 @@ typedef enum |
|
ACTIVATION_ACTION_LAUNCH_IN_TERMINAL, |
|
ACTIVATION_ACTION_OPEN_IN_VIEW, |
|
ACTIVATION_ACTION_OPEN_IN_APPLICATION, |
|
- ACTIVATION_ACTION_EXTRACT, |
|
ACTIVATION_ACTION_DO_NOTHING, |
|
} ActivationAction; |
|
|
|
@@ -715,20 +714,6 @@ get_activation_action (NautilusFile *file) |
|
{ |
|
ActivationAction action; |
|
char *activation_uri; |
|
- gboolean handles_extract = FALSE; |
|
- g_autoptr (GAppInfo) app_info = NULL; |
|
- const gchar* app_id; |
|
- |
|
- app_info = nautilus_mime_get_default_application_for_file (file); |
|
- if (app_info != NULL) |
|
- { |
|
- app_id = g_app_info_get_id (app_info); |
|
- handles_extract = g_strcmp0 (app_id, NAUTILUS_DESKTOP_ID) == 0; |
|
- } |
|
- if (handles_extract && nautilus_file_is_archive (file)) |
|
- { |
|
- return ACTIVATION_ACTION_EXTRACT; |
|
- } |
|
|
|
if (nautilus_file_is_nautilus_link (file)) |
|
{ |
|
@@ -776,12 +761,6 @@ get_activation_action (NautilusFile *file) |
|
return action; |
|
} |
|
|
|
-gboolean |
|
-nautilus_mime_file_extracts (NautilusFile *file) |
|
-{ |
|
- return get_activation_action (file) == ACTIVATION_ACTION_EXTRACT; |
|
-} |
|
- |
|
gboolean |
|
nautilus_mime_file_launches (NautilusFile *file) |
|
{ |
|
@@ -1673,13 +1652,6 @@ activate_files (ActivateParameters *parameters) |
|
} |
|
break; |
|
|
|
- case ACTIVATION_ACTION_EXTRACT: |
|
- { |
|
- /* Extraction of files should be handled in the view */ |
|
- g_assert_not_reached (); |
|
- } |
|
- break; |
|
- |
|
case ACTIVATION_ACTION_ASK: |
|
{ |
|
g_assert_not_reached (); |
|
diff --git a/src/resources/nautilus.gresource.xml b/src/resources/nautilus.gresource.xml |
|
index 3dd60ba6d..90e07f319 100644 |
|
--- a/src/resources/nautilus.gresource.xml |
|
+++ b/src/resources/nautilus.gresource.xml |
|
@@ -9,7 +9,6 @@ |
|
<file>ui/nautilus-toolbar-menu.ui</file> |
|
<file>ui/nautilus-toolbar-view-menu.ui</file> |
|
<file>ui/nautilus-create-folder-dialog.ui</file> |
|
- <file>ui/nautilus-compress-dialog.ui</file> |
|
<file>ui/nautilus-rename-file-popover.ui</file> |
|
<file>ui/nautilus-files-view-context-menus.ui</file> |
|
<file>ui/nautilus-progress-info-widget.ui</file> |
|
diff --git a/src/resources/ui/nautilus-compress-dialog.ui b/src/resources/ui/nautilus-compress-dialog.ui |
|
deleted file mode 100644 |
|
index 526e9eed2..000000000 |
|
--- a/src/resources/ui/nautilus-compress-dialog.ui |
|
+++ /dev/null |
|
@@ -1,186 +0,0 @@ |
|
-<?xml version="1.0" encoding="UTF-8"?> |
|
-<interface> |
|
- <requires lib="gtk+" version="3.14"/> |
|
- <object class="GtkDialog" id="compress_dialog"> |
|
- <property name="title" translatable="yes">Create Archive</property> |
|
- <property name="resizable">False</property> |
|
- <property name="modal">True</property> |
|
- <property name="window_position">center-on-parent</property> |
|
- <property name="destroy_with_parent">True</property> |
|
- <property name="type_hint">dialog</property> |
|
- <property name="use-header-bar">1</property> |
|
- <child internal-child="vbox"> |
|
- <object class="GtkBox" id="vbox"> |
|
- <property name="orientation">vertical</property> |
|
- <property name="margin_top">18</property> |
|
- <property name="margin_bottom">12</property> |
|
- <property name="margin_start">18</property> |
|
- <property name="margin_end">18</property> |
|
- <property name="spacing">6</property> |
|
- <child> |
|
- <object class="GtkLabel" id="name_label"> |
|
- <property name="label" translatable="yes">Archive name</property> |
|
- <property name="visible">True</property> |
|
- <property name="xalign">0</property> |
|
- </object> |
|
- <packing> |
|
- <property name="expand">False</property> |
|
- <property name="fill">True</property> |
|
- <property name="position">1</property> |
|
- </packing> |
|
- </child> |
|
- <child> |
|
- <object class="GtkEntry" id="name_entry"> |
|
- <property name="visible">True</property> |
|
- <property name="can_focus">True</property> |
|
- </object> |
|
- <packing> |
|
- <property name="expand">False</property> |
|
- <property name="fill">True</property> |
|
- <property name="position">2</property> |
|
- </packing> |
|
- </child> |
|
- <child> |
|
- <object class="GtkRevealer" id="error_revealer"> |
|
- <child> |
|
- <object class="GtkLabel" id="error_label"> |
|
- <property name="margin_top">4</property> |
|
- <property name="margin_bottom">4</property> |
|
- <property name="visible">True</property> |
|
- <property name="xalign">0</property> |
|
- </object> |
|
- </child> |
|
- </object> |
|
- <packing> |
|
- <property name="expand">False</property> |
|
- <property name="fill">True</property> |
|
- <property name="position">3</property> |
|
- </packing> |
|
- </child> |
|
- <child> |
|
- <object class="GtkBox" id="hbox"> |
|
- <property name="orientation">horizontal</property> |
|
- <property name="homogeneous">True</property> |
|
- <property name="spacing">0</property> |
|
- <child> |
|
- <object class="GtkRadioButton" id="zip_radio_button"> |
|
- <property name="label" translatable="no">.zip</property> |
|
- <property name="draw_indicator">True</property> |
|
- <signal name="toggled" handler="zip_radio_button_on_toggled"/> |
|
- </object> |
|
- <packing> |
|
- <property name="expand">True</property> |
|
- <property name="fill">True</property> |
|
- <property name="position">0</property> |
|
- </packing> |
|
- </child> |
|
- <child> |
|
- <object class="GtkRadioButton" id="tar_xz_radio_button"> |
|
- <property name="label" translatable="no">.tar.xz</property> |
|
- <property name="group">zip_radio_button</property> |
|
- <property name="draw_indicator">True</property> |
|
- <signal name="toggled" handler="tar_xz_radio_button_on_toggled"/> |
|
- </object> |
|
- <packing> |
|
- <property name="expand">True</property> |
|
- <property name="fill">True</property> |
|
- <property name="position">1</property> |
|
- </packing> |
|
- </child> |
|
- <child> |
|
- <object class="GtkRadioButton" id="seven_zip_radio_button"> |
|
- <property name="label" translatable="no">.7z</property> |
|
- <property name="group">zip_radio_button</property> |
|
- <property name="draw_indicator">True</property> |
|
- <signal name="toggled" handler="seven_zip_radio_button_on_toggled"/> |
|
- </object> |
|
- <packing> |
|
- <property name="expand">True</property> |
|
- <property name="fill">True</property> |
|
- <property name="position">2</property> |
|
- </packing> |
|
- </child> |
|
- </object> |
|
- <packing> |
|
- <property name="expand">False</property> |
|
- <property name="fill">True</property> |
|
- <property name="position">4</property> |
|
- </packing> |
|
- </child> |
|
- <child> |
|
- <object class="GtkStack" id="description_stack"> |
|
- <property name="visible">True</property> |
|
- <property name="can_focus">False</property> |
|
- <property name="homogeneous">True</property> |
|
- <child> |
|
- <object class="GtkLabel" id="zip_description_label"> |
|
- <property name="visible">True</property> |
|
- <property name="label" translatable="yes">Compatible with all operating systems.</property> |
|
- <property name="xalign">0</property> |
|
- <style> |
|
- <class name="dim-label"/> |
|
- </style> |
|
- </object> |
|
- <packing> |
|
- <property name="name">zip-description-label</property> |
|
- </packing> |
|
- </child> |
|
- <child> |
|
- <object class="GtkLabel" id="tar_xz_description_label"> |
|
- <property name="visible">True</property> |
|
- <property name="label" translatable="yes">Smaller archives but Linux and Mac only.</property> |
|
- <property name="xalign">0</property> |
|
- <style> |
|
- <class name="dim-label"/> |
|
- </style> |
|
- </object> |
|
- <packing> |
|
- <property name="name">tar-xz-description-label</property> |
|
- </packing> |
|
- </child> |
|
- <child> |
|
- <object class="GtkLabel" id="seven_zip_description_label"> |
|
- <property name="visible">True</property> |
|
- <property name="label" translatable="yes">Smaller archives but must be installed on Windows and Mac.</property> |
|
- <property name="xalign">0</property> |
|
- <style> |
|
- <class name="dim-label"/> |
|
- </style> |
|
- </object> |
|
- <packing> |
|
- <property name="name">seven-zip-description-label</property> |
|
- </packing> |
|
- </child> |
|
- </object> |
|
- <packing> |
|
- <property name="expand">False</property> |
|
- <property name="fill">True</property> |
|
- <property name="position">5</property> |
|
- </packing> |
|
- </child> |
|
- </object> |
|
- </child> |
|
- <child type="action"> |
|
- <object class="GtkButton" id="cancel_button"> |
|
- <property name="label" translatable="yes">Cancel</property> |
|
- <property name="visible">True</property> |
|
- <property name="can_focus">True</property> |
|
- <property name="receives_default">True</property> |
|
- </object> |
|
- </child> |
|
- <child type="action"> |
|
- <object class="GtkButton" id="activate_button"> |
|
- <property name="label" translatable="yes">Create</property> |
|
- <property name="visible">True</property> |
|
- <property name="can_focus">True</property> |
|
- <property name="can_default">True</property> |
|
- <property name="receives_default">True</property> |
|
- <property name="sensitive">False</property> |
|
- </object> |
|
- </child> |
|
- <action-widgets> |
|
- <action-widget response="ok" default="true">activate_button</action-widget> |
|
- <action-widget response="cancel">cancel_button</action-widget> |
|
- </action-widgets> |
|
- </object> |
|
-</interface> |
|
-- |
|
2.17.1 |
|
|
|
|