[gthumb] reuse the GSettings object when writing metadata with exiv2



commit 67aca056f568085c9e0b00c7de4fb44fbe9e7c53
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Thu Nov 24 16:14:02 2011 +0100

    reuse the GSettings object when writing metadata with exiv2
    
    added a GSettings object to the private data to avoid to create
    and destroy a GSettings object for each call to
    gth_metadata_provider_exiv2_write

 .../exiv2_tools/gth-metadata-provider-exiv2.c      |   53 ++++++++++++++------
 .../exiv2_tools/gth-metadata-provider-exiv2.h      |    2 +
 2 files changed, 40 insertions(+), 15 deletions(-)
---
diff --git a/extensions/exiv2_tools/gth-metadata-provider-exiv2.c b/extensions/exiv2_tools/gth-metadata-provider-exiv2.c
index 03ff634..806f79f 100644
--- a/extensions/exiv2_tools/gth-metadata-provider-exiv2.c
+++ b/extensions/exiv2_tools/gth-metadata-provider-exiv2.c
@@ -28,9 +28,27 @@
 #include "gth-metadata-provider-exiv2.h"
 
 
+struct _GthMetadataProviderExiv2Private {
+	GSettings *general_settings;
+};
+
+
 G_DEFINE_TYPE (GthMetadataProviderExiv2, gth_metadata_provider_exiv2, GTH_TYPE_METADATA_PROVIDER)
 
 
+static void
+gth_metadata_provider_exiv2_finalize (GObject *object)
+{
+	GthMetadataProviderExiv2 *self;
+
+	self = GTH_METADATA_PROVIDER_EXIV2 (object);
+
+	_g_object_unref (self->priv->general_settings);
+
+	G_OBJECT_CLASS (gth_metadata_provider_exiv2_parent_class)->finalize (object);
+}
+
+
 static gboolean
 gth_metadata_provider_exiv2_can_read (GthMetadataProvider  *self,
 				      const char           *mime_type,
@@ -108,25 +126,23 @@ gth_metadata_provider_exiv2_read (GthMetadataProvider *self,
 
 
 static void
-gth_metadata_provider_exiv2_write (GthMetadataProvider   *self,
+gth_metadata_provider_exiv2_write (GthMetadataProvider   *base,
 				   GthMetadataWriteFlags  flags,
 				   GthFileData           *file_data,
 				   const char            *attributes,
 				   GCancellable          *cancellable)
 {
-	GSettings *settings;
-	gboolean   store_metadata_in_files;
-	void      *buffer = NULL;
-	gsize      size;
-	GError    *error = NULL;
-	GObject   *metadata;
-	int        i;
-
-	settings = g_settings_new (GTHUMB_GENERAL_SCHEMA);
-	store_metadata_in_files = g_settings_get_boolean (settings, PREF_GENERAL_STORE_METADATA_IN_FILES);
-	g_object_unref (settings);
-
-	if (((flags & GTH_METADATA_WRITE_FORCE_EMBEDDED) != GTH_METADATA_WRITE_FORCE_EMBEDDED) && ! store_metadata_in_files)
+	GthMetadataProviderExiv2 *self = GTH_METADATA_PROVIDER_EXIV2 (base);
+	void                     *buffer = NULL;
+	gsize                     size;
+	GError                   *error = NULL;
+	GObject                  *metadata;
+	int                       i;
+
+	if (self->priv->general_settings == NULL)
+		self->priv->general_settings = g_settings_new (GTHUMB_GENERAL_SCHEMA);
+
+	if (! (flags & GTH_METADATA_WRITE_FORCE_EMBEDDED) && ! g_settings_get_boolean (self->priv->general_settings, PREF_GENERAL_STORE_METADATA_IN_FILES))
 		return;
 
 	if (! exiv2_supports_writes (gth_file_data_get_mime_type (file_data)))
@@ -289,8 +305,14 @@ gth_metadata_provider_exiv2_write (GthMetadataProvider   *self,
 static void
 gth_metadata_provider_exiv2_class_init (GthMetadataProviderExiv2Class *klass)
 {
+	GObjectClass             *object_class;
 	GthMetadataProviderClass *mp_class;
 
+	g_type_class_add_private (klass, sizeof (GthMetadataProviderExiv2Private));
+
+	object_class = G_OBJECT_CLASS (klass);
+	object_class->finalize = gth_metadata_provider_exiv2_finalize;
+
 	mp_class = GTH_METADATA_PROVIDER_CLASS (klass);
 	mp_class->can_read = gth_metadata_provider_exiv2_can_read;
 	mp_class->can_write = gth_metadata_provider_exiv2_can_write;
@@ -302,5 +324,6 @@ gth_metadata_provider_exiv2_class_init (GthMetadataProviderExiv2Class *klass)
 static void
 gth_metadata_provider_exiv2_init (GthMetadataProviderExiv2 *self)
 {
-	/* void */
+	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_METADATA_PROVIDER_EXIV2, GthMetadataProviderExiv2Private);
+	self->priv->general_settings = NULL;
 }
diff --git a/extensions/exiv2_tools/gth-metadata-provider-exiv2.h b/extensions/exiv2_tools/gth-metadata-provider-exiv2.h
index 0b823c7..cdb5e59 100644
--- a/extensions/exiv2_tools/gth-metadata-provider-exiv2.h
+++ b/extensions/exiv2_tools/gth-metadata-provider-exiv2.h
@@ -35,10 +35,12 @@
 
 typedef struct _GthMetadataProviderExiv2         GthMetadataProviderExiv2;
 typedef struct _GthMetadataProviderExiv2Class    GthMetadataProviderExiv2Class;
+typedef struct _GthMetadataProviderExiv2Private  GthMetadataProviderExiv2Private;
 
 struct _GthMetadataProviderExiv2
 {
 	GthMetadataProvider __parent;
+	GthMetadataProviderExiv2Private *priv;
 };
 
 struct _GthMetadataProviderExiv2Class



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]