diff options
Diffstat (limited to 'plugins/gtkui/trkproperties.c')
-rw-r--r-- | plugins/gtkui/trkproperties.c | 134 |
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 } - |