summaryrefslogtreecommitdiff
path: root/src/photos/PhotoFileAdapter.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/photos/PhotoFileAdapter.c')
-rw-r--r--src/photos/PhotoFileAdapter.c1104
1 files changed, 1104 insertions, 0 deletions
diff --git a/src/photos/PhotoFileAdapter.c b/src/photos/PhotoFileAdapter.c
new file mode 100644
index 0000000..2f05603
--- /dev/null
+++ b/src/photos/PhotoFileAdapter.c
@@ -0,0 +1,1104 @@
+/* PhotoFileAdapter.c generated by valac 0.32.1, the Vala compiler
+ * generated from PhotoFileAdapter.vala, do not modify */
+
+/* Copyright 2016 Software Freedom Conservancy Inc.
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+/**/
+/* PhotoFileAdapter*/
+/**/
+/* PhotoFileAdapter (and its immediate children, PhotoFileReader and PhotoFileWriter) are drivers*/
+/* hiding details of reading and writing image files and their metadata. They should keep*/
+/* minimal state beyond the filename, if any stat at all. In particular, they should avoid caching*/
+/* values, especially the readers, as writers may be created at any time and invalidate that*/
+/* information, unless the readers monitor the file for these changes.*/
+/**/
+/* PhotoFileAdapters should be entirely thread-safe. They are not, however, responsible for*/
+/* atomicity on the filesystem.*/
+/**/
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gio/gio.h>
+#include <glib/gstdio.h>
+#include <gdk-pixbuf/gdk-pixbuf.h>
+#include <gobject/gvaluecollector.h>
+
+
+#define TYPE_PHOTO_FILE_ADAPTER (photo_file_adapter_get_type ())
+#define PHOTO_FILE_ADAPTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_PHOTO_FILE_ADAPTER, PhotoFileAdapter))
+#define PHOTO_FILE_ADAPTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_PHOTO_FILE_ADAPTER, PhotoFileAdapterClass))
+#define IS_PHOTO_FILE_ADAPTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_PHOTO_FILE_ADAPTER))
+#define IS_PHOTO_FILE_ADAPTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_PHOTO_FILE_ADAPTER))
+#define PHOTO_FILE_ADAPTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_PHOTO_FILE_ADAPTER, PhotoFileAdapterClass))
+
+typedef struct _PhotoFileAdapter PhotoFileAdapter;
+typedef struct _PhotoFileAdapterClass PhotoFileAdapterClass;
+typedef struct _PhotoFileAdapterPrivate PhotoFileAdapterPrivate;
+
+#define TYPE_PHOTO_FILE_FORMAT (photo_file_format_get_type ())
+#define _g_free0(var) (var = (g_free (var), NULL))
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+typedef struct _ParamSpecPhotoFileAdapter ParamSpecPhotoFileAdapter;
+
+#define TYPE_PHOTO_FILE_READER (photo_file_reader_get_type ())
+#define PHOTO_FILE_READER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_PHOTO_FILE_READER, PhotoFileReader))
+#define PHOTO_FILE_READER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_PHOTO_FILE_READER, PhotoFileReaderClass))
+#define IS_PHOTO_FILE_READER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_PHOTO_FILE_READER))
+#define IS_PHOTO_FILE_READER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_PHOTO_FILE_READER))
+#define PHOTO_FILE_READER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_PHOTO_FILE_READER, PhotoFileReaderClass))
+
+typedef struct _PhotoFileReader PhotoFileReader;
+typedef struct _PhotoFileReaderClass PhotoFileReaderClass;
+typedef struct _PhotoFileReaderPrivate PhotoFileReaderPrivate;
+
+#define TYPE_MEDIA_METADATA (media_metadata_get_type ())
+#define MEDIA_METADATA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MEDIA_METADATA, MediaMetadata))
+#define MEDIA_METADATA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_MEDIA_METADATA, MediaMetadataClass))
+#define IS_MEDIA_METADATA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MEDIA_METADATA))
+#define IS_MEDIA_METADATA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_MEDIA_METADATA))
+#define MEDIA_METADATA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_MEDIA_METADATA, MediaMetadataClass))
+
+typedef struct _MediaMetadata MediaMetadata;
+typedef struct _MediaMetadataClass MediaMetadataClass;
+
+#define TYPE_PHOTO_METADATA (photo_metadata_get_type ())
+#define PHOTO_METADATA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_PHOTO_METADATA, PhotoMetadata))
+#define PHOTO_METADATA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_PHOTO_METADATA, PhotoMetadataClass))
+#define IS_PHOTO_METADATA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_PHOTO_METADATA))
+#define IS_PHOTO_METADATA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_PHOTO_METADATA))
+#define PHOTO_METADATA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_PHOTO_METADATA, PhotoMetadataClass))
+
+typedef struct _PhotoMetadata PhotoMetadata;
+typedef struct _PhotoMetadataClass PhotoMetadataClass;
+
+#define TYPE_DIMENSIONS (dimensions_get_type ())
+typedef struct _Dimensions Dimensions;
+
+#define TYPE_PHOTO_FILE_WRITER (photo_file_writer_get_type ())
+#define PHOTO_FILE_WRITER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_PHOTO_FILE_WRITER, PhotoFileWriter))
+#define PHOTO_FILE_WRITER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_PHOTO_FILE_WRITER, PhotoFileWriterClass))
+#define IS_PHOTO_FILE_WRITER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_PHOTO_FILE_WRITER))
+#define IS_PHOTO_FILE_WRITER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_PHOTO_FILE_WRITER))
+#define PHOTO_FILE_WRITER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_PHOTO_FILE_WRITER, PhotoFileWriterClass))
+
+typedef struct _PhotoFileWriter PhotoFileWriter;
+typedef struct _PhotoFileWriterClass PhotoFileWriterClass;
+#define _photo_file_adapter_unref0(var) ((var == NULL) ? NULL : (var = (photo_file_adapter_unref (var), NULL)))
+
+#define TYPE_PHOTO_FILE_METADATA_WRITER (photo_file_metadata_writer_get_type ())
+#define PHOTO_FILE_METADATA_WRITER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_PHOTO_FILE_METADATA_WRITER, PhotoFileMetadataWriter))
+#define PHOTO_FILE_METADATA_WRITER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_PHOTO_FILE_METADATA_WRITER, PhotoFileMetadataWriterClass))
+#define IS_PHOTO_FILE_METADATA_WRITER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_PHOTO_FILE_METADATA_WRITER))
+#define IS_PHOTO_FILE_METADATA_WRITER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_PHOTO_FILE_METADATA_WRITER))
+#define PHOTO_FILE_METADATA_WRITER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_PHOTO_FILE_METADATA_WRITER, PhotoFileMetadataWriterClass))
+
+typedef struct _PhotoFileMetadataWriter PhotoFileMetadataWriter;
+typedef struct _PhotoFileMetadataWriterClass PhotoFileMetadataWriterClass;
+typedef struct _PhotoFileWriterPrivate PhotoFileWriterPrivate;
+
+#define JPEG_TYPE_QUALITY (jpeg_quality_get_type ())
+typedef struct _PhotoFileMetadataWriterPrivate PhotoFileMetadataWriterPrivate;
+
+struct _PhotoFileAdapter {
+ GTypeInstance parent_instance;
+ volatile int ref_count;
+ PhotoFileAdapterPrivate * priv;
+};
+
+struct _PhotoFileAdapterClass {
+ GTypeClass parent_class;
+ void (*finalize) (PhotoFileAdapter *self);
+};
+
+typedef enum {
+ PHOTO_FILE_FORMAT_JFIF,
+ PHOTO_FILE_FORMAT_RAW,
+ PHOTO_FILE_FORMAT_PNG,
+ PHOTO_FILE_FORMAT_TIFF,
+ PHOTO_FILE_FORMAT_BMP,
+ PHOTO_FILE_FORMAT_UNKNOWN
+} PhotoFileFormat;
+
+struct _PhotoFileAdapterPrivate {
+ gchar* filepath;
+ PhotoFileFormat file_format;
+ GFile* file;
+ GRecMutex __lock_file;
+};
+
+struct _ParamSpecPhotoFileAdapter {
+ GParamSpec parent_instance;
+};
+
+struct _Dimensions {
+ gint width;
+ gint height;
+};
+
+struct _PhotoFileReader {
+ PhotoFileAdapter parent_instance;
+ PhotoFileReaderPrivate * priv;
+};
+
+struct _PhotoFileReaderClass {
+ PhotoFileAdapterClass parent_class;
+ PhotoMetadata* (*read_metadata) (PhotoFileReader* self, GError** error);
+ GdkPixbuf* (*unscaled_read) (PhotoFileReader* self, GError** error);
+ GdkPixbuf* (*scaled_read) (PhotoFileReader* self, Dimensions* full, Dimensions* scaled, GError** error);
+};
+
+typedef enum {
+ PHOTO_FORMAT_ERROR_READ_ONLY
+} PhotoFormatError;
+#define PHOTO_FORMAT_ERROR photo_format_error_quark ()
+typedef enum {
+ JPEG_QUALITY_LOW = 50,
+ JPEG_QUALITY_MEDIUM = 75,
+ JPEG_QUALITY_HIGH = 90,
+ JPEG_QUALITY_MAXIMUM = 100
+} JpegQuality;
+
+struct _PhotoFileWriter {
+ PhotoFileAdapter parent_instance;
+ PhotoFileWriterPrivate * priv;
+};
+
+struct _PhotoFileWriterClass {
+ PhotoFileAdapterClass parent_class;
+ void (*write) (PhotoFileWriter* self, GdkPixbuf* pixbuf, JpegQuality quality, GError** error);
+};
+
+struct _PhotoFileMetadataWriter {
+ PhotoFileAdapter parent_instance;
+ PhotoFileMetadataWriterPrivate * priv;
+};
+
+struct _PhotoFileMetadataWriterClass {
+ PhotoFileAdapterClass parent_class;
+ void (*write_metadata) (PhotoFileMetadataWriter* self, PhotoMetadata* metadata, GError** error);
+};
+
+
+static gpointer photo_file_adapter_parent_class = NULL;
+static gpointer photo_file_reader_parent_class = NULL;
+static gpointer photo_file_writer_parent_class = NULL;
+static gpointer photo_file_metadata_writer_parent_class = NULL;
+
+gpointer photo_file_adapter_ref (gpointer instance);
+void photo_file_adapter_unref (gpointer instance);
+GParamSpec* param_spec_photo_file_adapter (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_photo_file_adapter (GValue* value, gpointer v_object);
+void value_take_photo_file_adapter (GValue* value, gpointer v_object);
+gpointer value_get_photo_file_adapter (const GValue* value);
+GType photo_file_adapter_get_type (void) G_GNUC_CONST;
+GType photo_file_format_get_type (void) G_GNUC_CONST;
+#define PHOTO_FILE_ADAPTER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_PHOTO_FILE_ADAPTER, PhotoFileAdapterPrivate))
+enum {
+ PHOTO_FILE_ADAPTER_DUMMY_PROPERTY
+};
+PhotoFileAdapter* photo_file_adapter_construct (GType object_type, const gchar* filepath, PhotoFileFormat file_format);
+gboolean photo_file_adapter_file_exists (PhotoFileAdapter* self);
+gchar* photo_file_adapter_get_filepath (PhotoFileAdapter* self);
+GFile* photo_file_adapter_get_file (PhotoFileAdapter* self);
+PhotoFileFormat photo_file_adapter_get_file_format (PhotoFileAdapter* self);
+static void photo_file_adapter_finalize (PhotoFileAdapter* obj);
+GType photo_file_reader_get_type (void) G_GNUC_CONST;
+gpointer media_metadata_ref (gpointer instance);
+void media_metadata_unref (gpointer instance);
+GParamSpec* param_spec_media_metadata (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_media_metadata (GValue* value, gpointer v_object);
+void value_take_media_metadata (GValue* value, gpointer v_object);
+gpointer value_get_media_metadata (const GValue* value);
+GType media_metadata_get_type (void) G_GNUC_CONST;
+GType photo_metadata_get_type (void) G_GNUC_CONST;
+GType dimensions_get_type (void) G_GNUC_CONST;
+Dimensions* dimensions_dup (const Dimensions* self);
+void dimensions_free (Dimensions* self);
+enum {
+ PHOTO_FILE_READER_DUMMY_PROPERTY
+};
+PhotoFileReader* photo_file_reader_construct (GType object_type, const gchar* filepath, PhotoFileFormat file_format);
+GType photo_file_writer_get_type (void) G_GNUC_CONST;
+GQuark photo_format_error_quark (void);
+PhotoFileWriter* photo_file_reader_create_writer (PhotoFileReader* self, GError** error);
+PhotoFileWriter* photo_file_format_create_writer (PhotoFileFormat self, const gchar* filepath, GError** error);
+GType photo_file_metadata_writer_get_type (void) G_GNUC_CONST;
+PhotoFileMetadataWriter* photo_file_reader_create_metadata_writer (PhotoFileReader* self, GError** error);
+PhotoFileMetadataWriter* photo_file_format_create_metadata_writer (PhotoFileFormat self, const gchar* filepath, GError** error);
+PhotoMetadata* photo_file_reader_read_metadata (PhotoFileReader* self, GError** error);
+static PhotoMetadata* photo_file_reader_real_read_metadata (PhotoFileReader* self, GError** error);
+GdkPixbuf* photo_file_reader_unscaled_read (PhotoFileReader* self, GError** error);
+static GdkPixbuf* photo_file_reader_real_unscaled_read (PhotoFileReader* self, GError** error);
+GdkPixbuf* photo_file_reader_scaled_read (PhotoFileReader* self, Dimensions* full, Dimensions* scaled, GError** error);
+static GdkPixbuf* photo_file_reader_real_scaled_read (PhotoFileReader* self, Dimensions* full, Dimensions* scaled, GError** error);
+GdkPixbuf* resize_pixbuf (GdkPixbuf* pixbuf, Dimensions* resized, GdkInterpType interp);
+GType jpeg_quality_get_type (void) G_GNUC_CONST;
+enum {
+ PHOTO_FILE_WRITER_DUMMY_PROPERTY
+};
+PhotoFileWriter* photo_file_writer_construct (GType object_type, const gchar* filepath, PhotoFileFormat file_format);
+PhotoFileReader* photo_file_writer_create_reader (PhotoFileWriter* self);
+PhotoFileReader* photo_file_format_create_reader (PhotoFileFormat self, const gchar* filepath);
+void photo_file_writer_write (PhotoFileWriter* self, GdkPixbuf* pixbuf, JpegQuality quality, GError** error);
+static void photo_file_writer_real_write (PhotoFileWriter* self, GdkPixbuf* pixbuf, JpegQuality quality, GError** error);
+enum {
+ PHOTO_FILE_METADATA_WRITER_DUMMY_PROPERTY
+};
+PhotoFileMetadataWriter* photo_file_metadata_writer_construct (GType object_type, const gchar* filepath, PhotoFileFormat file_format);
+PhotoFileReader* photo_file_metadata_writer_create_reader (PhotoFileMetadataWriter* self);
+void photo_file_metadata_writer_write_metadata (PhotoFileMetadataWriter* self, PhotoMetadata* metadata, GError** error);
+static void photo_file_metadata_writer_real_write_metadata (PhotoFileMetadataWriter* self, PhotoMetadata* metadata, GError** error);
+
+
+PhotoFileAdapter* photo_file_adapter_construct (GType object_type, const gchar* filepath, PhotoFileFormat file_format) {
+ PhotoFileAdapter* self = NULL;
+ const gchar* _tmp0_ = NULL;
+ gchar* _tmp1_ = NULL;
+ PhotoFileFormat _tmp2_ = 0;
+#line 25 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_val_if_fail (filepath != NULL, NULL);
+#line 25 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ self = (PhotoFileAdapter*) g_type_create_instance (object_type);
+#line 26 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp0_ = filepath;
+#line 26 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp1_ = g_strdup (_tmp0_);
+#line 26 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _g_free0 (self->priv->filepath);
+#line 26 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ self->priv->filepath = _tmp1_;
+#line 27 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp2_ = file_format;
+#line 27 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ self->priv->file_format = _tmp2_;
+#line 25 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return self;
+#line 282 "PhotoFileAdapter.c"
+}
+
+
+gboolean photo_file_adapter_file_exists (PhotoFileAdapter* self) {
+ gboolean result = FALSE;
+ const gchar* _tmp0_ = NULL;
+ gboolean _tmp1_ = FALSE;
+#line 30 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_val_if_fail (IS_PHOTO_FILE_ADAPTER (self), FALSE);
+#line 31 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp0_ = self->priv->filepath;
+#line 31 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp1_ = g_file_test (_tmp0_, G_FILE_TEST_IS_REGULAR);
+#line 31 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ result = _tmp1_;
+#line 31 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return result;
+#line 300 "PhotoFileAdapter.c"
+}
+
+
+gchar* photo_file_adapter_get_filepath (PhotoFileAdapter* self) {
+ gchar* result = NULL;
+ const gchar* _tmp0_ = NULL;
+ gchar* _tmp1_ = NULL;
+#line 34 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_val_if_fail (IS_PHOTO_FILE_ADAPTER (self), NULL);
+#line 35 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp0_ = self->priv->filepath;
+#line 35 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp1_ = g_strdup (_tmp0_);
+#line 35 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ result = _tmp1_;
+#line 35 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return result;
+#line 318 "PhotoFileAdapter.c"
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+#line 44 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return self ? g_object_ref (self) : NULL;
+#line 325 "PhotoFileAdapter.c"
+}
+
+
+GFile* photo_file_adapter_get_file (PhotoFileAdapter* self) {
+ GFile* result = NULL;
+ GFile* _result_ = NULL;
+ GError * _inner_error_ = NULL;
+#line 38 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_val_if_fail (IS_PHOTO_FILE_ADAPTER (self), NULL);
+#line 335 "PhotoFileAdapter.c"
+ {
+ GFile* _tmp0_ = NULL;
+#line 40 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp0_ = self->priv->file;
+#line 40 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_rec_mutex_lock (&self->priv->__lock_file);
+#line 342 "PhotoFileAdapter.c"
+ {
+ GFile* _tmp1_ = NULL;
+ GFile* _tmp4_ = NULL;
+ GFile* _tmp5_ = NULL;
+#line 41 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp1_ = self->priv->file;
+#line 41 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ if (_tmp1_ == NULL) {
+#line 351 "PhotoFileAdapter.c"
+ const gchar* _tmp2_ = NULL;
+ GFile* _tmp3_ = NULL;
+#line 42 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp2_ = self->priv->filepath;
+#line 42 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp3_ = g_file_new_for_path (_tmp2_);
+#line 42 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _g_object_unref0 (self->priv->file);
+#line 42 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ self->priv->file = _tmp3_;
+#line 362 "PhotoFileAdapter.c"
+ }
+#line 44 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp4_ = self->priv->file;
+#line 44 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp5_ = _g_object_ref0 (_tmp4_);
+#line 44 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _g_object_unref0 (_result_);
+#line 44 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _result_ = _tmp5_;
+#line 372 "PhotoFileAdapter.c"
+ }
+ __finally22:
+ {
+ GFile* _tmp6_ = NULL;
+#line 40 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp6_ = self->priv->file;
+#line 40 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_rec_mutex_unlock (&self->priv->__lock_file);
+#line 381 "PhotoFileAdapter.c"
+ }
+#line 40 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ if (G_UNLIKELY (_inner_error_ != NULL)) {
+#line 40 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _g_object_unref0 (_result_);
+#line 40 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+#line 40 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_clear_error (&_inner_error_);
+#line 40 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return NULL;
+#line 393 "PhotoFileAdapter.c"
+ }
+ }
+#line 47 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ result = _result_;
+#line 47 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return result;
+#line 400 "PhotoFileAdapter.c"
+}
+
+
+PhotoFileFormat photo_file_adapter_get_file_format (PhotoFileAdapter* self) {
+ PhotoFileFormat result = 0;
+ PhotoFileFormat _tmp0_ = 0;
+#line 50 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_val_if_fail (IS_PHOTO_FILE_ADAPTER (self), 0);
+#line 51 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp0_ = self->priv->file_format;
+#line 51 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ result = _tmp0_;
+#line 51 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return result;
+#line 415 "PhotoFileAdapter.c"
+}
+
+
+static void value_photo_file_adapter_init (GValue* value) {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ value->data[0].v_pointer = NULL;
+#line 422 "PhotoFileAdapter.c"
+}
+
+
+static void value_photo_file_adapter_free_value (GValue* value) {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ if (value->data[0].v_pointer) {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ photo_file_adapter_unref (value->data[0].v_pointer);
+#line 431 "PhotoFileAdapter.c"
+ }
+}
+
+
+static void value_photo_file_adapter_copy_value (const GValue* src_value, GValue* dest_value) {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ if (src_value->data[0].v_pointer) {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ dest_value->data[0].v_pointer = photo_file_adapter_ref (src_value->data[0].v_pointer);
+#line 441 "PhotoFileAdapter.c"
+ } else {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ dest_value->data[0].v_pointer = NULL;
+#line 445 "PhotoFileAdapter.c"
+ }
+}
+
+
+static gpointer value_photo_file_adapter_peek_pointer (const GValue* value) {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return value->data[0].v_pointer;
+#line 453 "PhotoFileAdapter.c"
+}
+
+
+static gchar* value_photo_file_adapter_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ if (collect_values[0].v_pointer) {
+#line 460 "PhotoFileAdapter.c"
+ PhotoFileAdapter* object;
+ object = collect_values[0].v_pointer;
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ if (object->parent_instance.g_class == NULL) {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 467 "PhotoFileAdapter.c"
+ } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+#line 471 "PhotoFileAdapter.c"
+ }
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ value->data[0].v_pointer = photo_file_adapter_ref (object);
+#line 475 "PhotoFileAdapter.c"
+ } else {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ value->data[0].v_pointer = NULL;
+#line 479 "PhotoFileAdapter.c"
+ }
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return NULL;
+#line 483 "PhotoFileAdapter.c"
+}
+
+
+static gchar* value_photo_file_adapter_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+ PhotoFileAdapter** object_p;
+ object_p = collect_values[0].v_pointer;
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ if (!object_p) {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+#line 494 "PhotoFileAdapter.c"
+ }
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ if (!value->data[0].v_pointer) {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ *object_p = NULL;
+#line 500 "PhotoFileAdapter.c"
+ } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ *object_p = value->data[0].v_pointer;
+#line 504 "PhotoFileAdapter.c"
+ } else {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ *object_p = photo_file_adapter_ref (value->data[0].v_pointer);
+#line 508 "PhotoFileAdapter.c"
+ }
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return NULL;
+#line 512 "PhotoFileAdapter.c"
+}
+
+
+GParamSpec* param_spec_photo_file_adapter (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
+ ParamSpecPhotoFileAdapter* spec;
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_val_if_fail (g_type_is_a (object_type, TYPE_PHOTO_FILE_ADAPTER), NULL);
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ G_PARAM_SPEC (spec)->value_type = object_type;
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return G_PARAM_SPEC (spec);
+#line 526 "PhotoFileAdapter.c"
+}
+
+
+gpointer value_get_photo_file_adapter (const GValue* value) {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_PHOTO_FILE_ADAPTER), NULL);
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return value->data[0].v_pointer;
+#line 535 "PhotoFileAdapter.c"
+}
+
+
+void value_set_photo_file_adapter (GValue* value, gpointer v_object) {
+ PhotoFileAdapter* old;
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_PHOTO_FILE_ADAPTER));
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ old = value->data[0].v_pointer;
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ if (v_object) {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_PHOTO_FILE_ADAPTER));
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ value->data[0].v_pointer = v_object;
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ photo_file_adapter_ref (value->data[0].v_pointer);
+#line 555 "PhotoFileAdapter.c"
+ } else {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ value->data[0].v_pointer = NULL;
+#line 559 "PhotoFileAdapter.c"
+ }
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ if (old) {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ photo_file_adapter_unref (old);
+#line 565 "PhotoFileAdapter.c"
+ }
+}
+
+
+void value_take_photo_file_adapter (GValue* value, gpointer v_object) {
+ PhotoFileAdapter* old;
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_PHOTO_FILE_ADAPTER));
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ old = value->data[0].v_pointer;
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ if (v_object) {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_PHOTO_FILE_ADAPTER));
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ value->data[0].v_pointer = v_object;
+#line 584 "PhotoFileAdapter.c"
+ } else {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ value->data[0].v_pointer = NULL;
+#line 588 "PhotoFileAdapter.c"
+ }
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ if (old) {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ photo_file_adapter_unref (old);
+#line 594 "PhotoFileAdapter.c"
+ }
+}
+
+
+static void photo_file_adapter_class_init (PhotoFileAdapterClass * klass) {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ photo_file_adapter_parent_class = g_type_class_peek_parent (klass);
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ ((PhotoFileAdapterClass *) klass)->finalize = photo_file_adapter_finalize;
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_type_class_add_private (klass, sizeof (PhotoFileAdapterPrivate));
+#line 606 "PhotoFileAdapter.c"
+}
+
+
+static void photo_file_adapter_instance_init (PhotoFileAdapter * self) {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ self->priv = PHOTO_FILE_ADAPTER_GET_PRIVATE (self);
+#line 23 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_rec_mutex_init (&self->priv->__lock_file);
+#line 23 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ self->priv->file = NULL;
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ self->ref_count = 1;
+#line 619 "PhotoFileAdapter.c"
+}
+
+
+static void photo_file_adapter_finalize (PhotoFileAdapter* obj) {
+ PhotoFileAdapter * self;
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_PHOTO_FILE_ADAPTER, PhotoFileAdapter);
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_signal_handlers_destroy (self);
+#line 21 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _g_free0 (self->priv->filepath);
+#line 23 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_rec_mutex_clear (&self->priv->__lock_file);
+#line 23 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _g_object_unref0 (self->priv->file);
+#line 635 "PhotoFileAdapter.c"
+}
+
+
+GType photo_file_adapter_get_type (void) {
+ static volatile gsize photo_file_adapter_type_id__volatile = 0;
+ if (g_once_init_enter (&photo_file_adapter_type_id__volatile)) {
+ static const GTypeValueTable g_define_type_value_table = { value_photo_file_adapter_init, value_photo_file_adapter_free_value, value_photo_file_adapter_copy_value, value_photo_file_adapter_peek_pointer, "p", value_photo_file_adapter_collect_value, "p", value_photo_file_adapter_lcopy_value };
+ static const GTypeInfo g_define_type_info = { sizeof (PhotoFileAdapterClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) photo_file_adapter_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (PhotoFileAdapter), 0, (GInstanceInitFunc) photo_file_adapter_instance_init, &g_define_type_value_table };
+ static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+ GType photo_file_adapter_type_id;
+ photo_file_adapter_type_id = g_type_register_fundamental (g_type_fundamental_next (), "PhotoFileAdapter", &g_define_type_info, &g_define_type_fundamental_info, G_TYPE_FLAG_ABSTRACT);
+ g_once_init_leave (&photo_file_adapter_type_id__volatile, photo_file_adapter_type_id);
+ }
+ return photo_file_adapter_type_id__volatile;
+}
+
+
+gpointer photo_file_adapter_ref (gpointer instance) {
+ PhotoFileAdapter* self;
+ self = instance;
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_atomic_int_inc (&self->ref_count);
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return instance;
+#line 660 "PhotoFileAdapter.c"
+}
+
+
+void photo_file_adapter_unref (gpointer instance) {
+ PhotoFileAdapter* self;
+ self = instance;
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ if (g_atomic_int_dec_and_test (&self->ref_count)) {
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ PHOTO_FILE_ADAPTER_GET_CLASS (self)->finalize (self);
+#line 20 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_type_free_instance ((GTypeInstance *) self);
+#line 673 "PhotoFileAdapter.c"
+ }
+}
+
+
+PhotoFileReader* photo_file_reader_construct (GType object_type, const gchar* filepath, PhotoFileFormat file_format) {
+ PhotoFileReader* self = NULL;
+ const gchar* _tmp0_ = NULL;
+ PhotoFileFormat _tmp1_ = 0;
+#line 60 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_val_if_fail (filepath != NULL, NULL);
+#line 61 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp0_ = filepath;
+#line 61 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp1_ = file_format;
+#line 61 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ self = (PhotoFileReader*) photo_file_adapter_construct (object_type, _tmp0_, _tmp1_);
+#line 60 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return self;
+#line 692 "PhotoFileAdapter.c"
+}
+
+
+PhotoFileWriter* photo_file_reader_create_writer (PhotoFileReader* self, GError** error) {
+ PhotoFileWriter* result = NULL;
+ PhotoFileWriter* _tmp0_ = NULL;
+ PhotoFileFormat _tmp1_ = 0;
+ gchar* _tmp2_ = NULL;
+ gchar* _tmp3_ = NULL;
+ PhotoFileWriter* _tmp4_ = NULL;
+ PhotoFileWriter* _tmp5_ = NULL;
+ PhotoFileWriter* _tmp6_ = NULL;
+ GError * _inner_error_ = NULL;
+#line 64 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_val_if_fail (IS_PHOTO_FILE_READER (self), NULL);
+#line 65 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp1_ = photo_file_adapter_get_file_format (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_PHOTO_FILE_ADAPTER, PhotoFileAdapter));
+#line 65 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp2_ = photo_file_adapter_get_filepath (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_PHOTO_FILE_ADAPTER, PhotoFileAdapter));
+#line 65 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp3_ = _tmp2_;
+#line 65 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp4_ = photo_file_format_create_writer (_tmp1_, _tmp3_, &_inner_error_);
+#line 65 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp5_ = _tmp4_;
+#line 65 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _g_free0 (_tmp3_);
+#line 65 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp0_ = _tmp5_;
+#line 65 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ if (G_UNLIKELY (_inner_error_ != NULL)) {
+#line 65 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ if (_inner_error_->domain == PHOTO_FORMAT_ERROR) {
+#line 65 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_propagate_error (error, _inner_error_);
+#line 65 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return NULL;
+#line 730 "PhotoFileAdapter.c"
+ } else {
+#line 65 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+#line 65 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_clear_error (&_inner_error_);
+#line 65 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return NULL;
+#line 738 "PhotoFileAdapter.c"
+ }
+ }
+#line 65 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp6_ = _tmp0_;
+#line 65 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp0_ = NULL;
+#line 65 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ result = _tmp6_;
+#line 65 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _photo_file_adapter_unref0 (_tmp0_);
+#line 65 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return result;
+#line 751 "PhotoFileAdapter.c"
+}
+
+
+PhotoFileMetadataWriter* photo_file_reader_create_metadata_writer (PhotoFileReader* self, GError** error) {
+ PhotoFileMetadataWriter* result = NULL;
+ PhotoFileMetadataWriter* _tmp0_ = NULL;
+ PhotoFileFormat _tmp1_ = 0;
+ gchar* _tmp2_ = NULL;
+ gchar* _tmp3_ = NULL;
+ PhotoFileMetadataWriter* _tmp4_ = NULL;
+ PhotoFileMetadataWriter* _tmp5_ = NULL;
+ PhotoFileMetadataWriter* _tmp6_ = NULL;
+ GError * _inner_error_ = NULL;
+#line 68 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_val_if_fail (IS_PHOTO_FILE_READER (self), NULL);
+#line 69 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp1_ = photo_file_adapter_get_file_format (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_PHOTO_FILE_ADAPTER, PhotoFileAdapter));
+#line 69 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp2_ = photo_file_adapter_get_filepath (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_PHOTO_FILE_ADAPTER, PhotoFileAdapter));
+#line 69 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp3_ = _tmp2_;
+#line 69 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp4_ = photo_file_format_create_metadata_writer (_tmp1_, _tmp3_, &_inner_error_);
+#line 69 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp5_ = _tmp4_;
+#line 69 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _g_free0 (_tmp3_);
+#line 69 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp0_ = _tmp5_;
+#line 69 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ if (G_UNLIKELY (_inner_error_ != NULL)) {
+#line 69 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ if (_inner_error_->domain == PHOTO_FORMAT_ERROR) {
+#line 69 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_propagate_error (error, _inner_error_);
+#line 69 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return NULL;
+#line 789 "PhotoFileAdapter.c"
+ } else {
+#line 69 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+#line 69 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_clear_error (&_inner_error_);
+#line 69 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return NULL;
+#line 797 "PhotoFileAdapter.c"
+ }
+ }
+#line 69 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp6_ = _tmp0_;
+#line 69 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp0_ = NULL;
+#line 69 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ result = _tmp6_;
+#line 69 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _photo_file_adapter_unref0 (_tmp0_);
+#line 69 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return result;
+#line 810 "PhotoFileAdapter.c"
+}
+
+
+static PhotoMetadata* photo_file_reader_real_read_metadata (PhotoFileReader* self, GError** error) {
+#line 72 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_critical ("Type `%s' does not implement abstract method `photo_file_reader_read_metadata'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 72 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return NULL;
+#line 819 "PhotoFileAdapter.c"
+}
+
+
+PhotoMetadata* photo_file_reader_read_metadata (PhotoFileReader* self, GError** error) {
+#line 72 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_val_if_fail (IS_PHOTO_FILE_READER (self), NULL);
+#line 72 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return PHOTO_FILE_READER_GET_CLASS (self)->read_metadata (self, error);
+#line 828 "PhotoFileAdapter.c"
+}
+
+
+static GdkPixbuf* photo_file_reader_real_unscaled_read (PhotoFileReader* self, GError** error) {
+#line 74 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_critical ("Type `%s' does not implement abstract method `photo_file_reader_unscaled_read'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 74 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return NULL;
+#line 837 "PhotoFileAdapter.c"
+}
+
+
+GdkPixbuf* photo_file_reader_unscaled_read (PhotoFileReader* self, GError** error) {
+#line 74 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_val_if_fail (IS_PHOTO_FILE_READER (self), NULL);
+#line 74 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return PHOTO_FILE_READER_GET_CLASS (self)->unscaled_read (self, error);
+#line 846 "PhotoFileAdapter.c"
+}
+
+
+static GdkPixbuf* photo_file_reader_real_scaled_read (PhotoFileReader* self, Dimensions* full, Dimensions* scaled, GError** error) {
+ GdkPixbuf* result = NULL;
+ GdkPixbuf* _tmp0_ = NULL;
+ GdkPixbuf* _tmp1_ = NULL;
+ Dimensions _tmp2_ = {0};
+ GdkPixbuf* _tmp3_ = NULL;
+ GError * _inner_error_ = NULL;
+#line 76 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_val_if_fail (full != NULL, NULL);
+#line 76 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_val_if_fail (scaled != NULL, NULL);
+#line 77 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp1_ = photo_file_reader_unscaled_read (self, &_inner_error_);
+#line 77 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp0_ = _tmp1_;
+#line 77 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ if (G_UNLIKELY (_inner_error_ != NULL)) {
+#line 77 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_propagate_error (error, _inner_error_);
+#line 77 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return NULL;
+#line 871 "PhotoFileAdapter.c"
+ }
+#line 77 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp2_ = *scaled;
+#line 77 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp3_ = resize_pixbuf (_tmp0_, &_tmp2_, GDK_INTERP_BILINEAR);
+#line 77 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ result = _tmp3_;
+#line 77 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _g_object_unref0 (_tmp0_);
+#line 77 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return result;
+#line 883 "PhotoFileAdapter.c"
+}
+
+
+GdkPixbuf* photo_file_reader_scaled_read (PhotoFileReader* self, Dimensions* full, Dimensions* scaled, GError** error) {
+#line 76 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_val_if_fail (IS_PHOTO_FILE_READER (self), NULL);
+#line 76 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return PHOTO_FILE_READER_GET_CLASS (self)->scaled_read (self, full, scaled, error);
+#line 892 "PhotoFileAdapter.c"
+}
+
+
+static void photo_file_reader_class_init (PhotoFileReaderClass * klass) {
+#line 59 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ photo_file_reader_parent_class = g_type_class_peek_parent (klass);
+#line 59 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ ((PhotoFileReaderClass *) klass)->read_metadata = photo_file_reader_real_read_metadata;
+#line 59 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ ((PhotoFileReaderClass *) klass)->unscaled_read = photo_file_reader_real_unscaled_read;
+#line 59 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ ((PhotoFileReaderClass *) klass)->scaled_read = photo_file_reader_real_scaled_read;
+#line 905 "PhotoFileAdapter.c"
+}
+
+
+static void photo_file_reader_instance_init (PhotoFileReader * self) {
+}
+
+
+GType photo_file_reader_get_type (void) {
+ static volatile gsize photo_file_reader_type_id__volatile = 0;
+ if (g_once_init_enter (&photo_file_reader_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (PhotoFileReaderClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) photo_file_reader_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (PhotoFileReader), 0, (GInstanceInitFunc) photo_file_reader_instance_init, NULL };
+ GType photo_file_reader_type_id;
+ photo_file_reader_type_id = g_type_register_static (TYPE_PHOTO_FILE_ADAPTER, "PhotoFileReader", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
+ g_once_init_leave (&photo_file_reader_type_id__volatile, photo_file_reader_type_id);
+ }
+ return photo_file_reader_type_id__volatile;
+}
+
+
+PhotoFileWriter* photo_file_writer_construct (GType object_type, const gchar* filepath, PhotoFileFormat file_format) {
+ PhotoFileWriter* self = NULL;
+ const gchar* _tmp0_ = NULL;
+ PhotoFileFormat _tmp1_ = 0;
+#line 86 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_val_if_fail (filepath != NULL, NULL);
+#line 87 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp0_ = filepath;
+#line 87 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp1_ = file_format;
+#line 87 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ self = (PhotoFileWriter*) photo_file_adapter_construct (object_type, _tmp0_, _tmp1_);
+#line 86 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return self;
+#line 939 "PhotoFileAdapter.c"
+}
+
+
+PhotoFileReader* photo_file_writer_create_reader (PhotoFileWriter* self) {
+ PhotoFileReader* result = NULL;
+ PhotoFileFormat _tmp0_ = 0;
+ gchar* _tmp1_ = NULL;
+ gchar* _tmp2_ = NULL;
+ PhotoFileReader* _tmp3_ = NULL;
+ PhotoFileReader* _tmp4_ = NULL;
+#line 90 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_val_if_fail (IS_PHOTO_FILE_WRITER (self), NULL);
+#line 91 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp0_ = photo_file_adapter_get_file_format (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_PHOTO_FILE_ADAPTER, PhotoFileAdapter));
+#line 91 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp1_ = photo_file_adapter_get_filepath (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_PHOTO_FILE_ADAPTER, PhotoFileAdapter));
+#line 91 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp2_ = _tmp1_;
+#line 91 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp3_ = photo_file_format_create_reader (_tmp0_, _tmp2_);
+#line 91 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp4_ = _tmp3_;
+#line 91 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _g_free0 (_tmp2_);
+#line 91 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ result = _tmp4_;
+#line 91 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return result;
+#line 968 "PhotoFileAdapter.c"
+}
+
+
+static void photo_file_writer_real_write (PhotoFileWriter* self, GdkPixbuf* pixbuf, JpegQuality quality, GError** error) {
+#line 94 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_critical ("Type `%s' does not implement abstract method `photo_file_writer_write'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 94 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return;
+#line 977 "PhotoFileAdapter.c"
+}
+
+
+void photo_file_writer_write (PhotoFileWriter* self, GdkPixbuf* pixbuf, JpegQuality quality, GError** error) {
+#line 94 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_if_fail (IS_PHOTO_FILE_WRITER (self));
+#line 94 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ PHOTO_FILE_WRITER_GET_CLASS (self)->write (self, pixbuf, quality, error);
+#line 986 "PhotoFileAdapter.c"
+}
+
+
+static void photo_file_writer_class_init (PhotoFileWriterClass * klass) {
+#line 85 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ photo_file_writer_parent_class = g_type_class_peek_parent (klass);
+#line 85 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ ((PhotoFileWriterClass *) klass)->write = photo_file_writer_real_write;
+#line 995 "PhotoFileAdapter.c"
+}
+
+
+static void photo_file_writer_instance_init (PhotoFileWriter * self) {
+}
+
+
+GType photo_file_writer_get_type (void) {
+ static volatile gsize photo_file_writer_type_id__volatile = 0;
+ if (g_once_init_enter (&photo_file_writer_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (PhotoFileWriterClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) photo_file_writer_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (PhotoFileWriter), 0, (GInstanceInitFunc) photo_file_writer_instance_init, NULL };
+ GType photo_file_writer_type_id;
+ photo_file_writer_type_id = g_type_register_static (TYPE_PHOTO_FILE_ADAPTER, "PhotoFileWriter", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
+ g_once_init_leave (&photo_file_writer_type_id__volatile, photo_file_writer_type_id);
+ }
+ return photo_file_writer_type_id__volatile;
+}
+
+
+PhotoFileMetadataWriter* photo_file_metadata_writer_construct (GType object_type, const gchar* filepath, PhotoFileFormat file_format) {
+ PhotoFileMetadataWriter* self = NULL;
+ const gchar* _tmp0_ = NULL;
+ PhotoFileFormat _tmp1_ = 0;
+#line 102 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_val_if_fail (filepath != NULL, NULL);
+#line 103 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp0_ = filepath;
+#line 103 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp1_ = file_format;
+#line 103 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ self = (PhotoFileMetadataWriter*) photo_file_adapter_construct (object_type, _tmp0_, _tmp1_);
+#line 102 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return self;
+#line 1029 "PhotoFileAdapter.c"
+}
+
+
+PhotoFileReader* photo_file_metadata_writer_create_reader (PhotoFileMetadataWriter* self) {
+ PhotoFileReader* result = NULL;
+ PhotoFileFormat _tmp0_ = 0;
+ gchar* _tmp1_ = NULL;
+ gchar* _tmp2_ = NULL;
+ PhotoFileReader* _tmp3_ = NULL;
+ PhotoFileReader* _tmp4_ = NULL;
+#line 106 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_val_if_fail (IS_PHOTO_FILE_METADATA_WRITER (self), NULL);
+#line 107 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp0_ = photo_file_adapter_get_file_format (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_PHOTO_FILE_ADAPTER, PhotoFileAdapter));
+#line 107 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp1_ = photo_file_adapter_get_filepath (G_TYPE_CHECK_INSTANCE_CAST (self, TYPE_PHOTO_FILE_ADAPTER, PhotoFileAdapter));
+#line 107 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp2_ = _tmp1_;
+#line 107 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp3_ = photo_file_format_create_reader (_tmp0_, _tmp2_);
+#line 107 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _tmp4_ = _tmp3_;
+#line 107 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ _g_free0 (_tmp2_);
+#line 107 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ result = _tmp4_;
+#line 107 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return result;
+#line 1058 "PhotoFileAdapter.c"
+}
+
+
+static void photo_file_metadata_writer_real_write_metadata (PhotoFileMetadataWriter* self, PhotoMetadata* metadata, GError** error) {
+#line 110 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_critical ("Type `%s' does not implement abstract method `photo_file_metadata_writer_write_metadata'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+#line 110 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ return;
+#line 1067 "PhotoFileAdapter.c"
+}
+
+
+void photo_file_metadata_writer_write_metadata (PhotoFileMetadataWriter* self, PhotoMetadata* metadata, GError** error) {
+#line 110 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ g_return_if_fail (IS_PHOTO_FILE_METADATA_WRITER (self));
+#line 110 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ PHOTO_FILE_METADATA_WRITER_GET_CLASS (self)->write_metadata (self, metadata, error);
+#line 1076 "PhotoFileAdapter.c"
+}
+
+
+static void photo_file_metadata_writer_class_init (PhotoFileMetadataWriterClass * klass) {
+#line 101 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ photo_file_metadata_writer_parent_class = g_type_class_peek_parent (klass);
+#line 101 "/home/jens/Source/shotwell/src/photos/PhotoFileAdapter.vala"
+ ((PhotoFileMetadataWriterClass *) klass)->write_metadata = photo_file_metadata_writer_real_write_metadata;
+#line 1085 "PhotoFileAdapter.c"
+}
+
+
+static void photo_file_metadata_writer_instance_init (PhotoFileMetadataWriter * self) {
+}
+
+
+GType photo_file_metadata_writer_get_type (void) {
+ static volatile gsize photo_file_metadata_writer_type_id__volatile = 0;
+ if (g_once_init_enter (&photo_file_metadata_writer_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (PhotoFileMetadataWriterClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) photo_file_metadata_writer_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (PhotoFileMetadataWriter), 0, (GInstanceInitFunc) photo_file_metadata_writer_instance_init, NULL };
+ GType photo_file_metadata_writer_type_id;
+ photo_file_metadata_writer_type_id = g_type_register_static (TYPE_PHOTO_FILE_ADAPTER, "PhotoFileMetadataWriter", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
+ g_once_init_leave (&photo_file_metadata_writer_type_id__volatile, photo_file_metadata_writer_type_id);
+ }
+ return photo_file_metadata_writer_type_id__volatile;
+}
+
+
+