mirror of https://github.com/GNOME/gimp.git
plug-ins: refactor writing single metadata tag in metadata-editor.
Use a separate function that can be reused and also get rid of the large output_data array and strcat without length checking. We will use GString instead.
This commit is contained in:
parent
87763cbe27
commit
9c2451d813
|
@ -100,6 +100,15 @@ static void add_to_store (gchar *value,
|
|||
GtkListStore *liststore,
|
||||
gint store_column);
|
||||
|
||||
static void set_tag_string (GimpMetadata *metadata,
|
||||
const gchar *name,
|
||||
const gchar *value);
|
||||
|
||||
static void write_metadata_tag (GtkBuilder *builder,
|
||||
GimpMetadata *metadata,
|
||||
gchar *tag,
|
||||
gint data_column);
|
||||
|
||||
gboolean hasCreatorTagData (GtkBuilder *builder);
|
||||
gboolean hasLocationCreationTagData (GtkBuilder *builder);
|
||||
gboolean hasImageSupplierTagData (GtkBuilder *builder);
|
||||
|
@ -3653,6 +3662,54 @@ set_tag_string (GimpMetadata *metadata,
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
write_metadata_tag (GtkBuilder *builder, GimpMetadata *metadata, gchar * tag, gint data_column)
|
||||
{
|
||||
GtkWidget *list_widget;
|
||||
GtkTreeModel *treemodel;
|
||||
gint row;
|
||||
gint number_of_rows;
|
||||
gchar *rc_data;
|
||||
GString *data;
|
||||
|
||||
list_widget = builder_get_widget (builder, tag);
|
||||
treemodel = gtk_tree_view_get_model (GTK_TREE_VIEW (list_widget));
|
||||
|
||||
number_of_rows = gtk_tree_model_iter_n_children (treemodel, NULL);
|
||||
|
||||
if (number_of_rows <= 0)
|
||||
return;
|
||||
|
||||
data = g_string_sized_new (256);
|
||||
|
||||
for (row = 0; row < number_of_rows; row++)
|
||||
{
|
||||
GtkTreeIter iter;
|
||||
|
||||
if (gtk_tree_model_iter_nth_child (treemodel, &iter, NULL, row))
|
||||
{
|
||||
gtk_tree_model_get (treemodel, &iter,
|
||||
data_column, &rc_data,
|
||||
-1);
|
||||
if (rc_data && rc_data[0] != '\0')
|
||||
{
|
||||
if (row > 0)
|
||||
g_string_append (data, ", ");
|
||||
|
||||
g_string_append (data, rc_data);
|
||||
}
|
||||
g_free (rc_data);
|
||||
}
|
||||
}
|
||||
|
||||
g_log (ME_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,
|
||||
"write_metadata_tag tag: %s, value: %s",
|
||||
tag, data->str);
|
||||
|
||||
set_tag_string (metadata, tag, data->str);
|
||||
g_string_free (data, TRUE);
|
||||
}
|
||||
|
||||
static void
|
||||
set_gps_longitude_latitude (GimpMetadata *metadata,
|
||||
const gchar *tag,
|
||||
|
@ -3743,9 +3800,7 @@ metadata_editor_write_callback (GtkWidget *dialog,
|
|||
GtkWidget *list_widget;
|
||||
GtkTreeIter iter;
|
||||
GtkTreeModel *treemodel;
|
||||
gchar *rc_data;
|
||||
gint number_of_rows;
|
||||
gchar output_data[256 * 1024];
|
||||
gchar tag[1024];
|
||||
gint counter;
|
||||
gint row;
|
||||
|
@ -3756,123 +3811,21 @@ metadata_editor_write_callback (GtkWidget *dialog,
|
|||
|
||||
gimp_metadata_add_xmp_history (g_metadata, "metadata");
|
||||
|
||||
/* DO ORG IMG NAME (LISTSTORE) */
|
||||
write_metadata_tag (builder, g_metadata,
|
||||
"Xmp.iptcExt.OrganisationInImageName",
|
||||
COL_ORG_IMG_NAME);
|
||||
|
||||
list_widget = builder_get_widget (builder,
|
||||
"Xmp.iptcExt.OrganisationInImageName");
|
||||
write_metadata_tag (builder, g_metadata,
|
||||
"Xmp.iptcExt.OrganisationInImageCode",
|
||||
COL_ORG_IMG_CODE);
|
||||
|
||||
treemodel = gtk_tree_view_get_model (GTK_TREE_VIEW (list_widget));
|
||||
write_metadata_tag (builder, g_metadata,
|
||||
"Xmp.plus.ModelReleaseID",
|
||||
COL_MOD_REL_ID);
|
||||
|
||||
number_of_rows = gtk_tree_model_iter_n_children (treemodel, NULL);
|
||||
|
||||
output_data[0] = 0;
|
||||
for (row = 0; row < number_of_rows; row++)
|
||||
{
|
||||
if (gtk_tree_model_iter_nth_child (treemodel, &iter, NULL, row))
|
||||
{
|
||||
gtk_tree_model_get (treemodel, &iter,
|
||||
COL_ORG_IMG_NAME, &rc_data,
|
||||
-1);
|
||||
if (rc_data && *rc_data)
|
||||
{
|
||||
strcat (output_data, rc_data);
|
||||
if (row + 1 < number_of_rows)
|
||||
strcat (output_data, ", ");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
set_tag_string (g_metadata,
|
||||
"Xmp.iptcExt.OrganisationInImageName",
|
||||
output_data);
|
||||
|
||||
/* DO ORG IMG CODE (LISTSTORE) */
|
||||
|
||||
list_widget = builder_get_widget (builder,
|
||||
"Xmp.iptcExt.OrganisationInImageCode");
|
||||
|
||||
treemodel = gtk_tree_view_get_model (GTK_TREE_VIEW (list_widget));
|
||||
|
||||
number_of_rows = gtk_tree_model_iter_n_children (treemodel, NULL);
|
||||
|
||||
output_data[0] = 0;
|
||||
for (row = 0; row < number_of_rows; row++)
|
||||
{
|
||||
if (gtk_tree_model_iter_nth_child (treemodel, &iter, NULL, row))
|
||||
{
|
||||
gtk_tree_model_get (treemodel, &iter,
|
||||
COL_ORG_IMG_CODE, &rc_data,
|
||||
-1);
|
||||
if (rc_data && *rc_data)
|
||||
{
|
||||
strcat (output_data, rc_data);
|
||||
if (row + 1 < number_of_rows)
|
||||
strcat (output_data, ", ");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
set_tag_string (g_metadata,
|
||||
"Xmp.iptcExt.OrganisationInImageCode",
|
||||
output_data);
|
||||
|
||||
/* DO MODEL RELEASE (LISTSTORE) */
|
||||
|
||||
list_widget = builder_get_widget (builder, "Xmp.plus.ModelReleaseID");
|
||||
|
||||
treemodel = gtk_tree_view_get_model (GTK_TREE_VIEW (list_widget));
|
||||
|
||||
number_of_rows = gtk_tree_model_iter_n_children (treemodel, NULL);
|
||||
|
||||
output_data[0] = 0;
|
||||
for (row = 0; row < number_of_rows; row++)
|
||||
{
|
||||
if (gtk_tree_model_iter_nth_child (treemodel, &iter, NULL, row))
|
||||
{
|
||||
gtk_tree_model_get (treemodel, &iter,
|
||||
COL_MOD_REL_ID, &rc_data,
|
||||
-1);
|
||||
if (rc_data && *rc_data)
|
||||
{
|
||||
strcat (output_data, rc_data);
|
||||
if (row + 1 < number_of_rows)
|
||||
strcat (output_data, ", ");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
set_tag_string (g_metadata,
|
||||
"Xmp.plus.ModelReleaseID",
|
||||
output_data);
|
||||
|
||||
/* DO PROPERTY RELEASE (LISTSTORE) */
|
||||
|
||||
list_widget = builder_get_widget (builder, "Xmp.plus.PropertyReleaseID");
|
||||
|
||||
treemodel = gtk_tree_view_get_model (GTK_TREE_VIEW (list_widget));
|
||||
|
||||
number_of_rows = gtk_tree_model_iter_n_children (treemodel, NULL);
|
||||
|
||||
output_data[0] = 0;
|
||||
for (row = 0; row < number_of_rows; row++)
|
||||
{
|
||||
if (gtk_tree_model_iter_nth_child (treemodel, &iter, NULL, row))
|
||||
{
|
||||
gtk_tree_model_get (treemodel, &iter,
|
||||
COL_PROP_REL_ID, &rc_data,
|
||||
-1);
|
||||
if (rc_data && *rc_data)
|
||||
{
|
||||
strcat (output_data, rc_data);
|
||||
if (row + 1 < number_of_rows)
|
||||
strcat (output_data, ", ");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
set_tag_string (g_metadata,
|
||||
"Xmp.plus.PropertyReleaseID",
|
||||
output_data);
|
||||
write_metadata_tag (builder, g_metadata,
|
||||
"Xmp.plus.PropertyReleaseID",
|
||||
COL_PROP_REL_ID);
|
||||
|
||||
/* DO LOCATION SHOWN (LISTSTORE) */
|
||||
|
||||
|
@ -3887,7 +3840,6 @@ metadata_editor_write_callback (GtkWidget *dialog,
|
|||
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata),
|
||||
LOCATIONSHOWN_HEADER);
|
||||
|
||||
output_data[0] = 0;
|
||||
for (row = 0; row < 256; row++)
|
||||
{
|
||||
gint item;
|
||||
|
@ -3989,7 +3941,6 @@ metadata_editor_write_callback (GtkWidget *dialog,
|
|||
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata),
|
||||
ARTWORKOROBJECT_HEADER);
|
||||
|
||||
output_data[0] = 0;
|
||||
for (row = 0; row < 256; row++)
|
||||
{
|
||||
gint item;
|
||||
|
@ -4093,7 +4044,6 @@ metadata_editor_write_callback (GtkWidget *dialog,
|
|||
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata),
|
||||
REGISTRYID_HEADER);
|
||||
|
||||
output_data[0] = 0;
|
||||
for (row = 0; row < 256; row++)
|
||||
{
|
||||
gint item;
|
||||
|
@ -4157,7 +4107,6 @@ metadata_editor_write_callback (GtkWidget *dialog,
|
|||
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata),
|
||||
IMAGECREATOR_HEADER);
|
||||
|
||||
output_data[0] = 0;
|
||||
for (row = 0; row < 256; row++)
|
||||
{
|
||||
gint item;
|
||||
|
@ -4221,7 +4170,6 @@ metadata_editor_write_callback (GtkWidget *dialog,
|
|||
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata),
|
||||
COPYRIGHTOWNER_HEADER);
|
||||
|
||||
output_data[0] = 0;
|
||||
for (row = 0; row < 256; row++)
|
||||
{
|
||||
gint item;
|
||||
|
@ -4285,7 +4233,6 @@ metadata_editor_write_callback (GtkWidget *dialog,
|
|||
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata),
|
||||
LICENSOR_HEADER);
|
||||
|
||||
output_data[0] = 0;
|
||||
for (row = 0; row < 256; row++)
|
||||
{
|
||||
gint item;
|
||||
|
|
Loading…
Reference in New Issue