[gthumb/ext] changed the gth_metadata_provider_can_read/can_write functions
- From: Paolo Bacchilega <paobac src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gthumb/ext] changed the gth_metadata_provider_can_read/can_write functions
- Date: Sat, 2 Jan 2010 21:41:09 +0000 (UTC)
commit fd9afa7287b191713a09f031b3c8ffd26cf84e12
Author: Paolo Bacchilega <paobac src gnome org>
Date: Fri Jan 1 17:44:05 2010 +0100
changed the gth_metadata_provider_can_read/can_write functions
added a mime type argument to the can_read/can_write functions
to make them more usefull.
.../comments/gth-metadata-provider-comment.c | 77 +++----
.../comments/gth-metadata-provider-comment.h | 2 -
extensions/exiv2/gth-metadata-provider-exiv2.c | 89 ++++----
extensions/exiv2/gth-metadata-provider-exiv2.h | 2 -
.../gstreamer/gth-metadata-provider-gstreamer.c | 67 ++----
.../gstreamer/gth-metadata-provider-gstreamer.h | 2 -
.../image_viewer/gth-metadata-provider-image.c | 67 ++----
.../image_viewer/gth-metadata-provider-image.h | 2 -
gthumb/gth-main.c | 34 +++-
gthumb/gth-main.h | 7 +-
gthumb/gth-metadata-provider-file.c | 62 ++----
gthumb/gth-metadata-provider-file.h | 2 -
gthumb/gth-metadata-provider.c | 251 +++++---------------
gthumb/gth-metadata-provider.h | 24 ++-
14 files changed, 230 insertions(+), 458 deletions(-)
---
diff --git a/extensions/comments/gth-metadata-provider-comment.c b/extensions/comments/gth-metadata-provider-comment.c
index a2846c0..190c23f 100644
--- a/extensions/comments/gth-metadata-provider-comment.c
+++ b/extensions/comments/gth-metadata-provider-comment.c
@@ -21,23 +21,41 @@
*/
#include <config.h>
-#include <string.h>
-#include <glib/gi18n.h>
#include <glib.h>
#include <gthumb.h>
#include "gth-comment.h"
#include "gth-metadata-provider-comment.h"
-#define GTH_METADATA_PROVIDER_COMMENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTH_TYPE_METADATA_PROVIDER_COMMENT, GthMetadataProviderCommentPrivate))
+static gpointer parent_class = NULL;
-struct _GthMetadataProviderCommentPrivate {
- int dummy;
-};
+static gboolean
+gth_metadata_provider_comment_can_read (GthMetadataProvider *self,
+ const char *mime_type,
+ char **attribute_v)
+{
+ return _g_file_attributes_matches_any_v ("comment::*,"
+ "general::datetime,"
+ "general::description,"
+ "general::location,"
+ "general::tags",
+ attribute_v);
+}
-static gpointer parent_class = NULL;
+static gboolean
+gth_metadata_provider_comment_can_write (GthMetadataProvider *self,
+ const char *mime_type,
+ char **attribute_v)
+{
+ return _g_file_attributes_matches_any_v ("comment::*,"
+ "general::datetime,"
+ "general::description,"
+ "general::location,"
+ "general::tags",
+ attribute_v);
+}
static void
@@ -193,56 +211,17 @@ gth_metadata_provider_comment_write (GthMetadataProvider *self,
static void
-gth_metadata_provider_comment_finalize (GObject *object)
-{
- /*GthMetadataProviderComment *comment = GTH_METADATA_PROVIDER_COMMENT (object);*/
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-static GObject *
-gth_metadata_provider_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_properties)
-{
- GthMetadataProviderClass *klass;
- GObjectClass *parent_class;
- GObject *obj;
- GthMetadataProvider *self;
-
- klass = GTH_METADATA_PROVIDER_CLASS (g_type_class_peek (GTH_TYPE_METADATA_PROVIDER));
- parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
- obj = parent_class->constructor (type, n_construct_properties, construct_properties);
- self = GTH_METADATA_PROVIDER (obj);
-
- g_object_set (self, "readable-attributes", "comment::*,general::datetime,general::description,general::location,general::tags", NULL);
- g_object_set (self, "writable-attributes", "comment::*,general::datetime,general::description,general::location,general::tags", NULL);
-
- return obj;
-}
-
-
-static void
gth_metadata_provider_comment_class_init (GthMetadataProviderCommentClass *klass)
{
parent_class = g_type_class_peek_parent (klass);
- g_type_class_add_private (klass, sizeof (GthMetadataProviderCommentPrivate));
-
- G_OBJECT_CLASS (klass)->finalize = gth_metadata_provider_comment_finalize;
- G_OBJECT_CLASS (klass)->constructor = gth_metadata_provider_constructor;
+ GTH_METADATA_PROVIDER_CLASS (klass)->can_read = gth_metadata_provider_comment_can_read;
+ GTH_METADATA_PROVIDER_CLASS (klass)->can_write = gth_metadata_provider_comment_can_write;
GTH_METADATA_PROVIDER_CLASS (klass)->read = gth_metadata_provider_comment_read;
GTH_METADATA_PROVIDER_CLASS (klass)->write = gth_metadata_provider_comment_write;
}
-static void
-gth_metadata_provider_comment_init (GthMetadataProviderComment *catalogs)
-{
-}
-
-
GType
gth_metadata_provider_comment_get_type (void)
{
@@ -258,7 +237,7 @@ gth_metadata_provider_comment_get_type (void)
NULL,
sizeof (GthMetadataProviderComment),
0,
- (GInstanceInitFunc) gth_metadata_provider_comment_init
+ (GInstanceInitFunc) NULL
};
type = g_type_register_static (GTH_TYPE_METADATA_PROVIDER,
diff --git a/extensions/comments/gth-metadata-provider-comment.h b/extensions/comments/gth-metadata-provider-comment.h
index 5404e7a..677c083 100644
--- a/extensions/comments/gth-metadata-provider-comment.h
+++ b/extensions/comments/gth-metadata-provider-comment.h
@@ -35,13 +35,11 @@
#define GTH_METADATA_PROVIDER_COMMENT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GTH_TYPE_METADATA_PROVIDER_COMMENT, GthMetadataProviderCommentClass))
typedef struct _GthMetadataProviderComment GthMetadataProviderComment;
-typedef struct _GthMetadataProviderCommentPrivate GthMetadataProviderCommentPrivate;
typedef struct _GthMetadataProviderCommentClass GthMetadataProviderCommentClass;
struct _GthMetadataProviderComment
{
GthMetadataProvider __parent;
- GthMetadataProviderCommentPrivate *priv;
};
struct _GthMetadataProviderCommentClass
diff --git a/extensions/exiv2/gth-metadata-provider-exiv2.c b/extensions/exiv2/gth-metadata-provider-exiv2.c
index 2e96201..c35ea5b 100644
--- a/extensions/exiv2/gth-metadata-provider-exiv2.c
+++ b/extensions/exiv2/gth-metadata-provider-exiv2.c
@@ -29,15 +29,49 @@
#include "gth-metadata-provider-exiv2.h"
-#define GTH_METADATA_PROVIDER_EXIV2_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTH_TYPE_METADATA_PROVIDER_EXIV2, GthMetadataProviderExiv2Private))
+static GthMetadataProviderClass *parent_class = NULL;
-struct _GthMetadataProviderExiv2Private {
- int dummy;
-};
+static gboolean
+gth_metadata_provider_exiv2_can_read (GthMetadataProvider *self,
+ const char *mime_type,
+ char **attribute_v)
+{
+ if (! _g_content_type_is_a (mime_type, "image/*"))
+ return FALSE;
+
+ return _g_file_attributes_matches_any_v ("Exif::*,"
+ "Xmp::*,"
+ "Iptc::*,"
+ "Embedded::Image::*,"
+ "Embedded::Photo::*,"
+ "general::datetime,"
+ "general::description,"
+ "general::location,"
+ "general::tags",
+ attribute_v);
+}
-static GthMetadataProviderClass *parent_class = NULL;
+static gboolean
+gth_metadata_provider_exiv2_can_write (GthMetadataProvider *self,
+ const char *mime_type,
+ char **attribute_v)
+{
+ if (! exiv2_supports_writes (mime_type))
+ return FALSE;
+
+ return _g_file_attributes_matches_any_v ("Exif::*,"
+ "Xmp::*,"
+ "Iptc::*,"
+ "Embedded::Image::*,"
+ "Embedded::Photo::*,"
+ "general::datetime,"
+ "general::description,"
+ "general::location,"
+ "general::tags",
+ attribute_v);
+}
static void
@@ -165,56 +199,17 @@ gth_metadata_provider_exiv2_write (GthMetadataProvider *self,
static void
-gth_metadata_provider_exiv2_finalize (GObject *object)
-{
- /*GthMetadataProviderExiv2 *comment = GTH_METADATA_PROVIDER_EXIV2 (object);*/
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-static GObject *
-gth_metadata_provider_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_properties)
-{
- GthMetadataProviderClass *klass;
- GObjectClass *parent_class;
- GObject *obj;
- GthMetadataProvider *self;
-
- klass = GTH_METADATA_PROVIDER_CLASS (g_type_class_peek (GTH_TYPE_METADATA_PROVIDER));
- parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
- obj = parent_class->constructor (type, n_construct_properties, construct_properties);
- self = GTH_METADATA_PROVIDER (obj);
-
- g_object_set (self, "readable-attributes", "Exif::*,Xmp::*,Iptc::*,Embedded::Image::*,Embedded::Photo::*,general::datetime,general::description,general::location,general::tags", NULL);
- g_object_set (self, "writable-attributes", "Exif::*,Xmp::*,Iptc::*,Embedded::Image::*,Embedded::Photo::*,general::datetime,general::description,general::location,general::tags", NULL);
-
- return obj;
-}
-
-
-static void
gth_metadata_provider_exiv2_class_init (GthMetadataProviderExiv2Class *klass)
{
parent_class = g_type_class_peek_parent (klass);
- g_type_class_add_private (klass, sizeof (GthMetadataProviderExiv2Private));
-
- G_OBJECT_CLASS (klass)->finalize = gth_metadata_provider_exiv2_finalize;
- G_OBJECT_CLASS (klass)->constructor = gth_metadata_provider_constructor;
+ GTH_METADATA_PROVIDER_CLASS (klass)->can_read = gth_metadata_provider_exiv2_can_read;
+ GTH_METADATA_PROVIDER_CLASS (klass)->can_write = gth_metadata_provider_exiv2_can_write;
GTH_METADATA_PROVIDER_CLASS (klass)->read = gth_metadata_provider_exiv2_read;
GTH_METADATA_PROVIDER_CLASS (klass)->write = gth_metadata_provider_exiv2_write;
}
-static void
-gth_metadata_provider_exiv2_init (GthMetadataProviderExiv2 *catalogs)
-{
-}
-
-
GType
gth_metadata_provider_exiv2_get_type (void)
{
@@ -230,7 +225,7 @@ gth_metadata_provider_exiv2_get_type (void)
NULL,
sizeof (GthMetadataProviderExiv2),
0,
- (GInstanceInitFunc) gth_metadata_provider_exiv2_init
+ (GInstanceInitFunc) NULL
};
type = g_type_register_static (GTH_TYPE_METADATA_PROVIDER,
diff --git a/extensions/exiv2/gth-metadata-provider-exiv2.h b/extensions/exiv2/gth-metadata-provider-exiv2.h
index a6b4c7d..24404b7 100644
--- a/extensions/exiv2/gth-metadata-provider-exiv2.h
+++ b/extensions/exiv2/gth-metadata-provider-exiv2.h
@@ -35,13 +35,11 @@
#define GTH_METADATA_PROVIDER_EXIV2_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GTH_TYPE_METADATA_PROVIDER_EXIV2, GthMetadataProviderExiv2Class))
typedef struct _GthMetadataProviderExiv2 GthMetadataProviderExiv2;
-typedef struct _GthMetadataProviderExiv2Private GthMetadataProviderExiv2Private;
typedef struct _GthMetadataProviderExiv2Class GthMetadataProviderExiv2Class;
struct _GthMetadataProviderExiv2
{
GthMetadataProvider __parent;
- GthMetadataProviderExiv2Private *priv;
};
struct _GthMetadataProviderExiv2Class
diff --git a/extensions/gstreamer/gth-metadata-provider-gstreamer.c b/extensions/gstreamer/gth-metadata-provider-gstreamer.c
index f9ec253..087a876 100644
--- a/extensions/gstreamer/gth-metadata-provider-gstreamer.c
+++ b/extensions/gstreamer/gth-metadata-provider-gstreamer.c
@@ -21,23 +21,31 @@
*/
#include <config.h>
-#include <string.h>
-#include <glib/gi18n.h>
#include <glib.h>
#include <gthumb.h>
#include "gstreamer-utils.h"
#include "gth-metadata-provider-gstreamer.h"
-#define GTH_METADATA_PROVIDER_GSTREAMER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTH_TYPE_METADATA_PROVIDER_GSTREAMER, GthMetadataProviderGstreamerPrivate))
-
+static GthMetadataProviderClass *parent_class = NULL;
-struct _GthMetadataProviderGstreamerPrivate {
- int dummy;
-};
+static gboolean
+gth_metadata_provider_gstreamer_can_read (GthMetadataProvider *self,
+ const char *mime_type,
+ char **attribute_v)
+{
+ if (! _g_content_type_is_a (mime_type, "audio/*")
+ && ! _g_content_type_is_a (mime_type, "video/*"))
+ {
+ return FALSE;
+ }
-static GthMetadataProviderClass *parent_class = NULL;
+ return _g_file_attributes_matches_any_v ("general::format,"
+ "general::dimensions,"
+ "audio-video::*",
+ attribute_v);
+}
static void
@@ -59,54 +67,15 @@ gth_metadata_provider_gstreamer_read (GthMetadataProvider *self,
static void
-gth_metadata_provider_gstreamer_finalize (GObject *object)
-{
- /*GthMetadataProviderGstreamer *comment = GTH_METADATA_PROVIDER_GSTREAMER (object);*/
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-static GObject *
-gth_metadata_provider_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_properties)
-{
- GthMetadataProviderClass *klass;
- GObjectClass *parent_class;
- GObject *obj;
- GthMetadataProvider *self;
-
- klass = GTH_METADATA_PROVIDER_CLASS (g_type_class_peek (GTH_TYPE_METADATA_PROVIDER));
- parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
- obj = parent_class->constructor (type, n_construct_properties, construct_properties);
- self = GTH_METADATA_PROVIDER (obj);
-
- g_object_set (self, "readable-attributes", "general::format,general::dimensions,audio-video::*", NULL);
-
- return obj;
-}
-
-
-static void
gth_metadata_provider_gstreamer_class_init (GthMetadataProviderGstreamerClass *klass)
{
parent_class = g_type_class_peek_parent (klass);
- g_type_class_add_private (klass, sizeof (GthMetadataProviderGstreamerPrivate));
-
- G_OBJECT_CLASS (klass)->finalize = gth_metadata_provider_gstreamer_finalize;
- G_OBJECT_CLASS (klass)->constructor = gth_metadata_provider_constructor;
+ GTH_METADATA_PROVIDER_CLASS (klass)->can_read = gth_metadata_provider_gstreamer_can_read;
GTH_METADATA_PROVIDER_CLASS (klass)->read = gth_metadata_provider_gstreamer_read;
}
-static void
-gth_metadata_provider_gstreamer_init (GthMetadataProviderGstreamer *catalogs)
-{
-}
-
-
GType
gth_metadata_provider_gstreamer_get_type (void)
{
@@ -122,7 +91,7 @@ gth_metadata_provider_gstreamer_get_type (void)
NULL,
sizeof (GthMetadataProviderGstreamer),
0,
- (GInstanceInitFunc) gth_metadata_provider_gstreamer_init
+ (GInstanceInitFunc) NULL
};
type = g_type_register_static (GTH_TYPE_METADATA_PROVIDER,
diff --git a/extensions/gstreamer/gth-metadata-provider-gstreamer.h b/extensions/gstreamer/gth-metadata-provider-gstreamer.h
index 58c3337..1dd5b50 100644
--- a/extensions/gstreamer/gth-metadata-provider-gstreamer.h
+++ b/extensions/gstreamer/gth-metadata-provider-gstreamer.h
@@ -35,13 +35,11 @@
#define GTH_METADATA_PROVIDER_GSTREAMER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GTH_TYPE_METADATA_PROVIDER_GSTREAMER, GthMetadataProviderGstreamerClass))
typedef struct _GthMetadataProviderGstreamer GthMetadataProviderGstreamer;
-typedef struct _GthMetadataProviderGstreamerPrivate GthMetadataProviderGstreamerPrivate;
typedef struct _GthMetadataProviderGstreamerClass GthMetadataProviderGstreamerClass;
struct _GthMetadataProviderGstreamer
{
GthMetadataProvider __parent;
- GthMetadataProviderGstreamerPrivate *priv;
};
struct _GthMetadataProviderGstreamerClass
diff --git a/extensions/image_viewer/gth-metadata-provider-image.c b/extensions/image_viewer/gth-metadata-provider-image.c
index e61f977..e7a188f 100644
--- a/extensions/image_viewer/gth-metadata-provider-image.c
+++ b/extensions/image_viewer/gth-metadata-provider-image.c
@@ -21,23 +21,29 @@
*/
#include <config.h>
-#include <string.h>
-#include <glib/gi18n.h>
#include <glib.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <gthumb.h>
#include "gth-metadata-provider-image.h"
-#define GTH_METADATA_PROVIDER_IMAGE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTH_TYPE_METADATA_PROVIDER_IMAGE, GthMetadataProviderImagePrivate))
-
-
-struct _GthMetadataProviderImagePrivate {
- int dummy;
-};
+static GthMetadataProviderClass *parent_class = NULL;
-static GthMetadataProviderClass *parent_class = NULL;
+static gboolean
+gth_metadata_provider_image_can_read (GthMetadataProvider *self,
+ const char *mime_type,
+ char **attribute_v)
+{
+ if (! _g_content_type_is_a (mime_type, "image/*"))
+ return FALSE;
+
+ return _g_file_attributes_matches_any_v ("general::format,"
+ "general::dimensions,"
+ "image::width,"
+ "image::height",
+ attribute_v);
+}
static void
@@ -73,54 +79,15 @@ gth_metadata_provider_image_read (GthMetadataProvider *self,
static void
-gth_metadata_provider_image_finalize (GObject *object)
-{
- /*GthMetadataProviderImage *image = GTH_METADATA_PROVIDER_IMAGE (object);*/
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-static GObject *
-gth_metadata_provider_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_properties)
-{
- GthMetadataProviderClass *klass;
- GObjectClass *parent_class;
- GObject *obj;
- GthMetadataProvider *self;
-
- klass = GTH_METADATA_PROVIDER_CLASS (g_type_class_peek (GTH_TYPE_METADATA_PROVIDER));
- parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
- obj = parent_class->constructor (type, n_construct_properties, construct_properties);
- self = GTH_METADATA_PROVIDER (obj);
-
- g_object_set (self, "readable-attributes", "general::format,general::dimensions,image::width,image::height", NULL);
-
- return obj;
-}
-
-
-static void
gth_metadata_provider_image_class_init (GthMetadataProviderImageClass *klass)
{
parent_class = g_type_class_peek_parent (klass);
- g_type_class_add_private (klass, sizeof (GthMetadataProviderImagePrivate));
-
- G_OBJECT_CLASS (klass)->finalize = gth_metadata_provider_image_finalize;
- G_OBJECT_CLASS (klass)->constructor = gth_metadata_provider_constructor;
+ GTH_METADATA_PROVIDER_CLASS (klass)->can_read = gth_metadata_provider_image_can_read;
GTH_METADATA_PROVIDER_CLASS (klass)->read = gth_metadata_provider_image_read;
}
-static void
-gth_metadata_provider_image_init (GthMetadataProviderImage *catalogs)
-{
-}
-
-
GType
gth_metadata_provider_image_get_type (void)
{
@@ -136,7 +103,7 @@ gth_metadata_provider_image_get_type (void)
NULL,
sizeof (GthMetadataProviderImage),
0,
- (GInstanceInitFunc) gth_metadata_provider_image_init
+ (GInstanceInitFunc) NULL
};
type = g_type_register_static (GTH_TYPE_METADATA_PROVIDER,
diff --git a/extensions/image_viewer/gth-metadata-provider-image.h b/extensions/image_viewer/gth-metadata-provider-image.h
index 1af3cbc..49c4965 100644
--- a/extensions/image_viewer/gth-metadata-provider-image.h
+++ b/extensions/image_viewer/gth-metadata-provider-image.h
@@ -35,13 +35,11 @@
#define GTH_METADATA_PROVIDER_IMAGE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GTH_TYPE_METADATA_PROVIDER_IMAGE, GthMetadataProviderImageClass))
typedef struct _GthMetadataProviderImage GthMetadataProviderImage;
-typedef struct _GthMetadataProviderImagePrivate GthMetadataProviderImagePrivate;
typedef struct _GthMetadataProviderImageClass GthMetadataProviderImageClass;
struct _GthMetadataProviderImage
{
GthMetadataProvider __parent;
- GthMetadataProviderImagePrivate *priv;
};
struct _GthMetadataProviderImageClass
diff --git a/gthumb/gth-main.c b/gthumb/gth-main.c
index ec659b6..34a29b8 100644
--- a/gthumb/gth-main.c
+++ b/gthumb/gth-main.c
@@ -526,7 +526,8 @@ gth_main_get_metadata_attributes (const char *mask)
GthMetadataProvider *
-gth_main_get_metadata_reader (const char *id)
+gth_main_get_metadata_reader (const char *id,
+ const char *mime_type)
{
GthMetadataProvider *metadata = NULL;
GList *scan;
@@ -535,7 +536,28 @@ gth_main_get_metadata_reader (const char *id)
for (scan = Main->priv->metadata_provider; scan; scan = scan->next) {
GthMetadataProvider *registered_metadata = scan->data;
- if (gth_metadata_provider_can_read (registered_metadata, (char **)attribute_v)) {
+ if (gth_metadata_provider_can_read (registered_metadata, mime_type, (char **)attribute_v)) {
+ metadata = g_object_new (G_OBJECT_TYPE (registered_metadata), NULL);
+ break;
+ }
+ }
+
+ return metadata;
+}
+
+
+GthMetadataProvider *
+gth_main_get_metadata_writer (const char *id,
+ const char *mime_type)
+{
+ GthMetadataProvider *metadata = NULL;
+ GList *scan;
+ const char *attribute_v[] = { id, NULL };
+
+ for (scan = Main->priv->metadata_provider; scan; scan = scan->next) {
+ GthMetadataProvider *registered_metadata = scan->data;
+
+ if (gth_metadata_provider_can_write (registered_metadata, mime_type, (char **)attribute_v)) {
metadata = g_object_new (G_OBJECT_TYPE (registered_metadata), NULL);
break;
}
@@ -1261,8 +1283,8 @@ gth_main_extension_is_active (const char *extension_name)
gboolean
-attribute_list_reaload_required (const char *old_attributes,
- const char *new_attributes)
+attribute_list_reload_required (const char *old_attributes,
+ const char *new_attributes)
{
char **old_attributes_v;
char **new_attributes_v;
@@ -1285,7 +1307,7 @@ attribute_list_reaload_required (const char *old_attributes,
GthMetadataProvider *provider;
int j;
- provider = gth_main_get_metadata_reader (old_attributes_v[i]);
+ provider = gth_main_get_metadata_reader (old_attributes_v[i], "*");
if (provider == NULL)
continue;
@@ -1298,7 +1320,7 @@ attribute_list_reaload_required (const char *old_attributes,
attr_v[0] = new_attributes_v[j];
attr_v[1] = NULL;
- if (gth_metadata_provider_can_read (provider, attr_v)) {
+ if (gth_metadata_provider_can_read (provider, "*", attr_v)) {
g_free (new_attributes_v[j]);
new_attributes_v[j] = NULL;
}
diff --git a/gthumb/gth-main.h b/gthumb/gth-main.h
index d7612ac..89687d5 100644
--- a/gthumb/gth-main.h
+++ b/gthumb/gth-main.h
@@ -80,7 +80,10 @@ void gth_main_register_metadata_info_v (GthMetadataInfo
void gth_main_register_metadata_provider (GType metadata_provider_type);
GList * gth_main_get_all_metadata_providers (void);
char ** gth_main_get_metadata_attributes (const char *mask);
-GthMetadataProvider * gth_main_get_metadata_reader (const char *id);
+GthMetadataProvider * gth_main_get_metadata_reader (const char *id,
+ const char *mime_type);
+GthMetadataProvider * gth_main_get_metadata_writer (const char *id,
+ const char *mime_type);
GthMetadataCategory * gth_main_get_metadata_category (const char *id);
GthMetadataInfo * gth_main_get_metadata_info (const char *id);
GPtrArray * gth_main_get_all_metadata_info (void);
@@ -126,7 +129,7 @@ gboolean gth_main_extension_is_active (const char *exten
/* utilities */
-gboolean attribute_list_reaload_required (const char *old_attributes,
+gboolean attribute_list_reload_required (const char *old_attributes,
const char *new_attributes);
G_END_DECLS
diff --git a/gthumb/gth-metadata-provider-file.c b/gthumb/gth-metadata-provider-file.c
index 37b7808..1592697 100644
--- a/gthumb/gth-metadata-provider-file.c
+++ b/gthumb/gth-metadata-provider-file.c
@@ -21,8 +21,6 @@
*/
#include <config.h>
-#include <string.h>
-#include <glib/gi18n.h>
#include <glib.h>
#include "glib-utils.h"
#include "gth-metadata-provider-file.h"
@@ -31,12 +29,21 @@
#define GTH_METADATA_PROVIDER_FILE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTH_TYPE_METADATA_PROVIDER_COMMENT, GthMetadataProviderFilePrivate))
-struct _GthMetadataProviderFilePrivate {
- int dummy;
-};
+static GthMetadataProviderClass *parent_class = NULL;
-static GthMetadataProviderClass *parent_class = NULL;
+static gboolean
+gth_metadata_provider_file_can_read (GthMetadataProvider *self,
+ const char *mime_type,
+ char **attribute_v)
+{
+ return _g_file_attributes_matches_any_v ("gth::file::display-size,"
+ "gth::file::display-mtime,"
+ "gth::file::content-type,"
+ "gth::file::is-modified,"
+ "gth::file::full-name",
+ attribute_v);
+}
static void
@@ -73,54 +80,15 @@ gth_metadata_provider_file_read (GthMetadataProvider *self,
static void
-gth_metadata_provider_file_finalize (GObject *object)
-{
- /*GthMetadataProviderFile *file = GTH_METADATA_PROVIDER_FILE (object);*/
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-static GObject *
-gth_metadata_provider_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_properties)
-{
- GthMetadataProviderClass *klass;
- GObjectClass *parent_class;
- GObject *obj;
- GthMetadataProvider *self;
-
- klass = GTH_METADATA_PROVIDER_CLASS (g_type_class_peek (GTH_TYPE_METADATA_PROVIDER));
- parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
- obj = parent_class->constructor (type, n_construct_properties, construct_properties);
- self = GTH_METADATA_PROVIDER (obj);
-
- g_object_set (self, "readable-attributes", "gth::file::display-size,gth::file::display-mtime,gth::file::content-type,gth::file::is-modified,gth::file::full-name", NULL);
-
- return obj;
-}
-
-
-static void
gth_metadata_provider_file_class_init (GthMetadataProviderFileClass *klass)
{
parent_class = g_type_class_peek_parent (klass);
- g_type_class_add_private (klass, sizeof (GthMetadataProviderFilePrivate));
-
- G_OBJECT_CLASS (klass)->finalize = gth_metadata_provider_file_finalize;
- G_OBJECT_CLASS (klass)->constructor = gth_metadata_provider_constructor;
+ GTH_METADATA_PROVIDER_CLASS (klass)->can_read = gth_metadata_provider_file_can_read;
GTH_METADATA_PROVIDER_CLASS (klass)->read = gth_metadata_provider_file_read;
}
-static void
-gth_metadata_provider_file_init (GthMetadataProviderFile *catalogs)
-{
-}
-
-
GType
gth_metadata_provider_file_get_type (void)
{
@@ -136,7 +104,7 @@ gth_metadata_provider_file_get_type (void)
NULL,
sizeof (GthMetadataProviderFile),
0,
- (GInstanceInitFunc) gth_metadata_provider_file_init
+ (GInstanceInitFunc) NULL
};
type = g_type_register_static (GTH_TYPE_METADATA_PROVIDER,
diff --git a/gthumb/gth-metadata-provider-file.h b/gthumb/gth-metadata-provider-file.h
index 42a3bc0..7c79b4a 100644
--- a/gthumb/gth-metadata-provider-file.h
+++ b/gthumb/gth-metadata-provider-file.h
@@ -37,13 +37,11 @@ G_BEGIN_DECLS
#define GTH_METADATA_PROVIDER_FILE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GTH_TYPE_METADATA_PROVIDER_FILE, GthMetadataProviderFileClass))
typedef struct _GthMetadataProviderFile GthMetadataProviderFile;
-typedef struct _GthMetadataProviderFilePrivate GthMetadataProviderFilePrivate;
typedef struct _GthMetadataProviderFileClass GthMetadataProviderFileClass;
struct _GthMetadataProviderFile
{
GthMetadataProvider __parent;
- GthMetadataProviderFilePrivate *priv;
};
struct _GthMetadataProviderFileClass
diff --git a/gthumb/gth-metadata-provider.c b/gthumb/gth-metadata-provider.c
index 23564ae..e86e205 100644
--- a/gthumb/gth-metadata-provider.c
+++ b/gthumb/gth-metadata-provider.c
@@ -27,128 +27,43 @@
#include "gth-metadata-provider.h"
-#define GTH_METADATA_PROVIDER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTH_TYPE_METADATA_PROVIDER, GthMetadataProviderPrivate))
#define CHECK_THREAD_RATE 5
-enum {
- GTH_METADATA_PROVIDER_DUMMY_PROPERTY,
- GTH_METADATA_PROVIDER_READABLE_ATTRIBUTES,
- GTH_METADATA_PROVIDER_WRITABLE_ATTRIBUTES
-};
-
-
-struct _GthMetadataProviderPrivate {
- char *_readable_attributes;
- char *_writable_attributes;
-};
-
static gpointer gth_metadata_provider_parent_class = NULL;
-static void
-gth_metadata_provider_real_read (GthMetadataProvider *self,
- GthFileData *file_data,
- const char *attributes)
-{
-}
-
-
-static void
-gth_metadata_provider_real_write (GthMetadataProvider *self,
- GthFileData *file_data,
- const char *attributes)
-{
-}
-
-
-static void
-gth_metadata_provider_set_readable_attributes (GthMetadataProvider *self,
- const char *value)
+static gboolean
+gth_metadata_provider_real_can_read (GthMetadataProvider *self,
+ const char *mime_type,
+ char **attribute_v)
{
- if (self->priv->_readable_attributes != NULL) {
- g_free (self->priv->_readable_attributes);
- self->priv->_readable_attributes = NULL;
- }
-
- if (value != NULL)
- self->priv->_readable_attributes = g_strdup (value);
+ return FALSE;
}
-static void
-gth_metadata_provider_set_writable_attributes (GthMetadataProvider *self,
- const char *value)
+static gboolean
+gth_metadata_provider_real_can_write (GthMetadataProvider *self,
+ const char *mime_type,
+ char **attribute_v)
{
- if (self->priv->_writable_attributes != NULL) {
- g_free (self->priv->_writable_attributes);
- self->priv->_writable_attributes = NULL;
- }
-
- if (value != NULL)
- self->priv->_writable_attributes = g_strdup (value);
+ return FALSE;
}
static void
-gth_metadata_provider_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
+gth_metadata_provider_real_read (GthMetadataProvider *self,
+ GthFileData *file_data,
+ const char *attributes)
{
- GthMetadataProvider *self;
-
- self = GTH_METADATA_PROVIDER (object);
-
- switch (property_id) {
- case GTH_METADATA_PROVIDER_READABLE_ATTRIBUTES:
- gth_metadata_provider_set_readable_attributes (self, g_value_get_string (value));
- break;
- case GTH_METADATA_PROVIDER_WRITABLE_ATTRIBUTES:
- gth_metadata_provider_set_writable_attributes (self, g_value_get_string (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
}
static void
-gth_metadata_provider_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GthMetadataProvider *self;
-
- self = GTH_METADATA_PROVIDER (object);
-
- switch (property_id) {
- case GTH_METADATA_PROVIDER_READABLE_ATTRIBUTES:
- g_value_set_string (value, self->priv->_readable_attributes);
- break;
- case GTH_METADATA_PROVIDER_WRITABLE_ATTRIBUTES:
- g_value_set_string (value, self->priv->_writable_attributes);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-
-static void
-gth_metadata_provider_finalize (GObject *obj)
+gth_metadata_provider_real_write (GthMetadataProvider *self,
+ GthFileData *file_data,
+ const char *attributes)
{
- GthMetadataProvider *self;
-
- self = GTH_METADATA_PROVIDER (obj);
-
- g_free (self->priv->_readable_attributes);
- g_free (self->priv->_writable_attributes);
-
- G_OBJECT_CLASS (gth_metadata_provider_parent_class)->finalize (obj);
}
@@ -156,36 +71,11 @@ static void
gth_metadata_provider_class_init (GthMetadataProviderClass * klass)
{
gth_metadata_provider_parent_class = g_type_class_peek_parent (klass);
- g_type_class_add_private (klass, sizeof (GthMetadataProviderPrivate));
-
- G_OBJECT_CLASS (klass)->set_property = gth_metadata_provider_set_property;
- G_OBJECT_CLASS (klass)->get_property = gth_metadata_provider_get_property;
- G_OBJECT_CLASS (klass)->finalize = gth_metadata_provider_finalize;
+ GTH_METADATA_PROVIDER_CLASS (klass)->can_read = gth_metadata_provider_real_can_read;
+ GTH_METADATA_PROVIDER_CLASS (klass)->can_write = gth_metadata_provider_real_can_write;
GTH_METADATA_PROVIDER_CLASS (klass)->read = gth_metadata_provider_real_read;
GTH_METADATA_PROVIDER_CLASS (klass)->write = gth_metadata_provider_real_write;
-
- g_object_class_install_property (G_OBJECT_CLASS (klass),
- GTH_METADATA_PROVIDER_READABLE_ATTRIBUTES,
- g_param_spec_string ("readable-attributes",
- "readable-attributes",
- "readable-attributes",
- NULL,
- G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (G_OBJECT_CLASS (klass),
- GTH_METADATA_PROVIDER_WRITABLE_ATTRIBUTES,
- g_param_spec_string ("writable-attributes",
- "writable-attributes",
- "writable-attributes",
- NULL,
- G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
-}
-
-
-static void
-gth_metadata_provider_instance_init (GthMetadataProvider *self)
-{
- self->priv = GTH_METADATA_PROVIDER_GET_PRIVATE (self);
}
@@ -203,7 +93,7 @@ gth_metadata_provider_get_type (void)
NULL,
sizeof (GthMetadataProvider),
0,
- (GInstanceInitFunc) gth_metadata_provider_instance_init,
+ (GInstanceInitFunc) NULL,
NULL
};
gth_metadata_provider_type_id = g_type_register_static (G_TYPE_OBJECT, "GthMetadataProvider", &g_define_type_info, 0);
@@ -212,51 +102,21 @@ gth_metadata_provider_get_type (void)
}
-GthMetadataProvider *
-gth_metadata_provider_new (void)
-{
-
- return g_object_new (GTH_TYPE_METADATA_PROVIDER, NULL);
-}
-
-
-static gboolean
-attribute_matches_attributes (const char *attributes,
- char **attribute_v)
-{
- gboolean matches;
- int i;
-
- if (attributes == NULL)
- return FALSE;
-
- matches = FALSE;
- for (i = 0; ! matches && (attribute_v[i] != NULL); i++)
- matches = _g_file_attributes_matches (attributes, attribute_v[i]);
-
- return matches;
-}
-
-
gboolean
gth_metadata_provider_can_read (GthMetadataProvider *self,
+ const char *mime_type,
char **attribute_v)
{
- g_return_val_if_fail (self != NULL, FALSE);
- g_return_val_if_fail (attribute_v != NULL, FALSE);
-
- return attribute_matches_attributes (self->priv->_readable_attributes, attribute_v);
+ return GTH_METADATA_PROVIDER_GET_CLASS (self)->can_read (self, mime_type, attribute_v);
}
gboolean
gth_metadata_provider_can_write (GthMetadataProvider *self,
+ const char *mime_type,
char **attribute_v)
{
- g_return_val_if_fail (self != NULL, FALSE);
- g_return_val_if_fail (attribute_v != NULL, FALSE);
-
- return attribute_matches_attributes (self->priv->_writable_attributes, attribute_v);
+ return GTH_METADATA_PROVIDER_GET_CLASS (self)->can_write (self, mime_type, attribute_v);
}
@@ -326,34 +186,36 @@ static gpointer
read_metadata_thread (gpointer data)
{
QueryMetadataThreadData *rmtd = data;
+ GList *providers;
GList *scan;
gboolean cancelled = FALSE;
- for (scan = gth_main_get_all_metadata_providers (); ! cancelled && scan; scan = scan->next) {
- GthMetadataProvider *metadata_provider;
-
- metadata_provider = g_object_new (G_OBJECT_TYPE (scan->data), NULL);
+ providers = NULL;
+ for (scan = gth_main_get_all_metadata_providers (); scan; scan = scan->next)
+ providers = g_list_prepend (providers, g_object_new (G_OBJECT_TYPE (scan->data), NULL));
+ providers = g_list_reverse (providers);
- if (gth_metadata_provider_can_read (metadata_provider, rmtd->attributes_v)) {
- GList *scan_files;
+ for (scan = rmtd->files; scan; scan = scan->next) {
+ GthFileData *file_data = scan->data;
+ GList *scan_providers;
- for (scan_files = rmtd->files; scan_files; scan_files = scan_files->next) {
- GthFileData *file_data = scan_files->data;
+ g_mutex_lock (rmtd->mutex);
+ cancelled = rmtd->thread_done;
+ g_mutex_unlock (rmtd->mutex);
- g_mutex_lock (rmtd->mutex);
- cancelled = rmtd->thread_done;
- g_mutex_unlock (rmtd->mutex);
+ if (cancelled)
+ break;
- if (cancelled)
- break;
+ for (scan_providers = providers; scan_providers; scan_providers = scan_providers->next) {
+ GthMetadataProvider *metadata_provider = scan_providers->data;
+ if (gth_metadata_provider_can_read (metadata_provider, gth_file_data_get_mime_type (file_data), rmtd->attributes_v))
gth_metadata_provider_read (metadata_provider, file_data, rmtd->attributes);
- }
}
-
- g_object_unref (metadata_provider);
}
+ _g_object_list_unref (providers);
+
if (! cancelled)
for (scan = rmtd->files; scan; scan = scan->next) {
GthFileData *file_data = scan->data;
@@ -480,25 +342,36 @@ static gpointer
write_metadata_thread (gpointer data)
{
WriteMetadataThreadData *wmtd = data;
+ GList *providers;
GList *scan;
+ gboolean cancelled = FALSE;
- for (scan = gth_main_get_all_metadata_providers (); scan; scan = scan->next) {
- GthMetadataProvider *metadata_provider;
+ providers = NULL;
+ for (scan = gth_main_get_all_metadata_providers (); scan; scan = scan->next)
+ providers = g_list_prepend (providers, g_object_new (G_OBJECT_TYPE (scan->data), NULL));
+ providers = g_list_reverse (providers);
- metadata_provider = g_object_new (G_OBJECT_TYPE (scan->data), NULL);
+ for (scan = wmtd->files; scan; scan = scan->next) {
+ GthFileData *file_data = scan->data;
+ GList *scan_providers;
- if (gth_metadata_provider_can_write (metadata_provider, wmtd->attributes_v)) {
- GList *scan_files;
+ g_mutex_lock (wmtd->mutex);
+ cancelled = wmtd->thread_done;
+ g_mutex_unlock (wmtd->mutex);
- for (scan_files = wmtd->files; scan_files; scan_files = scan_files->next) {
- GthFileData *file_data = scan_files->data;
+ if (cancelled)
+ break;
+
+ for (scan_providers = providers; scan_providers; scan_providers = scan_providers->next) {
+ GthMetadataProvider *metadata_provider = scan_providers->data;
+
+ if (gth_metadata_provider_can_write (metadata_provider, gth_file_data_get_mime_type (file_data), wmtd->attributes_v))
gth_metadata_provider_write (metadata_provider, file_data, wmtd->attributes);
- }
}
-
- g_object_unref (metadata_provider);
}
+ _g_object_list_unref (providers);
+
g_mutex_lock (wmtd->mutex);
wmtd->thread_done = TRUE;
g_mutex_unlock (wmtd->mutex);
diff --git a/gthumb/gth-metadata-provider.h b/gthumb/gth-metadata-provider.h
index 5018b03..66f8647 100644
--- a/gthumb/gth-metadata-provider.h
+++ b/gthumb/gth-metadata-provider.h
@@ -39,28 +39,33 @@ G_BEGIN_DECLS
typedef struct _GthMetadataProvider GthMetadataProvider;
typedef struct _GthMetadataProviderClass GthMetadataProviderClass;
-typedef struct _GthMetadataProviderPrivate GthMetadataProviderPrivate;
struct _GthMetadataProvider {
GObject parent_instance;
- GthMetadataProviderPrivate *priv;
};
struct _GthMetadataProviderClass {
GObjectClass parent_class;
- void (*read) (GthMetadataProvider *self,
- GthFileData *file_data,
- const char *attributes);
- void (*write) (GthMetadataProvider *self,
- GthFileData *file_data,
- const char *attributes);
+ gboolean (*can_read) (GthMetadataProvider *self,
+ const char *mime_type,
+ char **attribute_v);
+ gboolean (*can_write) (GthMetadataProvider *self,
+ const char *mime_type,
+ char **attribute_v);
+ void (*read) (GthMetadataProvider *self,
+ GthFileData *file_data,
+ const char *attributes);
+ void (*write) (GthMetadataProvider *self,
+ GthFileData *file_data,
+ const char *attributes);
};
GType gth_metadata_provider_get_type (void);
-GthMetadataProvider * gth_metadata_provider_new (void);
gboolean gth_metadata_provider_can_read (GthMetadataProvider *self,
+ const char *mime_type,
char **attribute_v);
gboolean gth_metadata_provider_can_write (GthMetadataProvider *self,
+ const char *mime_type,
char **attribute_v);
void gth_metadata_provider_read (GthMetadataProvider *self,
GthFileData *file_data,
@@ -68,6 +73,7 @@ void gth_metadata_provider_read (GthMetadataProvider *
void gth_metadata_provider_write (GthMetadataProvider *self,
GthFileData *file_data,
const char *attributes);
+
void _g_query_metadata_async (GList *files, /* GthFileData * list */
const char *attributes,
GCancellable *cancellable,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]