summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-03-28 09:57:20 +0200
committerGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-03-28 09:57:20 +0200
commit8a105a63ee117ade3e9e29c0f3e9e577a6882c18 (patch)
treed3ccb130e3a18455156914c73df0be52bb1d3673 /plugins
parenta6e88e9bd292e5359c80ebbffbaee1952c50a885 (diff)
id3v2 writer WIP
Diffstat (limited to 'plugins')
-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.c40
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);
+}
+