r3018 - in /experimental/evolution/debian: control patches/Fix-archives-support-in-attachments.patch patches/series

biebl at users.alioth.debian.org biebl at users.alioth.debian.org
Mon Sep 5 22:17:27 UTC 2016


Author: biebl
Date: Mon Sep  5 22:17:27 2016
New Revision: 3018

URL: http://svn.debian.org/wsvn/pkg-evolution/?sc=1&rev=3018
Log:
Cherry-pick patch from upstream for the recent changes in gnome-autoar

Added:
    experimental/evolution/debian/patches/Fix-archives-support-in-attachments.patch
Modified:
    experimental/evolution/debian/control
    experimental/evolution/debian/patches/series

Modified: experimental/evolution/debian/control
URL: http://svn.debian.org/wsvn/pkg-evolution/experimental/evolution/debian/control?rev=3018&op=diff
==============================================================================
--- experimental/evolution/debian/control	(original)
+++ experimental/evolution/debian/control	Mon Sep  5 22:17:27 2016
@@ -60,8 +60,8 @@
                libclutter-gtk-1.0-dev (>= 0.90),
                highlight,
                libcryptui-dev,
-               libgnome-autoar-dev (>= 0.1),
-               libgnome-autoargtk-dev (>= 0.1),
+               libgnome-autoar-0-dev (>= 0.1),
+               libgnome-autoar-gtk-0-dev (>= 0.1),
 
 Package: evolution
 Architecture: any

Added: experimental/evolution/debian/patches/Fix-archives-support-in-attachments.patch
URL: http://svn.debian.org/wsvn/pkg-evolution/experimental/evolution/debian/patches/Fix-archives-support-in-attachments.patch?rev=3018&op=file
==============================================================================
--- experimental/evolution/debian/patches/Fix-archives-support-in-attachments.patch	(added)
+++ experimental/evolution/debian/patches/Fix-archives-support-in-attachments.patch	Mon Sep  5 22:17:27 2016
@@ -0,0 +1,649 @@
+From b5681c51321045e0a509e5b656301e1032d8c4aa Mon Sep 17 00:00:00 2001
+From: Razvan Chitu <razvan.ch95 at gmail.com>
+Date: Fri, 26 Aug 2016 14:55:12 +0300
+Subject: [PATCH] Fix archives support in attachments
+
+The API of gnome-autoar was recently modified so compression and extraction
+were no longer working. Replace autoar preferences objects with two shell
+settings. Save memory file to disk before extracting it. Handle generation of
+unique file names internally.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=770380
+---
+ configure.ac                                  |   4 +-
+ data/org.gnome.evolution.shell.gschema.xml.in |  10 +
+ e-util/e-attachment-store.c                   |  78 +++----
+ e-util/e-attachment.c                         | 280 +++++++++++++++++++-------
+ 4 files changed, 254 insertions(+), 118 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index a1ba2c0..a841591 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -368,8 +368,8 @@ AC_ARG_ENABLE([autoar],
+ if test x"$enable_autoar" = xyes; then
+ 	PKG_CHECK_MODULES(
+ 		[AUTOAR],
+-		[gnome-autoar >= gnome_autoar_minimum_version
+-		 gnome-autoar-gtk >= gnome_autoar_minimum_version],,
++		[gnome-autoar-0 >= gnome_autoar_minimum_version
++		 gnome-autoar-gtk-0 >= gnome_autoar_minimum_version],,
+ 		[AC_MSG_ERROR([
+ 
+ 	gnome-autoar or gnome-autoar-gtk not found
+diff --git a/data/org.gnome.evolution.shell.gschema.xml.in b/data/org.gnome.evolution.shell.gschema.xml.in
+index 18ece74..02a5a18 100644
+--- a/data/org.gnome.evolution.shell.gschema.xml.in
++++ b/data/org.gnome.evolution.shell.gschema.xml.in
+@@ -15,6 +15,16 @@
+       <_summary>Initial file chooser folder</_summary>
+       <_description>Initial folder for GtkFileChooser dialogs.</_description>
+     </key>
++    <key name="autoar-format" type="s">
++      <default>''</default>
++      <_summary>Compression format used by autoar</_summary>
++      <_description>Compression format used when compressing attached directories with autoar.</_description>
++    </key>
++    <key name="autoar-filter" type="s">
++      <default>''</default>
++      <_summary>Compression filter used by autoar</_summary>
++      <_description>Compression filter used when compressing attached directories with autoar.</_description>
++    </key>
+     <key name="start-offline" type="b">
+       <default>false</default>
+       <_summary>Start in offline mode</_summary>
+diff --git a/e-util/e-attachment-store.c b/e-util/e-attachment-store.c
+index 85fa19a..05e4809 100644
+--- a/e-util/e-attachment-store.c
++++ b/e-util/e-attachment-store.c
+@@ -29,7 +29,7 @@
+ #include <glib/gi18n.h>
+ 
+ #ifdef HAVE_AUTOAR
+-#include <gnome-autoar/autoar.h>
++#include <gnome-autoar/gnome-autoar.h>
+ #include <gnome-autoar/autoar-gtk.h>
+ #endif
+ 
+@@ -648,8 +648,10 @@ e_attachment_store_run_load_dialog (EAttachmentStore *store,
+ 
+ #ifdef HAVE_AUTOAR
+ 	GSettings *settings;
+-	AutoarPref *arpref;
+-	gint format, filter;
++	char *format_string;
++	char *filter_string;
++	gint format;
++	gint filter;
+ #endif
+ 
+ 	g_return_if_fail (E_IS_ATTACHMENT_STORE (store));
+@@ -699,14 +701,23 @@ e_attachment_store_run_load_dialog (EAttachmentStore *store,
+ 	option_format_box = GTK_BOX (option_format_box_widget);
+ 	gtk_box_pack_start (extra_box, option_format_box_widget, FALSE, FALSE, 0);
+ 
+-	settings = e_util_ref_settings (AUTOAR_PREF_DEFAULT_GSCHEMA_ID);
+-	arpref = autoar_pref_new_with_gsettings (settings);
++	settings = e_util_ref_settings ("org.gnome.evolution.shell");
++
++	format_string = g_settings_get_string (settings, "autoar-format");
++	filter_string = g_settings_get_string (settings, "autoar-filter");
++
++	if (!e_enum_from_string (AUTOAR_TYPE_FORMAT, format_string, &format)) {
++		format = AUTOAR_FORMAT_ZIP;
++	}
++	if (!e_enum_from_string (AUTOAR_TYPE_FILTER, filter_string, &filter)) {
++		filter = AUTOAR_FILTER_NONE;
++	}
+ 
+ 	option_format_label = gtk_label_new (
+ 		_("Archive selected directories using this format:"));
+ 	option_format_combo = autoar_gtk_chooser_simple_new (
+-		autoar_pref_get_default_format (arpref),
+-		autoar_pref_get_default_filter (arpref));
++		format,
++		filter);
+ 	gtk_box_pack_start (option_format_box, option_format_label, FALSE, FALSE, 0);
+ 	gtk_box_pack_start (option_format_box, option_format_combo, FALSE, FALSE, 0);
+ #endif
+@@ -729,8 +740,23 @@ e_attachment_store_run_load_dialog (EAttachmentStore *store,
+ 
+ #ifdef HAVE_AUTOAR
+ 	autoar_gtk_chooser_simple_get (option_format_combo, &format, &filter);
+-	autoar_pref_set_default_format (arpref, format);
+-	autoar_pref_set_default_filter (arpref, filter);
++
++	if (!e_enum_to_string (AUTOAR_TYPE_FORMAT, format)) {
++		format = AUTOAR_FORMAT_ZIP;
++	}
++
++	if (!e_enum_to_string (AUTOAR_TYPE_FORMAT, filter)) {
++		filter = AUTOAR_FILTER_NONE;
++	}
++
++	g_settings_set_string (
++		settings,
++		"autoar-format",
++		e_enum_to_string (AUTOAR_TYPE_FORMAT, format));
++	g_settings_set_string (
++		settings,
++		"autoar-filter",
++		e_enum_to_string (AUTOAR_TYPE_FILTER, filter));
+ #endif
+ 
+ 	for (iter = files; iter != NULL; iter = g_slist_next (iter)) {
+@@ -742,11 +768,6 @@ e_attachment_store_run_load_dialog (EAttachmentStore *store,
+ 		e_attachment_set_disposition (attachment, disposition);
+ 		e_attachment_store_add_attachment (store, attachment);
+ 
+-#ifdef HAVE_AUTOAR
+-		g_object_set_data_full (G_OBJECT (attachment),
+-			"autoar-pref", g_object_ref (arpref), g_object_unref);
+-#endif
+-
+ 		e_attachment_load_async (
+ 			attachment, (GAsyncReadyCallback)
+ 			e_attachment_load_handle_error, parent);
+@@ -760,7 +781,8 @@ exit:
+ 	gtk_widget_destroy (dialog);
+ #ifdef HAVE_AUTOAR
+ 	g_object_unref (settings);
+-	g_object_unref (arpref);
++	g_free (format_string);
++	g_free (filter_string);
+ #endif
+ }
+ 
+@@ -848,8 +870,6 @@ e_attachment_store_run_save_dialog (EAttachmentStore *store,
+ 		const gchar *name = NULL;
+ 
+ #ifdef HAVE_AUTOAR
+-		AutoarPref *arpref;
+-		GSettings *settings;
+ 		gchar *mime_type;
+ #endif
+ 
+@@ -867,15 +887,10 @@ e_attachment_store_run_save_dialog (EAttachmentStore *store,
+ 
+ #ifdef HAVE_AUTOAR
+ 		mime_type = e_attachment_dup_mime_type (attachment);
+-		settings = e_util_ref_settings (AUTOAR_PREF_DEFAULT_GSCHEMA_ID);
+-		arpref = autoar_pref_new_with_gsettings (settings);
+-		if (!autoar_pref_check_file_name (arpref, name) &&
+-		    !autoar_pref_check_mime_type_d (arpref, mime_type)) {
++		if (!autoar_check_mime_type_supported (mime_type)) {
+ 			gtk_widget_hide (extra_box_widget);
+ 		}
+ 
+-		g_clear_object (&settings);
+-		g_clear_object (&arpref);
+ 		g_free (mime_type);
+ #endif
+ 
+@@ -903,27 +918,16 @@ e_attachment_store_run_save_dialog (EAttachmentStore *store,
+ 			e_attachment_set_save_self (attachment_list->data, save_self);
+ 			e_attachment_set_save_extracted (attachment_list->data, save_extracted);
+ 		} else {
+-			AutoarPref *arpref;
+-			GSettings *settings;
+ 			GList *iter;
+ 
+-			settings = e_util_ref_settings (AUTOAR_PREF_DEFAULT_GSCHEMA_ID);
+-			arpref = autoar_pref_new_with_gsettings (settings);
+-
+ 			for (iter = attachment_list; iter != NULL; iter = iter->next) {
+ 				EAttachment *attachment;
+-				GFileInfo *file_info;
+-				const gchar *name;
+ 				gchar *mime_type;
+ 
+ 				attachment = iter->data;
+-				file_info = e_attachment_ref_file_info (attachment);
+-				name = g_file_info_get_display_name (file_info);
+ 				mime_type = e_attachment_dup_mime_type (attachment);
+ 
+-				if ((name != NULL &&
+-				    autoar_pref_check_file_name (arpref, name)) ||
+-				    autoar_pref_check_mime_type_d (arpref, mime_type)) {
++				if (autoar_check_mime_type_supported (mime_type)) {
+ 					e_attachment_set_save_self (attachment, save_self);
+ 					e_attachment_set_save_extracted (attachment, save_extracted);
+ 				} else {
+@@ -931,12 +935,8 @@ e_attachment_store_run_save_dialog (EAttachmentStore *store,
+ 					e_attachment_set_save_extracted (attachment, FALSE);
+ 				}
+ 
+-				g_object_unref (file_info);
+ 				g_free (mime_type);
+ 			}
+-
+-			g_object_unref (settings);
+-			g_object_unref (arpref);
+ 		}
+ #endif
+ 	} else {
+diff --git a/e-util/e-attachment.c b/e-util/e-attachment.c
+index d451f18..21dec66 100644
+--- a/e-util/e-attachment.c
++++ b/e-util/e-attachment.c
+@@ -29,8 +29,7 @@
+ #include <glib/gstdio.h>
+ 
+ #ifdef HAVE_AUTOAR
+-#include <gnome-autoar/autoar.h>
+-#include <gnome-autoar/autoar-gtk.h>
++#include <gnome-autoar/gnome-autoar.h>
+ #endif
+ 
+ #include <libedataserver/libedataserver.h>
+@@ -2027,7 +2026,7 @@ attachment_load_file_read_cb (GFile *file,
+ 
+ #ifdef HAVE_AUTOAR
+ static void
+-attachment_load_created_decide_dest_cb (AutoarCreate *arcreate,
++attachment_load_created_decide_dest_cb (AutoarCompressor *compressor,
+                                         GFile *destination,
+                                         EAttachment *attachment)
+ {
+@@ -2035,23 +2034,23 @@ attachment_load_created_decide_dest_cb (AutoarCreate *arcreate,
+ }
+ 
+ static void
+-attachment_load_created_cancelled_cb (AutoarCreate *arcreate,
++attachment_load_created_cancelled_cb (AutoarCompressor *compressor,
+                                       LoadContext *load_context)
+ {
+ 	attachment_load_check_for_error (load_context,
+ 		g_error_new_literal (
+ 			G_IO_ERROR, G_IO_ERROR_CANCELLED, _("Operation was cancelled")));
+-	g_object_unref (arcreate);
++	g_object_unref (compressor);
+ }
+ 
+ static void
+-attachment_load_created_completed_cb (AutoarCreate *arcreate,
++attachment_load_created_completed_cb (AutoarCompressor *compressor,
+                                       LoadContext *load_context)
+ {
+ 	EAttachment *attachment;
+ 	GFile *file;
+ 
+-	g_object_unref (arcreate);
++	g_object_unref (compressor);
+ 
+ 	/* We have set the file to the created temporary archive, so we can
+ 	 * query info again and use the regular procedure to load the
+@@ -2068,12 +2067,12 @@ attachment_load_created_completed_cb (AutoarCreate *arcreate,
+ }
+ 
+ static void
+-attachment_load_created_error_cb (AutoarCreate *arcreate,
++attachment_load_created_error_cb (AutoarCompressor *compressor,
+                                   GError *error,
+                                   LoadContext *load_context)
+ {
+ 	attachment_load_check_for_error (load_context, g_error_copy (error));
+-	g_object_unref (arcreate);
++	g_object_unref (compressor);
+ }
+ #endif
+ 
+@@ -2101,25 +2100,49 @@ attachment_load_query_info_cb (GFile *file,
+ 
+ #ifdef HAVE_AUTOAR
+ 	if (g_file_info_get_file_type (file_info) == G_FILE_TYPE_DIRECTORY) {
+-		AutoarCreate *arcreate;
+-		AutoarPref *arpref; /* Do not unref */
++		AutoarCompressor *compressor;
+ 		GFile *temporary;
++		GSettings *settings;
++		GList *files = NULL;
++		char *format_string;
++		char *filter_string;
++		gint format;
++		gint filter;
+ 
+-		arpref = g_object_get_data (G_OBJECT (attachment), "autoar-pref");
+ 		temporary = attachment_get_temporary (&error);
+ 		if (attachment_load_check_for_error (load_context, error))
+ 			return;
+-		arcreate = autoar_create_new_file (arpref, temporary, file, NULL);
+-		g_signal_connect (arcreate, "decide-dest",
++
++		settings = e_util_ref_settings ("org.gnome.evolution.shell");
++
++		format_string = g_settings_get_string (settings, "autoar-format");
++		filter_string = g_settings_get_string (settings, "autoar-filter");
++
++		if (!e_enum_from_string (AUTOAR_TYPE_FORMAT, format_string, &format)) {
++			format = AUTOAR_FORMAT_ZIP;
++		}
++		if (!e_enum_from_string (AUTOAR_TYPE_FILTER, filter_string, &filter)) {
++			filter = AUTOAR_FILTER_NONE;
++		}
++
++		files = g_list_prepend (files, file);
++
++		compressor = autoar_compressor_new (
++			files, temporary, format, filter, FALSE);
++		g_signal_connect (compressor, "decide-dest",
+ 			G_CALLBACK (attachment_load_created_decide_dest_cb), attachment);
+-		g_signal_connect (arcreate, "cancelled",
++		g_signal_connect (compressor, "cancelled",
+ 			G_CALLBACK (attachment_load_created_cancelled_cb), load_context);
+-		g_signal_connect (arcreate, "completed",
++		g_signal_connect (compressor, "completed",
+ 			G_CALLBACK (attachment_load_created_completed_cb), load_context);
+-		g_signal_connect (arcreate, "error",
++		g_signal_connect (compressor, "error",
+ 			G_CALLBACK (attachment_load_created_error_cb), load_context);
+-		autoar_create_start_async (arcreate, cancellable);
++		autoar_compressor_start_async (compressor, cancellable);
+ 
++		g_object_unref (settings);
++		g_free (format_string);
++		g_free (filter_string);
++		g_list_free (files);
+ 		g_object_unref (temporary);
+ 	} else {
+ #endif
+@@ -2752,6 +2775,7 @@ struct _SaveContext {
+ 
+ 	GByteArray *input_buffer;
+ 	gchar *suggested_destname;
++	GFile *temporary_file;
+ 
+ 	guint total_tasks : 2;
+ 	guint completed_tasks : 2;
+@@ -2815,6 +2839,9 @@ attachment_save_context_free (SaveContext *save_context)
+ 	if (save_context->suggested_destname != NULL)
+ 		g_free (save_context->suggested_destname);
+ 
++	if (save_context->temporary_file != NULL)
++		g_clear_object (&save_context->temporary_file);
++
+ 	g_mutex_clear (&(save_context->completed_tasks_mutex));
+ 	g_mutex_clear (&(save_context->prepared_tasks_mutex));
+ 
+@@ -2872,6 +2899,33 @@ attachment_save_complete (SaveContext *save_context) {
+ 	}
+ }
+ 
++static gchar *
++get_new_name_with_count (const gchar *initial_name,
++                         gint count)
++{
++	GString *string;
++	const gchar *ext;
++	gsize length;
++
++	if (count == 0) {
++		return g_strdup (initial_name);
++	}
++
++	string = g_string_sized_new (strlen (initial_name));
++	ext = g_utf8_strchr (initial_name, -1, '.');
++
++	if (ext != NULL)
++		length = ext - initial_name;
++	else
++		length = strlen (initial_name);
++
++	g_string_append_len (string, initial_name, length);
++	g_string_append_printf (string, " (%d)", count);
++	g_string_append (string, (ext != NULL) ? ext : "");
++
++	return g_string_free (string, FALSE);
++}
++
+ static GFile *
+ attachment_save_new_candidate (SaveContext *save_context)
+ {
+@@ -2890,27 +2944,7 @@ attachment_save_new_candidate (SaveContext *save_context)
+ 		/* Translators: Default attachment filename. */
+ 		display_name = _("attachment.dat");
+ 
+-	if (save_context->count == 0)
+-		basename = g_strdup (display_name);
+-	else {
+-		GString *string;
+-		const gchar *ext;
+-		gsize length;
+-
+-		string = g_string_sized_new (strlen (display_name));
+-		ext = g_utf8_strchr (display_name, -1, '.');
+-
+-		if (ext != NULL)
+-			length = ext - display_name;
+-		else
+-			length = strlen (display_name);
+-
+-		g_string_append_len (string, display_name, length);
+-		g_string_append_printf (string, " (%d)", save_context->count);
+-		g_string_append (string, (ext != NULL) ? ext : "");
+-
+-		basename = g_string_free (string, FALSE);
+-	}
++	basename = get_new_name_with_count (display_name, save_context->count);
+ 
+ 	save_context->count++;
+ 
+@@ -3009,43 +3043,151 @@ attachment_save_read_cb (GInputStream *input_stream,
+ }
+ 
+ #ifdef HAVE_AUTOAR
++static GFile*
++attachment_save_extracted_decide_destination_cb (AutoarExtractor *extractor,
++                                                 GFile *destination,
++                                                 GList *files,
++                                                 SaveContext *save_context)
++{
++	gchar *basename;
++	GFile *destination_directory;
++	GFile *new_destination;
++	gint count = 0;
++
++	basename = g_file_get_basename (destination);
++	destination_directory = g_file_get_parent (destination);
++
++	new_destination = g_object_ref (destination);
++
++	while (g_file_query_exists (new_destination, NULL)) {
++		gchar *new_basename;
++
++		new_basename = get_new_name_with_count (basename, ++count);
++
++		g_object_unref (new_destination);
++
++		new_destination = g_file_get_child (
++			destination_directory, new_basename);
++
++		g_free (new_basename);
++	}
++
++	g_object_unref (destination_directory);
++	g_free (basename);
++
++	return new_destination;
++}
++
+ static void
+-attachment_save_extracted_progress_cb (AutoarExtract *arextract,
++attachment_save_extracted_progress_cb (AutoarExtractor *extractor,
+                                        guint64 completed_size,
+                                        guint completed_files,
+                                        SaveContext *save_context)
+ {
+ 	attachment_progress_cb (
+-		autoar_extract_get_size (arextract),
++		autoar_extractor_get_total_size (extractor),
+ 		completed_size, save_context->attachment);
+ }
+ 
+ static void
+-attachment_save_extracted_cancelled_cb (AutoarExtract *arextract,
++attachment_save_extracted_cancelled_cb (AutoarExtractor *extractor,
+                                         SaveContext *save_context)
+ {
+ 	attachment_save_check_for_error (save_context,
+ 		g_error_new_literal (
+ 			G_IO_ERROR, G_IO_ERROR_CANCELLED, _("Operation was cancelled")));
+-	g_object_unref (arextract);
++	g_object_unref (extractor);
+ }
+ 
+ static void
+-attachment_save_extracted_completed_cb (AutoarExtract *arextract,
++attachment_save_extracted_completed_cb (AutoarExtractor *extractor,
+                                         SaveContext *save_context)
+ {
+ 	attachment_save_complete (save_context);
+-	g_object_unref (arextract);
++	g_object_unref (extractor);
+ }
+ 
+ static void
+-attachment_save_extracted_error_cb (AutoarExtract *arextract,
++attachment_save_extracted_error_cb (AutoarExtractor *extractor,
+                                     GError *error,
+                                     SaveContext *save_context)
+ {
+ 	attachment_save_check_for_error (save_context, g_error_copy (error));
+-	g_object_unref (arextract);
++	g_object_unref (extractor);
+ }
++
++static void
++attachament_save_write_archive_cb (GOutputStream *output_stream,
++                                   GAsyncResult *result,
++                                   SaveContext *save_context)
++{
++	AutoarExtractor *extractor;
++	GError *error = NULL;
++	gsize bytes_written;
++
++	g_output_stream_write_all_finish (
++		output_stream, result, &bytes_written, &error);
++
++	g_object_unref (output_stream);
++
++	if (attachment_save_check_for_error (save_context, error)) {
++		return;
++	}
++
++	extractor = autoar_extractor_new (
++		save_context->temporary_file, save_context->directory);
++
++	autoar_extractor_set_delete_after_extraction (extractor, TRUE);
++
++	g_signal_connect (extractor, "decide-destination",
++		G_CALLBACK (attachment_save_extracted_decide_destination_cb),
++		save_context);
++	g_signal_connect (extractor, "progress",
++		G_CALLBACK (attachment_save_extracted_progress_cb),
++		save_context);
++	g_signal_connect (extractor, "cancelled",
++		G_CALLBACK (attachment_save_extracted_cancelled_cb),
++		save_context);
++	g_signal_connect (extractor, "error",
++		G_CALLBACK (attachment_save_extracted_error_cb),
++		save_context);
++	g_signal_connect (extractor, "completed",
++		G_CALLBACK (attachment_save_extracted_completed_cb),
++		save_context);
++
++	autoar_extractor_start_async (
++		extractor, save_context->attachment->priv->cancellable);
++
++	/* We do not g_object_unref (extractor); here because
++	 * autoar_extractor_run_start_async () does not increase the
++	 * reference count of extractor. We unref the object in
++	 * callbacks instead. */
++}
++
++static void
++attachment_save_create_archive_cb (GFile *file,
++                                   GAsyncResult *result,
++                                   SaveContext *save_context)
++{
++	GFileOutputStream *output_stream;
++	GError *error = NULL;
++
++	output_stream = g_file_create_finish (file, result, &error);
++
++	if (attachment_save_check_for_error (save_context, error)) {
++		return;
++	}
++
++	g_output_stream_write_all_async (
++		G_OUTPUT_STREAM (output_stream),
++		save_context->input_buffer->data,
++		save_context->input_buffer->len,
++		G_PRIORITY_DEFAULT,
++		save_context->attachment->priv->cancellable,
++		(GAsyncReadyCallback) attachament_save_write_archive_cb,
++		save_context);
++}
++
+ #endif
+ 
+ static void
+@@ -3097,41 +3239,25 @@ attachment_save_got_output_stream (SaveContext *save_context)
+ 
+ #ifdef HAVE_AUTOAR
+ 	if (attachment->priv->save_extracted) {
+-		GSettings *settings;
+-		AutoarPref *arpref;
+-		AutoarExtract *arextract;
++		GFile *temporary_directory;
++		GError *error = NULL;
+ 
+-		settings = e_util_ref_settings (AUTOAR_PREF_DEFAULT_GSCHEMA_ID);
+-		arpref = autoar_pref_new_with_gsettings (settings);
+-		autoar_pref_set_delete_if_succeed (arpref, FALSE);
++		temporary_directory = attachment_get_temporary (&error);
++		if (attachment_save_check_for_error (save_context, error))
++			return;
+ 
+-		arextract = autoar_extract_new_memory_file (
+-			buffer->data, buffer->len,
+-			save_context->suggested_destname,
+-			save_context->directory, arpref);
++		save_context->temporary_file = g_file_get_child (
++			temporary_directory, save_context->suggested_destname);
+ 
+-		g_signal_connect (arextract, "progress",
+-			G_CALLBACK (attachment_save_extracted_progress_cb),
+-			save_context);
+-		g_signal_connect (arextract, "cancelled",
+-			G_CALLBACK (attachment_save_extracted_cancelled_cb),
+-			save_context);
+-		g_signal_connect (arextract, "error",
+-			G_CALLBACK (attachment_save_extracted_error_cb),
+-			save_context);
+-		g_signal_connect (arextract, "completed",
+-			G_CALLBACK (attachment_save_extracted_completed_cb),
++		g_file_create_async (
++			save_context->temporary_file,
++			G_FILE_CREATE_NONE,
++			G_PRIORITY_DEFAULT,
++			cancellable,
++			(GAsyncReadyCallback) attachment_save_create_archive_cb,
+ 			save_context);
+ 
+-		autoar_extract_start_async (arextract, cancellable);
+-
+-		g_object_unref (settings);
+-		g_object_unref (arpref);
+-
+-		/* We do not g_object_unref (arextract); here because
+-		 * autoar_extract_run_start_async () do not increase the
+-		 * reference count of arextract. We unref the object in
+-		 * callbacks instead. */
++		g_object_unref (temporary_directory);
+ 	}
+ #endif
+ 
+-- 
+2.9.3
+

Modified: experimental/evolution/debian/patches/series
URL: http://svn.debian.org/wsvn/pkg-evolution/experimental/evolution/debian/patches/series?rev=3018&op=diff
==============================================================================
--- experimental/evolution/debian/patches/series	(original)
+++ experimental/evolution/debian/patches/series	Mon Sep  5 22:17:27 2016
@@ -1,3 +1,4 @@
 02_nss_paths.patch
 10_revert_libevolution_avoid-version.patch
 lower-webkit-dependency.patch
+Fix-archives-support-in-attachments.patch




More information about the pkg-evolution-commits mailing list