diff options
author | 2010-03-30 00:25:06 +0300 | |
---|---|---|
committer | 2010-03-30 00:25:06 +0300 | |
commit | 0c29d901dd3439fc676a180c4552f52570b35831 (patch) | |
tree | e8c079376e0249bb8eea4b1bd38e47c1c45ef4f7 /plugins/gtkui | |
parent | 788fcb6136e15bf84b2424fcb29e7688dd25f7c6 (diff) | |
parent | 38b5a92feebd5501e97d4f285f25d8e9bc6bba69 (diff) |
Merge branch 'devel' of git://deadbeef.git.sourceforge.net/gitroot/deadbeef/deadbeef into eq
Diffstat (limited to 'plugins/gtkui')
-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 | 77 |
4 files changed, 90 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 2d3f59f5..dfc02906 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)); @@ -147,6 +158,7 @@ show_track_properties_dlg (DB_playItem_t *it) { "numtracks", "Total Tracks", "disc", "Disc Number", "comment", "Comment", + "vendor", "Encoded by", NULL }; @@ -182,3 +194,64 @@ show_track_properties_dlg (DB_playItem_t *it) { gtk_window_present (GTK_WINDOW (widget)); } +void +on_write_tags_clicked (GtkButton *button, + gpointer user_data) +{ + fprintf (stderr, "on_write_tags_clicked\n"); + if (!deadbeef->conf_get_int ("enable_tag_writing", 0)) { + fprintf (stderr, "tag writing disabled\n"); + 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; + } + fprintf (stderr, "writing id3v2.%d.%d\n", tag.version[0], tag.version[1]); + +#if 0 + // 2.3 editing test + if (tag.version[0] == 3) { + // remove frames + deadbeef->junk_id3v2_remove_frames (&tag, "TPE1"); + deadbeef->junk_id3v2_remove_frames (&tag, "TIT2"); + + // add frames + deadbeef->junk_id3v2_add_text_frame_23 (&tag, "TPE1", "test title"); + deadbeef->junk_id3v2_add_text_frame_23 (&tag, "TIT2", "название на русском"); + if (deadbeef->junk_write_id3v2 (track->fname, &tag) < 0) { + fprintf (stderr, "failed to write tags to %s\n", track->fname); + goto error; + } + } +#endif + // 2.4 -> 2.3 conversion test + if (tag.version[0] == 4) { + DB_id3v2_tag_t tag23; + memset (&tag23, 0, sizeof (tag23)); + int res = deadbeef->junk_id3v2_convert_24_to_23 (&tag, &tag23); + if (res == -1) { + deadbeef->junk_free_id3v2 (&tag23); + goto error; + } + if (deadbeef->junk_write_id3v2 (track->fname, &tag23) < 0) { + fprintf (stderr, "failed to write tags to %s\n", track->fname); + goto error; + } + } + + } + else { + fprintf (stderr, "failed to open %s\n", track->fname); + } +error: + if (fp) { + deadbeef->fclose (fp); + } + deadbeef->junk_free_id3v2 (&tag); +} + |