diff options
author | Alexey Yakovenko <wakeroid@gmail.com> | 2010-03-28 09:57:20 +0200 |
---|---|---|
committer | Alexey Yakovenko <wakeroid@gmail.com> | 2010-03-28 09:57:20 +0200 |
commit | 8a105a63ee117ade3e9e29c0f3e9e577a6882c18 (patch) | |
tree | d3ccb130e3a18455156914c73df0be52bb1d3673 /plugins | |
parent | a6e88e9bd292e5359c80ebbffbaee1952c50a885 (diff) |
id3v2 writer WIP
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/gtkui/callbacks.h | 4 | ||||
-rw-r--r-- | plugins/gtkui/deadbeef.glade | 3 | ||||
-rw-r--r-- | plugins/gtkui/interface.c | 15 | ||||
-rw-r--r-- | plugins/gtkui/trkproperties.c | 40 |
4 files changed, 53 insertions, 9 deletions
diff --git a/plugins/gtkui/callbacks.h b/plugins/gtkui/callbacks.h index 8010ed26..d8b11651 100644 --- a/plugins/gtkui/callbacks.h +++ b/plugins/gtkui/callbacks.h @@ -777,3 +777,7 @@ on_toggle_tabs (GtkMenuItem *menuitem, void on_toggle_eq (GtkMenuItem *menuitem, gpointer user_data); + +void +on_write_tags_clicked (GtkButton *button, + gpointer user_data); diff --git a/plugins/gtkui/deadbeef.glade b/plugins/gtkui/deadbeef.glade index 28252d9e..480b70d3 100644 --- a/plugins/gtkui/deadbeef.glade +++ b/plugins/gtkui/deadbeef.glade @@ -1931,7 +1931,7 @@ <property name="spacing">0</property> <child> - <widget class="GtkButton" id="button2"> + <widget class="GtkButton" id="write_tags"> <property name="visible">True</property> <property name="can_default">True</property> <property name="can_focus">True</property> @@ -1939,6 +1939,7 @@ <property name="use_underline">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">True</property> + <signal name="clicked" handler="on_write_tags_clicked" last_modification_time="Sat, 27 Mar 2010 20:48:33 GMT"/> </widget> </child> </widget> diff --git a/plugins/gtkui/interface.c b/plugins/gtkui/interface.c index fc877db3..6f7e5f21 100644 --- a/plugins/gtkui/interface.c +++ b/plugins/gtkui/interface.c @@ -1114,7 +1114,7 @@ create_trackproperties (void) GtkWidget *scrolledwindow5; GtkWidget *metalist; GtkWidget *hbuttonbox1; - GtkWidget *button2; + GtkWidget *write_tags; GtkWidget *label64; trackproperties = gtk_window_new (GTK_WINDOW_TOPLEVEL); @@ -1315,10 +1315,10 @@ create_trackproperties (void) gtk_box_pack_start (GTK_BOX (vbox16), hbuttonbox1, FALSE, FALSE, 0); gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox1), GTK_BUTTONBOX_END); - button2 = gtk_button_new_with_mnemonic ("Write"); - gtk_widget_show (button2); - gtk_container_add (GTK_CONTAINER (hbuttonbox1), button2); - GTK_WIDGET_SET_FLAGS (button2, GTK_CAN_DEFAULT); + write_tags = gtk_button_new_with_mnemonic ("Write"); + gtk_widget_show (write_tags); + gtk_container_add (GTK_CONTAINER (hbuttonbox1), write_tags); + GTK_WIDGET_SET_FLAGS (write_tags, GTK_CAN_DEFAULT); label64 = gtk_label_new ("Full"); gtk_widget_show (label64); @@ -1330,6 +1330,9 @@ create_trackproperties (void) g_signal_connect ((gpointer) trackproperties, "delete_event", G_CALLBACK (on_trackproperties_delete_event), NULL); + g_signal_connect ((gpointer) write_tags, "clicked", + G_CALLBACK (on_write_tags_clicked), + NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (trackproperties, trackproperties, "trackproperties"); @@ -1369,7 +1372,7 @@ create_trackproperties (void) GLADE_HOOKUP_OBJECT (trackproperties, scrolledwindow5, "scrolledwindow5"); GLADE_HOOKUP_OBJECT (trackproperties, metalist, "metalist"); GLADE_HOOKUP_OBJECT (trackproperties, hbuttonbox1, "hbuttonbox1"); - GLADE_HOOKUP_OBJECT (trackproperties, button2, "button2"); + GLADE_HOOKUP_OBJECT (trackproperties, write_tags, "write_tags"); GLADE_HOOKUP_OBJECT (trackproperties, label64, "label64"); return trackproperties; diff --git a/plugins/gtkui/trkproperties.c b/plugins/gtkui/trkproperties.c index a3e2a413..216f414e 100644 --- a/plugins/gtkui/trkproperties.c +++ b/plugins/gtkui/trkproperties.c @@ -25,9 +25,8 @@ #include "../../deadbeef.h" #include "gtkui.h" -#pragma GCC optimize("O0") - static GtkWidget *trackproperties; +static DB_playItem_t *track; gboolean on_trackproperties_delete_event (GtkWidget *widget, @@ -35,6 +34,10 @@ on_trackproperties_delete_event (GtkWidget *widget, gpointer user_data) { trackproperties = NULL; + if (track) { + deadbeef->pl_item_unref (track); + track = NULL; + } return FALSE; } @@ -45,6 +48,10 @@ on_trackproperties_key_press_event (GtkWidget *widget, { if (event->keyval == GDK_Escape) { trackproperties = NULL; + if (track) { + deadbeef->pl_item_unref (track); + track = NULL; + } gtk_widget_destroy (widget); } return FALSE; @@ -62,6 +69,10 @@ on_metadata_edited (GtkCellRendererText *renderer, gchar *path, gchar *new_text, void show_track_properties_dlg (DB_playItem_t *it) { + if (it) { + deadbeef->pl_item_ref (it); + } + track = it; if (!trackproperties) { trackproperties = create_trackproperties (); gtk_window_set_transient_for (GTK_WINDOW (trackproperties), GTK_WINDOW (mainwin)); @@ -183,3 +194,28 @@ show_track_properties_dlg (DB_playItem_t *it) { gtk_window_present (GTK_WINDOW (widget)); } +void +on_write_tags_clicked (GtkButton *button, + gpointer user_data) +{ + return; + DB_id3v2_tag_t tag; + memset (&tag, 0, sizeof (tag)); + DB_FILE *fp = deadbeef->fopen (track->fname); + if (fp) { + if (deadbeef->junk_read_id3v2_full (NULL, &tag, fp) < 0) { + fprintf (stderr, "failed to read tags from %s\n", track->fname); + goto error; + } + if (deadbeef->junk_write_id3v2 (track->fname, &tag) < 0) { + fprintf (stderr, "failed to write tags to %s\n", track->fname); + goto error; + } + } +error: + if (fp) { + deadbeef->fclose (fp); + } + deadbeef->junk_free_id3v2 (&tag); +} + |