summaryrefslogtreecommitdiff
path: root/plugins/gtkui/trkproperties.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/gtkui/trkproperties.c')
-rw-r--r--plugins/gtkui/trkproperties.c134
1 files changed, 55 insertions, 79 deletions
diff --git a/plugins/gtkui/trkproperties.c b/plugins/gtkui/trkproperties.c
index 2f8faa6c..481cdc8c 100644
--- a/plugins/gtkui/trkproperties.c
+++ b/plugins/gtkui/trkproperties.c
@@ -58,6 +58,20 @@ on_trackproperties_key_press_event (GtkWidget *widget,
}
void
+on_closebtn_clicked (GtkButton *button,
+ gpointer user_data)
+{
+ if (trackproperties) {
+ if (track) {
+ deadbeef->pl_item_unref (track);
+ track = NULL;
+ }
+ gtk_widget_destroy (trackproperties);
+ trackproperties = NULL;
+ }
+}
+
+void
on_metadata_edited (GtkCellRendererText *renderer, gchar *path, gchar *new_text, gpointer user_data) {
GtkListStore *store = GTK_LIST_STORE (user_data);
GtkTreePath *treepath = gtk_tree_path_new_from_string (path);
@@ -67,6 +81,24 @@ on_metadata_edited (GtkCellRendererText *renderer, gchar *path, gchar *new_text,
gtk_list_store_set (store, &iter, 1, new_text, -1);
}
+// full metadata
+static const char *types[] = {
+ "artist", "Artist",
+ "band", "Band / Album Artist",
+ "title", "Track Title",
+ "track", "Track Number",
+ "album", "Album",
+ "genre", "Genre",
+ "year", "Date",
+ "performer", "Performer",
+ "composer", "Composer",
+ "numtracks", "Total Tracks",
+ "disc", "Disc Number",
+ "comment", "Comment",
+ "vendor", "Encoded by",
+ NULL
+};
+
void
show_track_properties_dlg (DB_playItem_t *it) {
if (it) {
@@ -81,87 +113,9 @@ show_track_properties_dlg (DB_playItem_t *it) {
GtkWidget *widget = trackproperties;
GtkWidget *w;
const char *meta;
- // fill in metadata
// location
w = lookup_widget (widget, "location");
gtk_entry_set_text (GTK_ENTRY (w), it->fname);
- // title
- w = lookup_widget (widget, "title");
- meta = deadbeef->pl_find_meta (it, "title");
- if (!meta) {
- meta = "";
- }
- gtk_entry_set_text (GTK_ENTRY (w), meta);
- // artist
- w = lookup_widget (widget, "artist");
- meta = deadbeef->pl_find_meta (it, "artist");
- if (!meta) {
- meta = "";
- }
- gtk_entry_set_text (GTK_ENTRY (w), meta);
- // band
- w = lookup_widget (widget, "band");
- meta = deadbeef->pl_find_meta (it, "band");
- if (!meta) {
- meta = "";
- }
- gtk_entry_set_text (GTK_ENTRY (w), meta);
- // album
- w = lookup_widget (widget, "album");
- meta = deadbeef->pl_find_meta (it, "album");
- if (!meta) {
- meta = "";
- }
- gtk_entry_set_text (GTK_ENTRY (w), meta);
- // genre
- w = lookup_widget (widget, "genre");
- meta = deadbeef->pl_find_meta (it, "genre");
- if (!meta) {
- meta = "";
- }
- gtk_entry_set_text (GTK_ENTRY (w), meta);
- // year
- w = lookup_widget (widget, "year");
- meta = deadbeef->pl_find_meta (it, "year");
- if (!meta) {
- meta = "";
- }
- gtk_entry_set_text (GTK_ENTRY (w), meta);
- // track
- w = lookup_widget (widget, "track");
- meta = deadbeef->pl_find_meta (it, "track");
- if (!meta) {
- meta = "";
- }
- gtk_entry_set_text (GTK_ENTRY (w), meta);
- // comment
- w = lookup_widget (widget, "comment");
- meta = deadbeef->pl_find_meta (it, "comment");
- if (!meta) {
- meta = "";
- }
- GtkTextBuffer *buffer = gtk_text_buffer_new (NULL);
- gtk_text_buffer_set_text (buffer, meta, strlen (meta));
- gtk_text_view_set_buffer (GTK_TEXT_VIEW (w), buffer);
- g_object_unref (buffer);
-
- // full metadata
- const char *types[] = {
- "artist", "Artist",
- "band", "Band / Album Artist",
- "title", "Track Title",
- "track", "Track Number",
- "album", "Album",
- "genre", "Genre",
- "year", "Date",
- "performer", "Performer",
- "composer", "Composer",
- "numtracks", "Total Tracks",
- "disc", "Disc Number",
- "comment", "Comment",
- "vendor", "Encoded by",
- NULL
- };
GtkTreeView *tree = GTK_TREE_VIEW (lookup_widget (widget, "metalist"));
GtkListStore *store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
@@ -214,6 +168,25 @@ show_track_properties_dlg (DB_playItem_t *it) {
gtk_window_present (GTK_WINDOW (widget));
}
+static gboolean
+set_metadata_cb (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) {
+ GValue key = {0,}, value = {0,};
+ gtk_tree_model_get_value (model, iter, 0, &key);
+ gtk_tree_model_get_value (model, iter, 1, &value);
+ const char *skey = g_value_get_string (&key);
+ const char *svalue = g_value_get_string (&value);
+
+
+ for (int i = 0; types[i]; i += 2) {
+ if (!strcmp (skey, types[i+1])) {
+ printf ("setting %s = %s\n", types[i], svalue);
+ deadbeef->pl_replace_meta (DB_PLAYITEM (data), types[i], svalue);
+ }
+ }
+
+ return FALSE;
+}
+
void
on_write_tags_clicked (GtkButton *button,
gpointer user_data)
@@ -233,6 +206,10 @@ on_write_tags_clicked (GtkButton *button,
if (!strcmp (decoders[i]->plugin.id, track->decoder_id)) {
dec = decoders[i];
if (dec->write_metadata) {
+ // put all metainfo into track
+ GtkTreeView *tree = GTK_TREE_VIEW (lookup_widget (trackproperties, "metalist"));
+ GtkTreeModel *model = GTK_TREE_MODEL (gtk_tree_view_get_model (tree));
+ gtk_tree_model_foreach (model, set_metadata_cb, track);
dec->write_metadata (track);
}
break;
@@ -323,4 +300,3 @@ error:
deadbeef->junk_free_id3v2 (&tag);
#endif
}
-