static void tag_iterate (const GstTagList *list, const char *tag, GFileInfo *info) { const char *tag_key; char *attribute = NULL; tag_key = NULL; if (strcmp (tag, "container-format") == 0) { tag_key = "general::format"; } else if (strcmp (tag, "bitrate") == 0) { tag_key = "audio-video::general::bitrate"; } else if (strcmp (tag, "encoder") == 0) { tag_key = "audio-video::general::encoder"; } else if (strcmp (tag, "title") == 0) { tag_key = "general::title"; } else if (strcmp (tag, "artist") == 0) { tag_key = "audio-video::general::artist"; } else if (strcmp (tag, "album") == 0) { tag_key = "audio-video::general::album"; } else if (strcmp (tag, "audio-codec") == 0) { tag_key = "audio-video::audio::codec"; } else if (strcmp (tag, "video-codec") == 0) { tag_key = "audio-video::video::codec"; } if (tag_key == NULL) { GthMetadataInfo *metadata_info; attribute = g_strconcat ("audio-video::other::", tag, NULL); metadata_info = gth_main_get_metadata_info (attribute); if (metadata_info == NULL) { GthMetadataInfo *info; info = g_new0 (GthMetadataInfo, 1); info->id = attribute; info->display_name = gst_tag_get_nick (tag); info->category = "audio-video::other"; info->sort_order = 500; info->flags = GTH_METADATA_ALLOW_IN_PROPERTIES_VIEW; metadata_info = gth_main_register_metadata_info (info); g_free (info); } tag_key = attribute; } add_metadata_from_tag (info, list, tag, tag_key); g_free (attribute); }
void gth_metadata_chooser_set_selection (GthMetadataChooser *self, char *ids) { GtkListStore *store; char **attributes_v; char **ids_v; int i; GtkTreeIter iter; GHashTable *category_root; store = (GtkListStore *) gtk_tree_view_get_model (GTK_TREE_VIEW (self)); g_signal_handler_block (store, self->priv->row_inserted_event); g_signal_handler_block (store, self->priv->row_deleted_event); gtk_list_store_clear (store); attributes_v = gth_main_get_metadata_attributes ("*"); ids_v = g_strsplit (ids, ",", -1); for (i = 0; ids_v[i] != NULL; i++) { int idx; GthMetadataInfo *info; const char *name; GthMetadataCategory *category; idx = _g_strv_find (attributes_v, ids_v[i]); if (idx < 0) continue; info = gth_main_get_metadata_info (attributes_v[idx]); if ((info == NULL) || ((info->flags & self->priv->allowed_flags) == 0)) continue; name = info->display_name; if (name == NULL) name = info->id; category = gth_main_get_metadata_category (info->category); gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, WEIGHT_COLUMN, PANGO_WEIGHT_NORMAL, NAME_COLUMN, name, ID_COLUMN, info->id, SORT_ORDER_COLUMN, (category->sort_order * CATEGORY_SIZE) + info->sort_order, USED_COLUMN, TRUE, SEPARATOR_COLUMN, FALSE, IS_METADATA_COLUMN, TRUE, -1); } gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, SEPARATOR_COLUMN, TRUE, -1); category_root = g_hash_table_new_full (g_str_hash, g_str_equal, (GDestroyNotify) g_free, NULL); for (i = 0; attributes_v[i] != NULL; i++) { GtkTreeIter iter; GthMetadataInfo *info; const char *name; GthMetadataCategory *category; if (_g_strv_find (ids_v, attributes_v[i]) >= 0) continue; info = gth_main_get_metadata_info (attributes_v[i]); if ((info == NULL) || ((info->flags & self->priv->allowed_flags) == 0)) continue; name = info->display_name; if (name == NULL) name = info->id; category = gth_main_get_metadata_category (info->category); if (g_hash_table_lookup (category_root, category->id) == NULL) { gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, WEIGHT_COLUMN, PANGO_WEIGHT_BOLD, NAME_COLUMN, category->display_name, ID_COLUMN, category->id, SORT_ORDER_COLUMN, category->sort_order * CATEGORY_SIZE, USED_COLUMN, FALSE, SEPARATOR_COLUMN, FALSE, IS_METADATA_COLUMN, FALSE, -1); g_hash_table_insert (category_root, g_strdup (info->category), GINT_TO_POINTER (1)); } gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, WEIGHT_COLUMN, PANGO_WEIGHT_NORMAL, NAME_COLUMN, name, ID_COLUMN, info->id, SORT_ORDER_COLUMN, (category->sort_order * CATEGORY_SIZE) + info->sort_order, USED_COLUMN, FALSE, SEPARATOR_COLUMN, FALSE, IS_METADATA_COLUMN, TRUE, -1); } gth_metadata_chooser_reorder_list (self); g_signal_handler_unblock (store, self->priv->row_inserted_event); g_signal_handler_unblock (store, self->priv->row_deleted_event); g_hash_table_destroy (category_root); g_strfreev (attributes_v); g_strfreev (ids_v); }