summaryrefslogtreecommitdiff
path: root/plugins/gtkui
diff options
context:
space:
mode:
authorGravatar Viktor Semykin <thesame.ml@gmail.com>2010-03-30 00:25:06 +0300
committerGravatar Viktor Semykin <thesame.ml@gmail.com>2010-03-30 00:25:06 +0300
commit0c29d901dd3439fc676a180c4552f52570b35831 (patch)
treee8c079376e0249bb8eea4b1bd38e47c1c45ef4f7 /plugins/gtkui
parent788fcb6136e15bf84b2424fcb29e7688dd25f7c6 (diff)
parent38b5a92feebd5501e97d4f285f25d8e9bc6bba69 (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.h4
-rw-r--r--plugins/gtkui/deadbeef.glade3
-rw-r--r--plugins/gtkui/interface.c15
-rw-r--r--plugins/gtkui/trkproperties.c77
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);
+}
+