/*
- * Geeqie
- * (C) 2004 John Ellis
- * Copyright (C) 2008 - 2012 The Geeqie Team
+ * Copyright (C) 2004 John Ellis
+ * Copyright (C) 2008 - 2016 The Geeqie Team
*
- * Author: John Ellis, Laurent Monin
+ * Authors: John Ellis, Laurent Monin
*
- * This software is released under the GNU General Public License (GNU GPL).
- * Please read the included file COPYING for more information.
- * This software comes with no warranty of any kind, use at your own risk!
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-
#include "main.h"
#include "metadata.h"
g_assert(fd->change);
if (fd->change->dest &&
- strcmp(extension_from_path(fd->change->dest), GQ_CACHE_EXT_METADATA) == 0)
+ strcmp(registered_extension_from_path(fd->change->dest), GQ_CACHE_EXT_METADATA) == 0)
{
success = metadata_legacy_write(fd);
if (success) metadata_legacy_delete(fd, fd->change->dest);
return coord;
}
+gdouble metadata_read_GPS_direction(FileData *fd, const gchar *key, gdouble fallback)
+{
+ gchar *endptr;
+ gdouble deg;
+ gboolean ok = FALSE;
+ gchar *string = metadata_read_string(fd, key, METADATA_PLAIN);
+ if (!string) return fallback;
+
+ DEBUG_3("GPS_direction: %s\n", string);
+ deg = g_ascii_strtod(string, &endptr);
+
+ /* Expected text string is of the format e.g.:
+ * 18000/100
+ */
+ if (*endptr == '/')
+ {
+ deg = deg/100;
+ ok = TRUE;
+ }
+
+ if (!ok)
+ {
+ deg = fallback;
+ log_printf("unable to parse GPS direction '%s: %f'\n", string, deg);
+ }
+
+ g_free(string);
+
+ return deg;
+}
+
gboolean metadata_append_string(FileData *fd, const gchar *key, const char *value)
{
gchar *str = metadata_read_string(fd, key, METADATA_PLAIN);
}
}
+gboolean metadata_write_GPS_coord(FileData *fd, const gchar *key, gdouble value)
+{
+ gint deg;
+ gdouble min;
+ gdouble param;
+ char *coordinate;
+ char *ref;
+ gboolean ok = TRUE;
+
+ param = value;
+ if (param < 0)
+ param = -param;
+ deg = param;
+ min = (param * 60) - (deg * 60);
+ if (g_strcmp0(key, "Xmp.exif.GPSLongitude") == 0)
+ if (value < 0)
+ ref = "W";
+ else
+ ref = "E";
+ else if (g_strcmp0(key, "Xmp.exif.GPSLatitude") == 0)
+ if (value < 0)
+ ref = "S";
+ else
+ ref = "N";
+ else
+ {
+ log_printf("unknown GPS parameter key '%s'\n", key);
+ ok = FALSE;
+ }
+
+ if (ok)
+ {
+ coordinate = g_strdup_printf("%i,%lf,%s", deg, min, ref);
+ metadata_write_string(fd, key, coordinate );
+ g_free(coordinate);
+ }
+
+ return ok;
+}
+
gboolean metadata_append_list(FileData *fd, const gchar *key, const GList *values)
{
GList *list = metadata_read_list(fd, key, METADATA_PLAIN);