plug-ins: more refactoring of duplicate code in metadata-editor.
Reordered the strings in artworkorobject to be in the same
order as the columns.
Add write_metadata_tag_multiple function that handles most
of the previously duplicated code and check for special
handling of phonetype when necessary by adding
an enum and a get_phonetype function.
(cherry picked from commit 4609def72f
)
This commit is contained in:
@ -85,11 +85,21 @@ static void set_tag_string (GimpMetadata *metadata,
|
|||||||
const gchar *name,
|
const gchar *name,
|
||||||
const gchar *value);
|
const gchar *value);
|
||||||
|
|
||||||
|
static gchar * get_phonetype (gchar *cur_value);
|
||||||
|
|
||||||
static void write_metadata_tag (GtkBuilder *builder,
|
static void write_metadata_tag (GtkBuilder *builder,
|
||||||
GimpMetadata *metadata,
|
GimpMetadata *metadata,
|
||||||
gchar *tag,
|
gchar *tag,
|
||||||
gint data_column);
|
gint data_column);
|
||||||
|
|
||||||
|
static void write_metadata_tag_multiple (GtkBuilder *builder,
|
||||||
|
GimpMetadata *metadata,
|
||||||
|
GExiv2StructureType type,
|
||||||
|
const gchar *header_tag,
|
||||||
|
gint n_columns,
|
||||||
|
const gchar **column_tags,
|
||||||
|
const gint special_handling[]);
|
||||||
|
|
||||||
gboolean hasCreatorTagData (GtkBuilder *builder);
|
gboolean hasCreatorTagData (GtkBuilder *builder);
|
||||||
gboolean hasLocationCreationTagData (GtkBuilder *builder);
|
gboolean hasLocationCreationTagData (GtkBuilder *builder);
|
||||||
gboolean hasImageSupplierTagData (GtkBuilder *builder);
|
gboolean hasImageSupplierTagData (GtkBuilder *builder);
|
||||||
@ -2615,32 +2625,32 @@ metadata_dialog_editor_set_metadata (GExiv2Metadata *metadata,
|
|||||||
gchar **tagdatarow = (gchar **) tagdata[item];
|
gchar **tagdatarow = (gchar **) tagdata[item];
|
||||||
|
|
||||||
/* remove substring for language id in title field */
|
/* remove substring for language id in title field */
|
||||||
remove_substring (tagdatarow[4], lang_default);
|
remove_substring (tagdatarow[COL_AOO_TITLE], lang_default);
|
||||||
if (strstr (tagdatarow[4], " "))
|
if (strstr (tagdatarow[COL_AOO_TITLE], " "))
|
||||||
{
|
{
|
||||||
remove_substring (tagdatarow[4], " ");
|
remove_substring (tagdatarow[COL_AOO_TITLE], " ");
|
||||||
}
|
}
|
||||||
|
|
||||||
remove_substring (tagdatarow[4], bag_default);
|
remove_substring (tagdatarow[COL_AOO_TITLE], bag_default);
|
||||||
if (strstr (tagdatarow[4], " "))
|
if (strstr (tagdatarow[COL_AOO_TITLE], " "))
|
||||||
{
|
{
|
||||||
remove_substring (tagdatarow[4], " ");
|
remove_substring (tagdatarow[COL_AOO_TITLE], " ");
|
||||||
}
|
}
|
||||||
|
|
||||||
remove_substring (tagdatarow[4], seq_default);
|
remove_substring (tagdatarow[COL_AOO_TITLE], seq_default);
|
||||||
if (strstr (tagdatarow[4], " "))
|
if (strstr (tagdatarow[COL_AOO_TITLE], " "))
|
||||||
{
|
{
|
||||||
remove_substring (tagdatarow[4], " ");
|
remove_substring (tagdatarow[COL_AOO_TITLE], " ");
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_list_store_append (liststore, &iter);
|
gtk_list_store_append (liststore, &iter);
|
||||||
gtk_list_store_set (liststore, &iter,
|
gtk_list_store_set (liststore, &iter,
|
||||||
COL_AOO_TITLE, tagdatarow[4],
|
COL_AOO_TITLE, tagdatarow[0],
|
||||||
COL_AOO_DATE_CREAT, tagdatarow[0],
|
COL_AOO_DATE_CREAT, tagdatarow[1],
|
||||||
COL_AOO_CREATOR, tagdatarow[5],
|
COL_AOO_CREATOR, tagdatarow[2],
|
||||||
COL_AOO_SOURCE, tagdatarow[1],
|
COL_AOO_SOURCE, tagdatarow[3],
|
||||||
COL_AOO_SRC_INV_ID, tagdatarow[2],
|
COL_AOO_SRC_INV_ID, tagdatarow[4],
|
||||||
COL_AOO_CR_NOT, tagdatarow[3],
|
COL_AOO_CR_NOT, tagdatarow[5],
|
||||||
-1);
|
-1);
|
||||||
}
|
}
|
||||||
free_tagdata(tagdata, counter, n_artworkorobject);
|
free_tagdata(tagdata, counter, n_artworkorobject);
|
||||||
@ -3654,6 +3664,31 @@ set_tag_string (GimpMetadata *metadata,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gchar *
|
||||||
|
get_phonetype (gchar *cur_value)
|
||||||
|
{
|
||||||
|
gchar *phone_type_value = NULL;
|
||||||
|
gint types;
|
||||||
|
|
||||||
|
if (cur_value != NULL)
|
||||||
|
{
|
||||||
|
for (types = 0; types < 6; types++)
|
||||||
|
{
|
||||||
|
if (! strcmp (cur_value, gettext (phone_types[types].display)))
|
||||||
|
{
|
||||||
|
phone_type_value = strdup (phone_types[types].data);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
g_free (cur_value);
|
||||||
|
}
|
||||||
|
if (! phone_type_value)
|
||||||
|
phone_type_value = strdup (phone_types[0].data);
|
||||||
|
cur_value = phone_type_value;
|
||||||
|
|
||||||
|
return phone_type_value;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
write_metadata_tag (GtkBuilder *builder, GimpMetadata *metadata, gchar * tag, gint data_column)
|
write_metadata_tag (GtkBuilder *builder, GimpMetadata *metadata, gchar * tag, gint data_column)
|
||||||
{
|
{
|
||||||
@ -3702,6 +3737,87 @@ write_metadata_tag (GtkBuilder *builder, GimpMetadata *metadata, gchar * tag, gi
|
|||||||
g_string_free (data, TRUE);
|
g_string_free (data, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
write_metadata_tag_multiple (GtkBuilder *builder, GimpMetadata *metadata,
|
||||||
|
GExiv2StructureType type, const gchar * header_tag,
|
||||||
|
gint n_columns, const gchar **column_tags,
|
||||||
|
const gint special_handling[])
|
||||||
|
{
|
||||||
|
GtkWidget *list_widget;
|
||||||
|
GtkTreeModel *treemodel;
|
||||||
|
gint row;
|
||||||
|
gint number_of_rows;
|
||||||
|
gint counter;
|
||||||
|
gchar temp_tag[1024];
|
||||||
|
|
||||||
|
/* Clear old tag data first */
|
||||||
|
gexiv2_metadata_clear_tag (GEXIV2_METADATA (metadata), header_tag);
|
||||||
|
|
||||||
|
for (row = 0; row < 256; row++)
|
||||||
|
{
|
||||||
|
gint item;
|
||||||
|
|
||||||
|
for (item = 0; item < n_columns; item++)
|
||||||
|
{
|
||||||
|
g_snprintf (temp_tag, sizeof (temp_tag), "%s[%d]%s",
|
||||||
|
header_tag, row, locationshown[item]);
|
||||||
|
gexiv2_metadata_clear_tag (GEXIV2_METADATA (metadata), temp_tag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
list_widget = builder_get_widget (builder, header_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;
|
||||||
|
|
||||||
|
gexiv2_metadata_set_xmp_tag_struct (GEXIV2_METADATA (metadata),
|
||||||
|
header_tag,
|
||||||
|
GEXIV2_STRUCTURE_XA_BAG);
|
||||||
|
|
||||||
|
/* We need a separate counter because an empty row will not be written */
|
||||||
|
counter = 1;
|
||||||
|
for (row = 0; row < number_of_rows; row++)
|
||||||
|
{
|
||||||
|
GtkTreeIter iter;
|
||||||
|
|
||||||
|
if (gtk_tree_model_iter_nth_child (treemodel, &iter, NULL, row))
|
||||||
|
{
|
||||||
|
gint col;
|
||||||
|
|
||||||
|
for (col = 0; col < n_columns; col++)
|
||||||
|
{
|
||||||
|
gchar *tag_data;
|
||||||
|
|
||||||
|
gtk_tree_model_get (treemodel, &iter,
|
||||||
|
col, &tag_data,
|
||||||
|
-1);
|
||||||
|
|
||||||
|
g_snprintf (temp_tag, sizeof (temp_tag), "%s[%d]%s",
|
||||||
|
header_tag, counter, column_tags[col]);
|
||||||
|
|
||||||
|
if (special_handling)
|
||||||
|
switch(special_handling[col])
|
||||||
|
{
|
||||||
|
case METADATA_PHONETYPE:
|
||||||
|
tag_data = get_phonetype (tag_data);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_log (ME_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,
|
||||||
|
"write_metadata_tag_multiple tag: %s, value: %s, col: %d",
|
||||||
|
temp_tag, tag_data, col);
|
||||||
|
|
||||||
|
set_tag_string (metadata, temp_tag, tag_data);
|
||||||
|
g_free (tag_data);
|
||||||
|
}
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_gps_longitude_latitude (GimpMetadata *metadata,
|
set_gps_longitude_latitude (GimpMetadata *metadata,
|
||||||
const gchar *tag,
|
const gchar *tag,
|
||||||
@ -3786,18 +3902,9 @@ metadata_editor_write_callback (GtkWidget *dialog,
|
|||||||
GtkBuilder *builder,
|
GtkBuilder *builder,
|
||||||
gint32 image_id)
|
gint32 image_id)
|
||||||
{
|
{
|
||||||
GimpMetadata *g_metadata;
|
GimpMetadata *g_metadata;
|
||||||
gint max_elements;
|
gint max_elements;
|
||||||
gint i;
|
gint i = 0;
|
||||||
GtkWidget *list_widget;
|
|
||||||
GtkTreeIter iter;
|
|
||||||
GtkTreeModel *treemodel;
|
|
||||||
gint number_of_rows;
|
|
||||||
gchar tag[1024];
|
|
||||||
gint counter;
|
|
||||||
gint row;
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
|
|
||||||
g_metadata = gimp_image_get_metadata (image_id);
|
g_metadata = gimp_image_get_metadata (image_id);
|
||||||
|
|
||||||
@ -3819,552 +3926,30 @@ metadata_editor_write_callback (GtkWidget *dialog,
|
|||||||
"Xmp.plus.PropertyReleaseID",
|
"Xmp.plus.PropertyReleaseID",
|
||||||
COL_PROP_REL_ID);
|
COL_PROP_REL_ID);
|
||||||
|
|
||||||
/* DO LOCATION SHOWN (LISTSTORE) */
|
write_metadata_tag_multiple (builder, g_metadata, GEXIV2_STRUCTURE_XA_BAG,
|
||||||
|
"Xmp.iptcExt.LocationShown",
|
||||||
list_widget = builder_get_widget (builder, "Xmp.iptcExt.LocationShown");
|
n_locationshown, locationshown, NULL);
|
||||||
|
|
||||||
treemodel = gtk_tree_view_get_model (GTK_TREE_VIEW (list_widget));
|
write_metadata_tag_multiple (builder, g_metadata, GEXIV2_STRUCTURE_XA_BAG,
|
||||||
|
"Xmp.iptcExt.ArtworkOrObject",
|
||||||
number_of_rows = gtk_tree_model_iter_n_children (treemodel, NULL);
|
n_artworkorobject, artworkorobject, NULL);
|
||||||
|
|
||||||
/* CLEAR LOCATION SHOW DATA */
|
write_metadata_tag_multiple (builder, g_metadata, GEXIV2_STRUCTURE_XA_BAG,
|
||||||
|
"Xmp.iptcExt.RegistryId",
|
||||||
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata),
|
n_registryid, registryid, NULL);
|
||||||
LOCATIONSHOWN_HEADER);
|
|
||||||
|
write_metadata_tag_multiple (builder, g_metadata, GEXIV2_STRUCTURE_XA_SEQ,
|
||||||
for (row = 0; row < 256; row++)
|
"Xmp.plus.ImageCreator",
|
||||||
{
|
n_imagecreator, imagecreator, NULL);
|
||||||
gint item;
|
|
||||||
|
write_metadata_tag_multiple (builder, g_metadata, GEXIV2_STRUCTURE_XA_SEQ,
|
||||||
for (item = 0; item < n_locationshown; item++)
|
"Xmp.plus.CopyrightOwner",
|
||||||
{
|
n_copyrightowner, copyrightowner, NULL);
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
LOCATIONSHOWN_HEADER, row, locationshown[item]);
|
write_metadata_tag_multiple (builder, g_metadata, GEXIV2_STRUCTURE_XA_SEQ,
|
||||||
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata), tag);
|
"Xmp.plus.Licensor",
|
||||||
}
|
n_licensor, licensor,
|
||||||
}
|
licensor_special_handling);
|
||||||
|
|
||||||
/* SET LOCATION SHOW DATA */
|
|
||||||
gexiv2_metadata_set_xmp_tag_struct (GEXIV2_METADATA (g_metadata),
|
|
||||||
"Xmp.iptcExt.LocationShown",
|
|
||||||
GEXIV2_STRUCTURE_XA_BAG);
|
|
||||||
|
|
||||||
counter = 1;
|
|
||||||
for (row = 0; row < number_of_rows; row++)
|
|
||||||
{
|
|
||||||
if (gtk_tree_model_iter_nth_child (treemodel, &iter, NULL, row))
|
|
||||||
{
|
|
||||||
gchar *tag_data;
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_LOC_SHO_SUB_LOC, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
LOCATIONSHOWN_HEADER, counter, locationshown[0]);
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, tag_data);
|
|
||||||
g_free (tag_data);
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_LOC_SHO_CITY, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
LOCATIONSHOWN_HEADER, counter, locationshown[1]);
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, tag_data);
|
|
||||||
g_free (tag_data);
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_LOC_SHO_STATE_PROV, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
LOCATIONSHOWN_HEADER, counter, locationshown[2]);
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, tag_data);
|
|
||||||
g_free (tag_data);
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_LOC_SHO_CNTRY, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
LOCATIONSHOWN_HEADER, counter, locationshown[3]);
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, tag_data);
|
|
||||||
g_free (tag_data);
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_LOC_SHO_CNTRY_ISO, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
LOCATIONSHOWN_HEADER, counter, locationshown[4]);
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, tag_data);
|
|
||||||
g_free (tag_data);
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_LOC_SHO_CNTRY_WRLD_REG, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
LOCATIONSHOWN_HEADER, counter, locationshown[5]);
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, tag_data);
|
|
||||||
g_free (tag_data);
|
|
||||||
|
|
||||||
counter++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* DO ARTWORK OR OBJECT (LISTSTORE) */
|
|
||||||
|
|
||||||
list_widget = builder_get_widget (builder, "Xmp.iptcExt.ArtworkOrObject");
|
|
||||||
|
|
||||||
treemodel = gtk_tree_view_get_model (GTK_TREE_VIEW (list_widget));
|
|
||||||
|
|
||||||
number_of_rows = gtk_tree_model_iter_n_children (treemodel, NULL);
|
|
||||||
|
|
||||||
/* CLEAR ARTWORK OR OBJECT DATA */
|
|
||||||
|
|
||||||
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata),
|
|
||||||
ARTWORKOROBJECT_HEADER);
|
|
||||||
|
|
||||||
for (row = 0; row < 256; row++)
|
|
||||||
{
|
|
||||||
gint item;
|
|
||||||
|
|
||||||
for (item = 0; item < n_artworkorobject; item++)
|
|
||||||
{
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
ARTWORKOROBJECT_HEADER, row, artworkorobject[item]);
|
|
||||||
|
|
||||||
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata), tag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* SET ARTWORK OR OBJECT DATA */
|
|
||||||
|
|
||||||
gexiv2_metadata_set_xmp_tag_struct (GEXIV2_METADATA (g_metadata),
|
|
||||||
"Xmp.iptcExt.ArtworkOrObject",
|
|
||||||
GEXIV2_STRUCTURE_XA_BAG);
|
|
||||||
|
|
||||||
counter = 1;
|
|
||||||
for (row = 0; row < number_of_rows; row++)
|
|
||||||
{
|
|
||||||
if (gtk_tree_model_iter_nth_child (treemodel, &iter, NULL, row))
|
|
||||||
{
|
|
||||||
gchar *tag_data;
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_AOO_TITLE, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
ARTWORKOROBJECT_HEADER, counter, artworkorobject[0]);
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, tag_data);
|
|
||||||
g_free (tag_data);
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_AOO_DATE_CREAT, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
ARTWORKOROBJECT_HEADER, counter, artworkorobject[1]);
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, tag_data);
|
|
||||||
g_free (tag_data);
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_AOO_CREATOR, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
ARTWORKOROBJECT_HEADER, counter, artworkorobject[2]);
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, tag_data);
|
|
||||||
g_free (tag_data);
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_AOO_SOURCE, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
ARTWORKOROBJECT_HEADER, counter, artworkorobject[3]);
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, tag_data);
|
|
||||||
g_free (tag_data);
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_AOO_SRC_INV_ID, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
ARTWORKOROBJECT_HEADER, counter, artworkorobject[4]);
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, tag_data);
|
|
||||||
g_free (tag_data);
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_AOO_CR_NOT, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
ARTWORKOROBJECT_HEADER, counter, artworkorobject[5]);
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, tag_data);
|
|
||||||
g_free (tag_data);
|
|
||||||
|
|
||||||
counter++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* DO REGISTRY ID (LISTSTORE) */
|
|
||||||
|
|
||||||
list_widget = builder_get_widget (builder, "Xmp.iptcExt.RegistryId");
|
|
||||||
|
|
||||||
treemodel = gtk_tree_view_get_model (GTK_TREE_VIEW (list_widget));
|
|
||||||
|
|
||||||
number_of_rows = gtk_tree_model_iter_n_children (treemodel, NULL);
|
|
||||||
|
|
||||||
/* CLEAR REGISTRY ID DATA */
|
|
||||||
|
|
||||||
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata),
|
|
||||||
REGISTRYID_HEADER);
|
|
||||||
|
|
||||||
for (row = 0; row < 256; row++)
|
|
||||||
{
|
|
||||||
gint item;
|
|
||||||
|
|
||||||
for (item = 0; item < n_registryid; item++)
|
|
||||||
{
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
REGISTRYID_HEADER, row, registryid[item]);
|
|
||||||
|
|
||||||
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata), tag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* SET REGISTRY ID DATA */
|
|
||||||
|
|
||||||
gexiv2_metadata_set_xmp_tag_struct (GEXIV2_METADATA (g_metadata),
|
|
||||||
"Xmp.iptcExt.RegistryId",
|
|
||||||
GEXIV2_STRUCTURE_XA_BAG);
|
|
||||||
|
|
||||||
counter = 1;
|
|
||||||
for (row = 0; row < number_of_rows; row++)
|
|
||||||
{
|
|
||||||
if (gtk_tree_model_iter_nth_child (treemodel, &iter, NULL, row))
|
|
||||||
{
|
|
||||||
gchar *tag_data;
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_REGISTRY_ORG_ID, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
REGISTRYID_HEADER, counter, registryid[0]);
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, tag_data);
|
|
||||||
g_free (tag_data);
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_REGISTRY_ITEM_ID, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
REGISTRYID_HEADER, counter, registryid[1]);
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, tag_data);
|
|
||||||
g_free (tag_data);
|
|
||||||
|
|
||||||
counter++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* DO IMAGE CREATOR (LISTSTORE) */
|
|
||||||
|
|
||||||
list_widget = builder_get_widget (builder, "Xmp.plus.ImageCreator");
|
|
||||||
|
|
||||||
treemodel = gtk_tree_view_get_model (GTK_TREE_VIEW (list_widget));
|
|
||||||
|
|
||||||
number_of_rows = gtk_tree_model_iter_n_children (treemodel, NULL);
|
|
||||||
|
|
||||||
/* CLEAR IMAGE CREATOR DATA */
|
|
||||||
|
|
||||||
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata),
|
|
||||||
IMAGECREATOR_HEADER);
|
|
||||||
|
|
||||||
for (row = 0; row < 256; row++)
|
|
||||||
{
|
|
||||||
gint item;
|
|
||||||
|
|
||||||
for (item = 0; item < n_imagecreator; item++)
|
|
||||||
{
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
IMAGECREATOR_HEADER, row, imagecreator[item]);
|
|
||||||
|
|
||||||
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata), tag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* SET IMAGE CREATOR DATA */
|
|
||||||
|
|
||||||
gexiv2_metadata_set_xmp_tag_struct (GEXIV2_METADATA (g_metadata),
|
|
||||||
"Xmp.plus.ImageCreator",
|
|
||||||
GEXIV2_STRUCTURE_XA_SEQ);
|
|
||||||
|
|
||||||
counter = 1;
|
|
||||||
for (row = 0; row < number_of_rows; row++)
|
|
||||||
{
|
|
||||||
if (gtk_tree_model_iter_nth_child (treemodel, &iter, NULL, row))
|
|
||||||
{
|
|
||||||
gchar *tag_data;
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_IMG_CR8_NAME, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
IMAGECREATOR_HEADER, counter, imagecreator[0]);
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, tag_data);
|
|
||||||
g_free (tag_data);
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_IMG_CR8_ID, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
IMAGECREATOR_HEADER, counter, imagecreator[1]);
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, tag_data);
|
|
||||||
g_free (tag_data);
|
|
||||||
|
|
||||||
counter++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* DO COPYRIGHT OWNER (LISTSTORE) */
|
|
||||||
|
|
||||||
list_widget = builder_get_widget (builder, "Xmp.plus.CopyrightOwner");
|
|
||||||
|
|
||||||
treemodel = gtk_tree_view_get_model (GTK_TREE_VIEW (list_widget));
|
|
||||||
|
|
||||||
number_of_rows = gtk_tree_model_iter_n_children (treemodel, NULL);
|
|
||||||
|
|
||||||
/* CLEAR COPYRIGHT OWNER DATA */
|
|
||||||
|
|
||||||
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata),
|
|
||||||
COPYRIGHTOWNER_HEADER);
|
|
||||||
|
|
||||||
for (row = 0; row < 256; row++)
|
|
||||||
{
|
|
||||||
gint item;
|
|
||||||
|
|
||||||
for (item = 0; item < n_copyrightowner; item++)
|
|
||||||
{
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
COPYRIGHTOWNER_HEADER, row, copyrightowner[item]);
|
|
||||||
|
|
||||||
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata), tag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* SET COPYRIGHT OWNER DATA */
|
|
||||||
|
|
||||||
gexiv2_metadata_set_xmp_tag_struct (GEXIV2_METADATA (g_metadata),
|
|
||||||
"Xmp.plus.CopyrightOwner",
|
|
||||||
GEXIV2_STRUCTURE_XA_SEQ);
|
|
||||||
|
|
||||||
counter = 1;
|
|
||||||
for (row = 0; row < number_of_rows; row++)
|
|
||||||
{
|
|
||||||
if (gtk_tree_model_iter_nth_child (treemodel, &iter, NULL, row))
|
|
||||||
{
|
|
||||||
gchar *tag_data;
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_CR_OWNER_NAME, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
COPYRIGHTOWNER_HEADER, counter, copyrightowner[0]);
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, tag_data);
|
|
||||||
g_free (tag_data);
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_CR_OWNER_ID, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
COPYRIGHTOWNER_HEADER, counter, copyrightowner[1]);
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, tag_data);
|
|
||||||
g_free (tag_data);
|
|
||||||
|
|
||||||
counter++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* DO LICENSOR (LISTSTORE) */
|
|
||||||
|
|
||||||
list_widget = builder_get_widget (builder, "Xmp.plus.Licensor");
|
|
||||||
|
|
||||||
treemodel = gtk_tree_view_get_model (GTK_TREE_VIEW (list_widget));
|
|
||||||
|
|
||||||
number_of_rows = gtk_tree_model_iter_n_children (treemodel, NULL);
|
|
||||||
|
|
||||||
/* CLEAR LICENSOR DATA */
|
|
||||||
|
|
||||||
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata),
|
|
||||||
LICENSOR_HEADER);
|
|
||||||
|
|
||||||
for (row = 0; row < 256; row++)
|
|
||||||
{
|
|
||||||
gint item;
|
|
||||||
|
|
||||||
for (item = 0; item < n_licensor; item++)
|
|
||||||
{
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
LICENSOR_HEADER, row, licensor[item]);
|
|
||||||
|
|
||||||
gexiv2_metadata_clear_tag (GEXIV2_METADATA (g_metadata), tag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* SET LICENSOR DATA */
|
|
||||||
|
|
||||||
gexiv2_metadata_set_xmp_tag_struct (GEXIV2_METADATA (g_metadata),
|
|
||||||
"Xmp.plus.Licensor",
|
|
||||||
GEXIV2_STRUCTURE_XA_SEQ);
|
|
||||||
|
|
||||||
counter = 1;
|
|
||||||
for (row = 0; row < number_of_rows; row++)
|
|
||||||
{
|
|
||||||
if (gtk_tree_model_iter_nth_child (treemodel, &iter, NULL, row))
|
|
||||||
{
|
|
||||||
gchar *tag_data;
|
|
||||||
gchar type1[256];
|
|
||||||
gchar type2[256];
|
|
||||||
gint types;
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_LICENSOR_NAME, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
LICENSOR_HEADER, counter, licensor[0]);
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, tag_data);
|
|
||||||
g_free (tag_data);
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_LICENSOR_ID, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
LICENSOR_HEADER, counter, licensor[1]);
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, tag_data);
|
|
||||||
g_free (tag_data);
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_LICENSOR_PHONE1, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
LICENSOR_HEADER, counter, licensor[2]);
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, tag_data);
|
|
||||||
g_free (tag_data);
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_LICENSOR_PHONE_TYPE1, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
LICENSOR_HEADER, counter, licensor[3]);
|
|
||||||
|
|
||||||
strcpy (type1, phone_types[0].data);
|
|
||||||
|
|
||||||
if (tag_data != NULL)
|
|
||||||
{
|
|
||||||
for (types = 0; types < 6; types++)
|
|
||||||
{
|
|
||||||
if (! strcmp (tag_data, gettext (phone_types[types].display)))
|
|
||||||
{
|
|
||||||
strcpy (type1, phone_types[types].data);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, type1);
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_LICENSOR_PHONE2, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
LICENSOR_HEADER, counter, licensor[4]);
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, tag_data);
|
|
||||||
g_free (tag_data);
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_LICENSOR_PHONE_TYPE2, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
LICENSOR_HEADER, counter, licensor[5]);
|
|
||||||
|
|
||||||
strcpy (type2, phone_types[0].data);
|
|
||||||
|
|
||||||
if (tag_data != NULL)
|
|
||||||
{
|
|
||||||
for (types = 0; types < 6; types++)
|
|
||||||
{
|
|
||||||
g_log (ME_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "%d %s %s", types, tag_data,
|
|
||||||
gettext (phone_types[types].display));
|
|
||||||
if (! strcmp (tag_data, gettext (phone_types[types].display)))
|
|
||||||
{
|
|
||||||
g_log (ME_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "%d %s", types, phone_types[types].data);
|
|
||||||
strcpy (type2, phone_types[types].data);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
set_tag_string (g_metadata, tag, type2);
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_LICENSOR_EMAIL, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
LICENSOR_HEADER, counter, licensor[6]);
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, tag_data);
|
|
||||||
g_free (tag_data);
|
|
||||||
|
|
||||||
gtk_tree_model_get (treemodel, &iter,
|
|
||||||
COL_LICENSOR_WEB, &tag_data,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
g_snprintf (tag, sizeof (tag), "%s[%d]%s",
|
|
||||||
LICENSOR_HEADER, counter, licensor[7]);
|
|
||||||
|
|
||||||
set_tag_string (g_metadata, tag, tag_data);
|
|
||||||
g_free (tag_data);
|
|
||||||
|
|
||||||
counter++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* DO CREATOR TAGS */
|
/* DO CREATOR TAGS */
|
||||||
|
|
||||||
|
@ -348,6 +348,18 @@ const gchar *licensor[] =
|
|||||||
};
|
};
|
||||||
const gint n_licensor = G_N_ELEMENTS (licensor);
|
const gint n_licensor = G_N_ELEMENTS (licensor);
|
||||||
|
|
||||||
|
const gint licensor_special_handling[] =
|
||||||
|
{
|
||||||
|
METADATA_NONE,
|
||||||
|
METADATA_NONE,
|
||||||
|
METADATA_NONE,
|
||||||
|
METADATA_PHONETYPE,
|
||||||
|
METADATA_NONE,
|
||||||
|
METADATA_PHONETYPE,
|
||||||
|
METADATA_NONE,
|
||||||
|
METADATA_NONE
|
||||||
|
};
|
||||||
|
|
||||||
#ifdef USE_TAGS
|
#ifdef USE_TAGS
|
||||||
const gchar *imagesupplier[] =
|
const gchar *imagesupplier[] =
|
||||||
{
|
{
|
||||||
@ -380,12 +392,12 @@ const gint n_registryid = G_N_ELEMENTS (registryid);
|
|||||||
|
|
||||||
const gchar *artworkorobject[] =
|
const gchar *artworkorobject[] =
|
||||||
{
|
{
|
||||||
|
"/Iptc4xmpExt:AOTitle",
|
||||||
"/Iptc4xmpExt:AODateCreated",
|
"/Iptc4xmpExt:AODateCreated",
|
||||||
|
"/Iptc4xmpExt:AOCreator",
|
||||||
"/Iptc4xmpExt:AOSource",
|
"/Iptc4xmpExt:AOSource",
|
||||||
"/Iptc4xmpExt:AOSourceInvNo",
|
"/Iptc4xmpExt:AOSourceInvNo",
|
||||||
"/Iptc4xmpExt:AOTitle",
|
|
||||||
"/Iptc4xmpExt:AOCopyrightNotice",
|
"/Iptc4xmpExt:AOCopyrightNotice",
|
||||||
"/Iptc4xmpExt:AOCreator"
|
|
||||||
};
|
};
|
||||||
const gint n_artworkorobject = G_N_ELEMENTS (artworkorobject);
|
const gint n_artworkorobject = G_N_ELEMENTS (artworkorobject);
|
||||||
|
|
||||||
|
@ -116,6 +116,13 @@ enum
|
|||||||
PROP_REL_NUM_COLS
|
PROP_REL_NUM_COLS
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum METADATA_SPECIAL_PROCESSING
|
||||||
|
{
|
||||||
|
METADATA_NONE = 0,
|
||||||
|
METADATA_PHONETYPE,
|
||||||
|
METADATA_PREPROCESS_TEXT
|
||||||
|
};
|
||||||
|
|
||||||
extern const metadata_tag default_metadata_tags[];
|
extern const metadata_tag default_metadata_tags[];
|
||||||
extern const gint n_default_metadata_tags;
|
extern const gint n_default_metadata_tags;
|
||||||
|
|
||||||
@ -200,6 +207,7 @@ extern const TranslateTag imageSupplierInfoTags[];
|
|||||||
#define LICENSOR_HEADER "Xmp.plus.Licensor"
|
#define LICENSOR_HEADER "Xmp.plus.Licensor"
|
||||||
extern const gchar *licensor[];
|
extern const gchar *licensor[];
|
||||||
extern const gint n_licensor;
|
extern const gint n_licensor;
|
||||||
|
extern const gint licensor_special_handling[];
|
||||||
|
|
||||||
#ifdef USE_TAGS
|
#ifdef USE_TAGS
|
||||||
#define IMAGESUPPLIER_HEADER "Xmp.plus.ImageSupplier"
|
#define IMAGESUPPLIER_HEADER "Xmp.plus.ImageSupplier"
|
||||||
|
Reference in New Issue
Block a user