summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/generators.c12
-rw-r--r--src/jpeg-utils.cpp13
-rw-r--r--src/jpeg-utils.h1
-rw-r--r--src/setup.c1
-rw-r--r--src/setup.h1
5 files changed, 26 insertions, 2 deletions
diff --git a/src/generators.c b/src/generators.c
index 133c4c1..0e1985a 100644
--- a/src/generators.c
+++ b/src/generators.c
@@ -149,6 +149,7 @@ get_image_paths (TGallerySetup *setup,
static void
metadata_apply_overrides (ExifData *exif_data,
TGallerySetup *setup,
+ TPathInfo *path_info,
TAlbum *items,
TIndexItem *item)
{
@@ -156,12 +157,19 @@ metadata_apply_overrides (ExifData *exif_data,
g_free (exif_data->override_copyright);
exif_data->override_copyright = g_strdup (setup->add_copyright);
+
exif_data->timezone_shift = item->metadata_tz_shift;
if (exif_data->timezone_shift == 0)
exif_data->timezone_shift = items->metadata_tz_shift;
+
exif_data->fake_datetime = item->metadata_fake_datetime;
if (exif_data->fake_datetime == (time_t) -1)
exif_data->fake_datetime = items->metadata_fake_datetime;
+
+ g_free (exif_data->external_exif_data);
+ exif_data->external_exif_data = NULL;
+ if (setup->write_supplied_exif && item->metadata_external_exif)
+ exif_data->external_exif_data = g_build_filename (path_info->src_dir, item->metadata_external_exif, NULL);
}
@@ -252,7 +260,7 @@ generate_image (TGallerySetup *setup,
}
if (! is_thumbnail) {
exif_data = exif_data_new_empty ();
- metadata_apply_overrides (exif_data, setup, items, item);
+ metadata_apply_overrides (exif_data, setup, path_info, items, item);
modify_exif (img_dst, exif_data, setup->erase_exif_thumbnail);
exif_data_free (exif_data);
}
@@ -778,7 +786,7 @@ write_html_image (TGallerySetup *setup,
if (exif == NULL)
log_error ("write_html_image: error getting exif data from file \"%s\"\n", img_dst);
}
- metadata_apply_overrides (exif, setup, parent_items, item);
+ metadata_apply_overrides (exif, setup, path_info, parent_items, item);
/* Test for basic EXIF keys presence */
if (exif != NULL && exif_has_key (exif, EXIF_APERTURE) &&
exif_has_key (exif, EXIF_FOCAL_LENGTH) &&
diff --git a/src/jpeg-utils.cpp b/src/jpeg-utils.cpp
index 6483563..321a9b6 100644
--- a/src/jpeg-utils.cpp
+++ b/src/jpeg-utils.cpp
@@ -129,6 +129,7 @@ exif_data_free (ExifData *data)
{
if (data) {
g_free (data->override_copyright);
+ g_free (data->external_exif_data);
/* FIXME: free data->priv->image */
g_free (data->priv);
g_free (data);
@@ -663,6 +664,18 @@ modify_exif (const gchar *filename, ExifData *exif, gboolean strip_thumbnail)
g_assert (image.get() != 0);
image->readMetadata();
+
+ /* Write down metadata from external file if supplied */
+ if (exif && exif->external_exif_data) {
+ Exiv2::Image::AutoPtr ext_image = Exiv2::ImageFactory::open (exif->external_exif_data);
+ if (ext_image.get() != 0) {
+ ext_image->clearMetadata();
+ ext_image->readMetadata();
+ image->setMetadata (*ext_image);
+ modified = TRUE;
+ }
+ }
+
Exiv2::ExifData &exifData = image->exifData();
Exiv2::IptcData &iptcData = image->iptcData();
diff --git a/src/jpeg-utils.h b/src/jpeg-utils.h
index cc6c5c7..d393fbe 100644
--- a/src/jpeg-utils.h
+++ b/src/jpeg-utils.h
@@ -53,6 +53,7 @@ typedef struct {
gchar *override_copyright;
int timezone_shift;
time_t fake_datetime;
+ gchar *external_exif_data;
} ExifData;
diff --git a/src/setup.c b/src/setup.c
index e4df0dd..7dde0c8 100644
--- a/src/setup.c
+++ b/src/setup.c
@@ -94,6 +94,7 @@ parse_setup_xml (const gchar *filename)
setup->preload = xml_file_get_node_attribute_boolean (xml, "/gallery_setup/images/preload", "value", TRUE);
setup->use_iptc_exif = xml_file_get_node_attribute_boolean (xml, "/gallery_setup/images/use_iptc_exif", "value", FALSE);
setup->erase_exif_thumbnail = xml_file_get_node_attribute_boolean (xml, "/gallery_setup/images/erase_embed_thumbnail", "value", FALSE);
+ setup->write_supplied_exif = xml_file_get_node_attribute_boolean (xml, "/gallery_setup/images/write_supplied_exif", "value", FALSE);
setup->nofullsize = xml_file_get_node_present (xml, "/gallery_setup/images/nofullsize");
setup->autorotate = xml_file_get_node_attribute_boolean (xml, "/gallery_setup/images/autorotate", "value", TRUE);
diff --git a/src/setup.h b/src/setup.h
index daf8453..10e9d7b 100644
--- a/src/setup.h
+++ b/src/setup.h
@@ -56,6 +56,7 @@ typedef struct {
gboolean preload;
gboolean use_iptc_exif;
gboolean erase_exif_thumbnail;
+ gboolean write_supplied_exif;
gboolean nofullsize;
ThumbnailSquareType squared_thumbnail_type;
gboolean autorotate;