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,
|
GtkListStore *liststore,
|
||||||
gint store_column);
|
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 hasCreatorTagData (GtkBuilder *builder);
|
||||||
gboolean hasLocationCreationTagData (GtkBuilder *builder);
|
gboolean hasLocationCreationTagData (GtkBuilder *builder);
|
||||||
gboolean hasImageSupplierTagData (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
|
static void
|
||||||
set_gps_longitude_latitude (GimpMetadata *metadata,
|
set_gps_longitude_latitude (GimpMetadata *metadata,
|
||||||
const gchar *tag,
|
const gchar *tag,
|
||||||
|
@ -3743,9 +3800,7 @@ metadata_editor_write_callback (GtkWidget *dialog,
|
||||||
GtkWidget *list_widget;
|
GtkWidget *list_widget;
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
GtkTreeModel *treemodel;
|
GtkTreeModel *treemodel;
|
||||||
gchar *rc_data;
|
|
||||||
gint number_of_rows;
|
gint number_of_rows;
|
||||||
gchar output_data[256 * 1024];
|
|
||||||
gchar tag[1024];
|
gchar tag[1024];
|
||||||
gint counter;
|
gint counter;
|
||||||
gint row;
|
gint row;
|
||||||
|
@ -3756,123 +3811,21 @@ metadata_editor_write_callback (GtkWidget *dialog,
|
||||||
|
|
||||||
gimp_metadata_add_xmp_history (g_metadata, "metadata");
|
gimp_metadata_add_xmp_history (g_metadata, "metadata");
|
||||||
|
|
||||||
/* DO ORG IMG NAME (LISTSTORE) */
|
write_metadata_tag (builder, g_metadata,
|
||||||
|
|
||||||
list_widget = builder_get_widget (builder,
|
|
||||||
"Xmp.iptcExt.OrganisationInImageName");
|
|
||||||
|
|
||||||
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_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",
|
"Xmp.iptcExt.OrganisationInImageName",
|
||||||
output_data);
|
COL_ORG_IMG_NAME);
|
||||||
|
|
||||||
/* DO ORG IMG CODE (LISTSTORE) */
|
write_metadata_tag (builder, g_metadata,
|
||||||
|
|
||||||
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",
|
"Xmp.iptcExt.OrganisationInImageCode",
|
||||||
output_data);
|
COL_ORG_IMG_CODE);
|
||||||
|
|
||||||
/* DO MODEL RELEASE (LISTSTORE) */
|
write_metadata_tag (builder, g_metadata,
|
||||||
|
|
||||||
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",
|
"Xmp.plus.ModelReleaseID",
|
||||||
output_data);
|
COL_MOD_REL_ID);
|
||||||
|
|
||||||
/* DO PROPERTY RELEASE (LISTSTORE) */
|
write_metadata_tag (builder, g_metadata,
|
||||||
|
|
||||||
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",
|
"Xmp.plus.PropertyReleaseID",
|
||||||
output_data);
|
COL_PROP_REL_ID);
|
||||||
|
|
||||||
/* DO LOCATION SHOWN (LISTSTORE) */
|
/* DO LOCATION SHOWN (LISTSTORE) */
|
||||||
|
|
||||||
|
@ -3887,7 +3840,6 @@ metadata_editor_write_callback (GtkWidget *dialog,
|
||||||
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata),
|
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata),
|
||||||
LOCATIONSHOWN_HEADER);
|
LOCATIONSHOWN_HEADER);
|
||||||
|
|
||||||
output_data[0] = 0;
|
|
||||||
for (row = 0; row < 256; row++)
|
for (row = 0; row < 256; row++)
|
||||||
{
|
{
|
||||||
gint item;
|
gint item;
|
||||||
|
@ -3989,7 +3941,6 @@ metadata_editor_write_callback (GtkWidget *dialog,
|
||||||
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata),
|
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata),
|
||||||
ARTWORKOROBJECT_HEADER);
|
ARTWORKOROBJECT_HEADER);
|
||||||
|
|
||||||
output_data[0] = 0;
|
|
||||||
for (row = 0; row < 256; row++)
|
for (row = 0; row < 256; row++)
|
||||||
{
|
{
|
||||||
gint item;
|
gint item;
|
||||||
|
@ -4093,7 +4044,6 @@ metadata_editor_write_callback (GtkWidget *dialog,
|
||||||
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata),
|
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata),
|
||||||
REGISTRYID_HEADER);
|
REGISTRYID_HEADER);
|
||||||
|
|
||||||
output_data[0] = 0;
|
|
||||||
for (row = 0; row < 256; row++)
|
for (row = 0; row < 256; row++)
|
||||||
{
|
{
|
||||||
gint item;
|
gint item;
|
||||||
|
@ -4157,7 +4107,6 @@ metadata_editor_write_callback (GtkWidget *dialog,
|
||||||
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata),
|
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata),
|
||||||
IMAGECREATOR_HEADER);
|
IMAGECREATOR_HEADER);
|
||||||
|
|
||||||
output_data[0] = 0;
|
|
||||||
for (row = 0; row < 256; row++)
|
for (row = 0; row < 256; row++)
|
||||||
{
|
{
|
||||||
gint item;
|
gint item;
|
||||||
|
@ -4221,7 +4170,6 @@ metadata_editor_write_callback (GtkWidget *dialog,
|
||||||
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata),
|
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata),
|
||||||
COPYRIGHTOWNER_HEADER);
|
COPYRIGHTOWNER_HEADER);
|
||||||
|
|
||||||
output_data[0] = 0;
|
|
||||||
for (row = 0; row < 256; row++)
|
for (row = 0; row < 256; row++)
|
||||||
{
|
{
|
||||||
gint item;
|
gint item;
|
||||||
|
@ -4285,7 +4233,6 @@ metadata_editor_write_callback (GtkWidget *dialog,
|
||||||
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata),
|
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata),
|
||||||
LICENSOR_HEADER);
|
LICENSOR_HEADER);
|
||||||
|
|
||||||
output_data[0] = 0;
|
|
||||||
for (row = 0; row < 256; row++)
|
for (row = 0; row < 256; row++)
|
||||||
{
|
{
|
||||||
gint item;
|
gint item;
|
||||||
|
|
Loading…
Reference in New Issue