gthumb r2460 - in trunk: . libgthumb
- From: mjc svn gnome org
- To: svn-commits-list gnome org
- Subject: gthumb r2460 - in trunk: . libgthumb
- Date: Sat, 20 Dec 2008 18:29:51 +0000 (UTC)
Author: mjc
Date: Sat Dec 20 18:29:50 2008
New Revision: 2460
URL: http://svn.gnome.org/viewvc/gthumb?rev=2460&view=rev
Log:
2008-12-20 Michael J. Chudobiak <mjc svn gnome org>
* libgthumb/gth-exiv2-utils.cpp:
* libgthumb/pixbuf-utils.c: (_gdk_pixbuf_savev):
Fixed metadata saving with exiv2 0.18. When saving an edited pixbuf,
first try copying the metadata from a backup copy of the original
file. If that fails, copy from the internal metadata glist, which is
less robust, because it does not contain variable-typing data.
Modified:
trunk/ChangeLog
trunk/libgthumb/gth-exiv2-utils.cpp
trunk/libgthumb/pixbuf-utils.c
Modified: trunk/libgthumb/gth-exiv2-utils.cpp
==============================================================================
--- trunk/libgthumb/gth-exiv2-utils.cpp (original)
+++ trunk/libgthumb/gth-exiv2-utils.cpp Sat Dec 20 18:29:50 2008
@@ -574,8 +574,6 @@
const char *to_file,
GList *metadata_in)
{
-printf ("\ndebugging: metadata writes are partly broken. Beware!\n");
-printf ("Copy from %s to %s:\n",from_file,to_file);
try {
GList *scan;
@@ -594,7 +592,6 @@
// Update the requested tag
GthMetadata *metadatum = (GthMetadata *) scan->data;
if (metadatum->full_name != NULL) {
-printf ("Copy tag %s = %s\n",metadatum->full_name, metadatum->raw_value);
if (g_str_has_prefix (metadatum->full_name, "Exif")) {
ed[metadatum->full_name] = metadatum->raw_value;
}
@@ -664,7 +661,6 @@
image2->setXmpData (image1->xmpData());
// overwrite existing metadata with new metadata
-printf ("Did this write work?\n");
image2->writeMetadata();
}
Modified: trunk/libgthumb/pixbuf-utils.c
==============================================================================
--- trunk/libgthumb/pixbuf-utils.c (original)
+++ trunk/libgthumb/pixbuf-utils.c Sat Dec 20 18:29:50 2008
@@ -1202,13 +1202,35 @@
char **values,
GError **error)
{
- gboolean result;
+ char *temp_backup;
+ char *temp_dir;
+ char *ext;
+
+ gboolean is_overwrite;
+ gboolean result;
g_return_val_if_fail (pixbuf != NULL, FALSE);
g_return_val_if_fail (local_file != NULL, FALSE);
g_return_val_if_fail (type != NULL, FALSE);
g_return_val_if_fail (! uri_has_scheme (local_file), FALSE);
+ is_overwrite = FALSE;
+
+ temp_dir = get_temp_dir_name ();
+ if (temp_dir != NULL) {
+ is_overwrite = path_exists (local_file);
+ if (is_overwrite) {
+ ext = g_strdup_printf (".%s",get_filename_extension (local_file));
+ temp_backup = get_temp_file_name (temp_dir, ext);
+ g_free (ext);
+ /* Make a backup copy first to preserve original metadata in its original
+ * fully-typed form. Use the string copies in the metadata glist as a
+ * fallback - but exiv2 soemtimes gets the typing wrong,
+ * causing no metadata to be saved. */
+ file_copy (local_file, temp_backup);
+ }
+ }
+
#ifdef HAVE_LIBTIFF
if (strcmp (type, "tiff") == 0)
result = _gdk_pixbuf_save_as_tiff (pixbuf,
@@ -1235,9 +1257,19 @@
if (result == TRUE) {
metadata = simple_add_metadata (metadata, "Exif.Image.Orientation", "1");
- update_and_save_metadata (local_file, local_file, metadata);
+ if (is_overwrite)
+ update_and_save_metadata (temp_backup, local_file, metadata);
+ else
+ update_and_save_metadata (local_file, local_file, metadata);
}
-
+
+ if (is_overwrite) {
+ file_unlink (temp_backup);
+ local_dir_remove_recursive (temp_dir);
+ }
+
+ g_free (temp_backup);
+ g_free (temp_dir);
return result;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]