plug-ins: refactor set_tag_string usage in metadata-editor

We had a lot of duplicate code using gexiv2_metadata_try_set_tag_string
and then checking for errors.

Simplify this by re-using the existing set_tag_string function by
introducing an extra parameter that tells us whether or not to clear
the tag first.
This commit is contained in:
Jacob Boerema 2023-05-02 12:30:38 -04:00
parent 09f4261e3f
commit 415b32e763
1 changed files with 65 additions and 227 deletions

View File

@ -102,7 +102,8 @@ static void add_to_store (gchar *value,
static void set_tag_string (GimpMetadata *metadata, static void set_tag_string (GimpMetadata *metadata,
const gchar *name, const gchar *name,
const gchar *value); const gchar *value,
gboolean clear_tag);
static gchar * get_phonetype (gchar *cur_value); static gchar * get_phonetype (gchar *cur_value);
@ -3776,16 +3777,17 @@ set_tag_failed (const gchar *tag, gchar *error_message)
static void static void
set_tag_string (GimpMetadata *metadata, set_tag_string (GimpMetadata *metadata,
const gchar *name, const gchar *name,
const gchar *value) const gchar *value,
gboolean clear_tag)
{ {
GError *error = NULL; GError *error = NULL;
if (metadata == NULL) return; if (! metadata || ! name) return;
if (name == NULL) return;
gexiv2_metadata_try_clear_tag (GEXIV2_METADATA (metadata), name, NULL); if (clear_tag)
gexiv2_metadata_try_clear_tag (GEXIV2_METADATA (metadata), name, NULL);
if (value == NULL) return; if (! value) return;
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (metadata), if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (metadata),
name, value, &error)) name, value, &error))
@ -3864,7 +3866,7 @@ write_metadata_tag (GtkBuilder *builder, GimpMetadata *metadata, gchar * tag, gi
"write_metadata_tag tag: %s, value: %s", "write_metadata_tag tag: %s, value: %s",
tag, data->str); tag, data->str);
set_tag_string (metadata, tag, data->str); set_tag_string (metadata, tag, data->str, TRUE);
g_string_free (data, TRUE); g_string_free (data, TRUE);
} }
@ -3942,7 +3944,7 @@ write_metadata_tag_multiple (GtkBuilder *builder, GimpMetadata *metadata,
"write_metadata_tag_multiple tag: %s, value: %s, col: %d", "write_metadata_tag_multiple tag: %s, value: %s, col: %d",
temp_tag, tag_data, col); temp_tag, tag_data, col);
set_tag_string (metadata, temp_tag, tag_data); set_tag_string (metadata, temp_tag, tag_data, TRUE);
g_free (tag_data); g_free (tag_data);
} }
counter++; counter++;
@ -4010,19 +4012,13 @@ set_gps_longitude_latitude (GimpMetadata *metadata,
if (!remove_val) if (!remove_val)
{ {
GError *error = NULL;
g_log (ME_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Converted values: %d - %d - %f", degrees, minutes, seconds); g_log (ME_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Converted values: %d - %d - %f", degrees, minutes, seconds);
g_snprintf (lng_lat, sizeof (lng_lat), g_snprintf (lng_lat, sizeof (lng_lat),
"%d/1 %d/1 %d/1000", "%d/1 %d/1 %d/1000",
abs (degrees), abs (minutes), abs ((gint) (seconds * 1000.f))); abs (degrees), abs (minutes), abs ((gint) (seconds * 1000.f)));
g_log (ME_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Tag: %s, output string: %s", tag, lng_lat); g_log (ME_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Tag: %s, output string: %s", tag, lng_lat);
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (metadata), set_tag_string (metadata, tag, lng_lat, FALSE);
tag, lng_lat, &error))
{
set_tag_failed (tag, error->message);
g_clear_error (&error);
}
} }
else else
{ {
@ -4089,16 +4085,9 @@ metadata_editor_write_callback (GtkWidget *dialog,
if (hasCreatorTagData (builder)) if (hasCreatorTagData (builder))
{ {
GError *error = NULL;
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, creatorContactInfoHeader.header,
creatorContactInfoHeader.header, "type=\"Struct\"", FALSE);
"type=\"Struct\"",
&error))
{
set_tag_failed (creatorContactInfoTags[i].tag, error->message);
g_clear_error (&error);
}
for (i = 0; i < creatorContactInfoHeader.size; i++) for (i = 0; i < creatorContactInfoHeader.size; i++)
{ {
@ -4109,14 +4098,8 @@ metadata_editor_write_callback (GtkWidget *dialog,
{ {
GtkEntry *entry = GTK_ENTRY (object); GtkEntry *entry = GTK_ENTRY (object);
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, creatorContactInfoTags[i].tag,
creatorContactInfoTags[i].tag, gtk_entry_get_text (entry), FALSE);
gtk_entry_get_text (entry),
&error))
{
set_tag_failed (creatorContactInfoTags[i].tag, error->message);
g_clear_error (&error);
}
} }
else if (! strcmp ("multi", creatorContactInfoTags[i].mode)) else if (! strcmp ("multi", creatorContactInfoTags[i].mode))
{ {
@ -4132,13 +4115,8 @@ metadata_editor_write_callback (GtkWidget *dialog,
text = gtk_text_buffer_get_text (buffer, &start, &end, TRUE); text = gtk_text_buffer_get_text (buffer, &start, &end, TRUE);
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, creatorContactInfoTags[i].tag,
creatorContactInfoTags[i].tag, text, FALSE);
text, &error))
{
set_tag_failed (creatorContactInfoTags[i].tag, error->message);
g_clear_error (&error);
}
g_free (text); g_free (text);
} }
@ -4174,7 +4152,6 @@ metadata_editor_write_callback (GtkWidget *dialog,
{ {
GtkEntry *entry = GTK_ENTRY (object); GtkEntry *entry = GTK_ENTRY (object);
gchar *value_entry = g_strdup (gtk_entry_get_text (entry)); gchar *value_entry = g_strdup (gtk_entry_get_text (entry));
GError *error = NULL;
if (! strcmp ("Exif.GPSInfo.GPSLongitude", if (! strcmp ("Exif.GPSInfo.GPSLongitude",
default_metadata_tags[i].tag) || default_metadata_tags[i].tag) ||
@ -4205,14 +4182,8 @@ metadata_editor_write_callback (GtkWidget *dialog,
g_snprintf (alt_str, sizeof (alt_str), "%d/100", (gint) alt_d); g_snprintf (alt_str, sizeof (alt_str), "%d/100", (gint) alt_d);
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, default_metadata_tags[i].tag,
default_metadata_tags[i].tag, alt_str, FALSE);
alt_str,
&error))
{
set_tag_failed (default_metadata_tags[i].tag, error->message);
g_clear_error (&error);
}
} }
else else
{ {
@ -4229,28 +4200,16 @@ metadata_editor_write_callback (GtkWidget *dialog,
default_metadata_tags[i].tag, default_metadata_tags[i].tag,
GEXIV2_STRUCTURE_XA_NONE, GEXIV2_STRUCTURE_XA_NONE,
NULL); NULL);
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, default_metadata_tags[i].tag,
default_metadata_tags[i].tag, text_value, FALSE);
text_value,
&error))
{
set_tag_failed (default_metadata_tags[i].tag, error->message);
g_clear_error (&error);
}
} }
else else
{ {
gexiv2_metadata_try_clear_tag (GEXIV2_METADATA (g_metadata), gexiv2_metadata_try_clear_tag (GEXIV2_METADATA (g_metadata),
default_metadata_tags[i].tag, default_metadata_tags[i].tag,
NULL); NULL);
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, default_metadata_tags[i].tag,
default_metadata_tags[i].tag, text_value, FALSE);
text_value,
&error))
{
set_tag_failed (default_metadata_tags[i].tag, error->message);
g_clear_error (&error);
}
} }
index = default_metadata_tags[i].other_tag_index; index = default_metadata_tags[i].other_tag_index;
@ -4259,15 +4218,9 @@ metadata_editor_write_callback (GtkWidget *dialog,
gexiv2_metadata_try_clear_tag (GEXIV2_METADATA (g_metadata), gexiv2_metadata_try_clear_tag (GEXIV2_METADATA (g_metadata),
equivalent_metadata_tags[index].tag, equivalent_metadata_tags[index].tag,
NULL); NULL);
if (*text_value && if (*text_value)
! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, equivalent_metadata_tags[index].tag,
equivalent_metadata_tags[index].tag, text_value, FALSE);
text_value,
&error))
{
set_tag_failed (equivalent_metadata_tags[index].tag, error->message);
g_clear_error (&error);
}
} }
} }
} }
@ -4303,14 +4256,8 @@ metadata_editor_write_callback (GtkWidget *dialog,
default_metadata_tags[i].tag, default_metadata_tags[i].tag,
GEXIV2_STRUCTURE_XA_NONE, GEXIV2_STRUCTURE_XA_NONE,
NULL); NULL);
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, default_metadata_tags[i].tag,
default_metadata_tags[i].tag, text, FALSE);
text,
&error))
{
set_tag_failed (default_metadata_tags[i].tag, error->message);
g_clear_error (&error);
}
} }
else else
{ {
@ -4364,14 +4311,8 @@ metadata_editor_write_callback (GtkWidget *dialog,
else if (! strcmp ("single", equivalent_metadata_tags[index].mode)) else if (! strcmp ("single", equivalent_metadata_tags[index].mode))
{ {
/* Convert from multiline to single line: keep the \n and just add the whole text. */ /* Convert from multiline to single line: keep the \n and just add the whole text. */
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, equivalent_metadata_tags[index].tag,
equivalent_metadata_tags[index].tag, text, FALSE);
text,
&error))
{
set_tag_failed (equivalent_metadata_tags[index].tag, error->message);
g_clear_error (&error);
}
} }
else else
{ {
@ -4397,7 +4338,6 @@ metadata_editor_write_callback (GtkWidget *dialog,
{ {
GtkComboBoxText *combo; GtkComboBoxText *combo;
gint32 value; gint32 value;
GError *error = NULL;
combo = GTK_COMBO_BOX_TEXT (object); combo = GTK_COMBO_BOX_TEXT (object);
value = gtk_combo_box_get_active (GTK_COMBO_BOX (combo)); value = gtk_combo_box_get_active (GTK_COMBO_BOX (combo));
@ -4420,22 +4360,10 @@ metadata_editor_write_callback (GtkWidget *dialog,
save = g_strdup_printf ("%d", value); save = g_strdup_printf ("%d", value);
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, default_metadata_tags[i].tag,
default_metadata_tags[i].tag, save, FALSE);
save, set_tag_string (g_metadata, "Iptc.Application2.Urgency",
&error)) save, FALSE);
{
set_tag_failed (default_metadata_tags[i].tag, error->message);
g_clear_error (&error);
}
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata),
"Iptc.Application2.Urgency",
save,
&error))
{
set_tag_failed ("Iptc.Application2.Urgency", error->message);
g_clear_error (&error);
}
g_free (save); g_free (save);
} }
} }
@ -4458,14 +4386,8 @@ metadata_editor_write_callback (GtkWidget *dialog,
else /* (value == 2) */ else /* (value == 2) */
save_value = g_strdup_printf ("%s", "False"); save_value = g_strdup_printf ("%s", "False");
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, default_metadata_tags[i].tag,
default_metadata_tags[i].tag, save_value, FALSE);
save_value,
&error))
{
set_tag_failed (default_metadata_tags[i].tag, error->message);
g_clear_error (&error);
}
g_free (save_value); g_free (save_value);
} }
} }
@ -4483,14 +4405,8 @@ metadata_editor_write_callback (GtkWidget *dialog,
save = g_strdup_printf ("%d", value); save = g_strdup_printf ("%d", value);
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, default_metadata_tags[i].tag,
default_metadata_tags[i].tag, save, FALSE);
save,
&error))
{
set_tag_failed (default_metadata_tags[i].tag, error->message);
g_clear_error (&error);
}
g_free (save); g_free (save);
} }
} }
@ -4506,37 +4422,19 @@ metadata_editor_write_callback (GtkWidget *dialog,
break; break;
case 1: case 1:
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, default_metadata_tags[i].tag,
default_metadata_tags[i].tag, "male", FALSE);
"male",
&error))
{
set_tag_failed (default_metadata_tags[i].tag, error->message);
g_clear_error (&error);
}
break; break;
case 2: case 2:
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, default_metadata_tags[i].tag,
default_metadata_tags[i].tag, "female", FALSE);
"female",
&error))
{
set_tag_failed (default_metadata_tags[i].tag, error->message);
g_clear_error (&error);
}
break; break;
case 3: case 3:
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, default_metadata_tags[i].tag,
default_metadata_tags[i].tag, "other", FALSE);
"other", break;
&error))
{
set_tag_failed (default_metadata_tags[i].tag, error->message);
g_clear_error (&error);
}
break;
} }
} }
else if (! strcmp ("Exif.GPSInfo.GPSLongitudeRef", else if (! strcmp ("Exif.GPSInfo.GPSLongitudeRef",
@ -4551,25 +4449,13 @@ metadata_editor_write_callback (GtkWidget *dialog,
break; break;
case 1: case 1:
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, default_metadata_tags[i].tag,
default_metadata_tags[i].tag, "E", FALSE);
"E",
&error))
{
set_tag_failed (default_metadata_tags[i].tag, error->message);
g_clear_error (&error);
}
break; break;
case 2: case 2:
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, default_metadata_tags[i].tag,
default_metadata_tags[i].tag, "W", FALSE);
"W",
&error))
{
set_tag_failed (default_metadata_tags[i].tag, error->message);
g_clear_error (&error);
}
break; break;
} }
} }
@ -4585,25 +4471,13 @@ metadata_editor_write_callback (GtkWidget *dialog,
break; break;
case 1: case 1:
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, default_metadata_tags[i].tag,
default_metadata_tags[i].tag, "N", FALSE);
"N",
&error))
{
set_tag_failed (default_metadata_tags[i].tag, error->message);
g_clear_error (&error);
}
break; break;
case 2: case 2:
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, default_metadata_tags[i].tag,
default_metadata_tags[i].tag, "S", FALSE);
"S",
&error))
{
set_tag_failed (default_metadata_tags[i].tag, error->message);
g_clear_error (&error);
}
break; break;
} }
} }
@ -4619,25 +4493,13 @@ metadata_editor_write_callback (GtkWidget *dialog,
break; break;
case 1: case 1:
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, default_metadata_tags[i].tag,
default_metadata_tags[i].tag, "0", FALSE);
"0",
&error))
{
set_tag_failed (default_metadata_tags[i].tag, error->message);
g_clear_error (&error);
}
break; break;
case 2: case 2:
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, default_metadata_tags[i].tag,
default_metadata_tags[i].tag, "1", FALSE);
"1",
&error))
{
set_tag_failed (default_metadata_tags[i].tag, error->message);
g_clear_error (&error);
}
break; break;
} }
} }
@ -4652,14 +4514,8 @@ metadata_editor_write_callback (GtkWidget *dialog,
} }
else else
{ {
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, default_metadata_tags[i].tag,
default_metadata_tags[i].tag, modelreleasestatus[value].data, FALSE);
modelreleasestatus[value].data,
&error))
{
set_tag_failed (default_metadata_tags[i].tag, error->message);
g_clear_error (&error);
}
} }
} }
else if (! strcmp ("Xmp.plus.PropertyReleaseStatus", else if (! strcmp ("Xmp.plus.PropertyReleaseStatus",
@ -4673,14 +4529,8 @@ metadata_editor_write_callback (GtkWidget *dialog,
} }
else else
{ {
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, default_metadata_tags[i].tag,
default_metadata_tags[i].tag, propertyreleasestatus[value].data, FALSE);
propertyreleasestatus[value].data,
&error))
{
set_tag_failed (default_metadata_tags[i].tag, error->message);
g_clear_error (&error);
}
} }
} }
else if (! strcmp ("Xmp.plus.MinorModelAgeDisclosure", else if (! strcmp ("Xmp.plus.MinorModelAgeDisclosure",
@ -4694,14 +4544,8 @@ metadata_editor_write_callback (GtkWidget *dialog,
} }
else else
{ {
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, default_metadata_tags[i].tag,
default_metadata_tags[i].tag, minormodelagedisclosure[value].data, FALSE);
minormodelagedisclosure[value].data,
&error))
{
set_tag_failed (default_metadata_tags[i].tag, error->message);
g_clear_error (&error);
}
} }
} }
else if (! strcmp ("Xmp.iptcExt.DigitalSourceType", else if (! strcmp ("Xmp.iptcExt.DigitalSourceType",
@ -4715,14 +4559,8 @@ metadata_editor_write_callback (GtkWidget *dialog,
} }
else else
{ {
if (! gexiv2_metadata_try_set_tag_string (GEXIV2_METADATA (g_metadata), set_tag_string (g_metadata, default_metadata_tags[i].tag,
default_metadata_tags[i].tag, digitalsourcetype[value].data, FALSE);
digitalsourcetype[value].data,
&error))
{
set_tag_failed (default_metadata_tags[i].tag, error->message);
g_clear_error (&error);
}
} }
} }
} }