plug-ins: fix failure to write IPTC TimeCreated

The IPTC TimeCreated tag does not allow fractions of a second, while
Xmp.Photoshop.DateCreated (which includes the time) does allow this.

In our metadata editor we base our date/time on the last value and then
synchronize it with the IPTC date and time values.
While doing that, we did not check if the seconds had a fractional part.

To fix this we first check for the presence of a fraction by checking
for a dot in the time string.
Complicating factor is that a timezone difference may follow that,
which we want to keep if present. So we check for that too and
concatenate the parts we want.
This commit is contained in:
Jacob Boerema
2024-09-23 13:37:29 -04:00
parent 151cb9c40c
commit f84e4ee04d

View File

@ -5131,8 +5131,36 @@ metadata_editor_write_callback (GtkWidget *dialog,
if (date_time_split[1] != NULL)
{
gchar **time_split = NULL;
gchar *iptc_time = NULL;
/* IPTC TimeCreated can't have fractional parts. */
time_split = g_strsplit (date_time_split[1], ".", 2);
/* A timezone adjustment can follow this, which
* we want to keep. */
if (time_split[1] != NULL)
{
gchar **tz_split = NULL;
tz_split = g_strsplit_set (time_split[1], "+-", 2);
if (tz_split[1] != NULL)
iptc_time = g_strconcat (time_split[0],
time_split[1] + strlen (tz_split[0]),
NULL);
else
iptc_time = g_strdup (time_split[0]);
g_strfreev (tz_split);
}
else
{
iptc_time = g_strdup (time_split[0]);
}
set_tag_string (g_metadata, "Iptc.Application2.TimeCreated",
date_time_split[1], FALSE);
iptc_time, FALSE);
g_strfreev (time_split);
g_free (iptc_time);
}
else
{