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

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