コード例 #1
0
ファイル: gstreamer-utils.c プロジェクト: KapTmaN/gthumb
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);
}
コード例 #2
0
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);
}