diff -Naur gmpc-0.15.5.0.orig/src/browsers/playlist3-metadata-browser.c gmpc-0.15.5.0/src/browsers/playlist3-metadata-browser.c
--- gmpc-0.15.5.0.orig/src/browsers/playlist3-metadata-browser.c 2007-11-29 10:52:03.000000000 -0300
+++ gmpc-0.15.5.0/src/browsers/playlist3-metadata-browser.c 2008-02-10 13:05:18.000000000 -0300
@@ -16,6 +16,7 @@
{ "internal-drop",GTK_TARGET_SAME_APP,99}
};
+GtkWidget *artist, *title, *album, *genre, *comment, *composer, *perfomer, *track, *date;
extern GladeXML *pl3_xml;
void info2_disable_show_current(void);
@@ -32,6 +33,7 @@
static void info2_fill_view(void);
static int info2_key_press_event(GtkWidget *mw, GdkEventKey *event, int type);
static void as_song_clicked(GtkButton *button, gpointer data);
+static void tag_replace_data(GtkButton *button, gpointer data);
static gboolean info2_row_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data);
static void info2_fill_artist_similar_destroy(GtkWidget *widget, gpointer id);
static GtkWidget *info2_create_artist_button(mpd_Song *song);
@@ -321,19 +323,24 @@
}
}
-static void info2_add_table_item(GtkWidget *table,char *name, char *value, int i, int selectable)
+static GtkWidget *info2_add_table_item(GtkWidget *table,char *name, char *value, int i, int selectable)
{
GtkWidget *label;
label = gtk_label_new("");
gtk_label_set_markup(GTK_LABEL(label), name);
gtk_misc_set_alignment(GTK_MISC(label),0,0.5);
gtk_table_attach(GTK_TABLE(table), label,0,1,i,i+1,GTK_SHRINK|GTK_FILL, GTK_SHRINK|GTK_FILL,0,0);
- label = gtk_label_new(value);
- if(selectable)
- gtk_label_set_selectable(GTK_LABEL(label), TRUE);
- gtk_misc_set_alignment(GTK_MISC(label),0,0.5);
+ label = gtk_entry_new_with_max_length(255);
+ gtk_entry_set_text(GTK_ENTRY(label), value ? value : "");
+ if(selectable==1)
+ gtk_widget_set_sensitive(GTK_WIDGET(label), TRUE);
+ else if(selectable==0){
+ gtk_editable_set_editable(GTK_EDITABLE(label), FALSE);
+ }
+ else if(selectable==2)
+ gtk_widget_set_sensitive(GTK_WIDGET(label), FALSE);
gtk_table_attach(GTK_TABLE(table),label,1,2,i,i+1,GTK_EXPAND|GTK_FILL, GTK_SHRINK|GTK_FILL,0,0);
- gtk_label_set_ellipsize(GTK_LABEL(label), PANGO_ELLIPSIZE_END);
+ return label;
}
/**
@@ -372,7 +379,7 @@
* Artist
*/
if(song->artist) {
- info2_add_table_item(table,_("Artist:"),song->artist,i,FALSE);
+ info2_add_table_item(table,_("Artist:"),song->artist,i,0);
i++;
}
if(mpd_server_check_version(connection, 0,13,0) && song->artist)
@@ -386,15 +393,15 @@
if(stats)
{
buffer = g_strdup_printf("%i", stats->numberOfSongs);
- info2_add_table_item(table,_("Songs:"),buffer,i,FALSE);
+ info2_add_table_item(table,_("Songs:"),buffer,i,2);
i++;
q_free(buffer);
/**
* Playtime
*/
buffer = format_time_real(stats->playTime,"");
- info2_add_table_item(table,_("Playtime:"),buffer,i,FALSE);
- i++;
+ info2_add_table_item(table,_("Playtime:"),buffer,i,2);
+ i++;
q_free(buffer);
mpd_database_search_free_stats(stats);
}
@@ -411,7 +418,7 @@
}
if(string->len >0)
{
- info2_add_table_item(table, _("Genre:"), string->str, i,FALSE);
+ info2_add_table_item(table, _("Genre:"), string->str, i,0);
i++;
}
g_string_free(string, TRUE);
@@ -429,7 +436,7 @@
}
if(string->len >0)
{
- info2_add_table_item(table, ngettext("Date: ", "Dates: ", items), string->str, i,FALSE);
+ info2_add_table_item(table, ngettext("Date: ", "Dates: ", items), string->str, i,0);
i++;
}
g_string_free(string, TRUE);
@@ -493,6 +500,7 @@
GtkWidget *expander, *gmtv,*table, *table2,*image,*ali,*button, *label,*hbox;
char *markup = NULL;
int i = 0;
+ int editable, ret;
mpd_Song *cur = mpd_playlist_get_current_song(connection);
/**
@@ -631,39 +639,32 @@
gtk_container_set_border_width(GTK_CONTAINER(table2), 8);
gtk_table_set_col_spacings(GTK_TABLE(table2), 6);
gtk_table_attach(GTK_TABLE(table), table2, 1,2,0,1,GTK_EXPAND|GTK_FILL, GTK_EXPAND|GTK_FILL,0,0);
- if(song->artist) {
- info2_add_table_item(table2,_("Artist:"),song->artist,i,TRUE);
- i++;
- }
- if(song->album) {
- info2_add_table_item(table2,_("Album:"),song->album,i,TRUE);
- i++;
- }
- if(song->genre) {
- info2_add_table_item(table2,_("Genre:"),song->genre,i,TRUE);
- i++;
- }
- if(song->date) {
- info2_add_table_item(table2,_("Date:"),song->date,i,TRUE);
- i++;
- }
- if(song->track) {
- info2_add_table_item(table2,_("Track:"),song->track,i,TRUE);
- i++;
- }
- if(song->composer) {
- info2_add_table_item(table2,_("Composer:"),song->composer,i,TRUE);
- i++;
- }
- if(song->performer) {
- info2_add_table_item(table2,_("Performer:"),song->performer,i,TRUE);
- i++;
- }
-
+ if((ret=mpd_database_tagedit_check(connection, song->file))!=0)
+ editable = 0;
+ else
+ editable = 1;
+ title = info2_add_table_item(table2,_("Title:"),song->title,i,editable);
+ i++;
+ artist = info2_add_table_item(table2,_("Artist:"),song->artist,i,editable);
+ i++;
+ album = info2_add_table_item(table2,_("Album:"),song->album,i,editable);
+ i++;
+ genre = info2_add_table_item(table2,_("Genre:"),song->genre,i,editable);
+ i++;
+ date = info2_add_table_item(table2,_("Date:"),song->date,i,editable);
+ i++;
+ track = info2_add_table_item(table2,_("Track:"),song->track,i,editable);
+ i++;
+ composer = info2_add_table_item(table2,_("Composer:"),song->composer,i,editable);
+ i++;
+ perfomer = info2_add_table_item(table2,_("Performer:"),song->performer,i, editable);
+ i++;
+ comment = info2_add_table_item(table2,_("Comment:"),song->comment,i, editable);
+ i++;
if(song->file) {
/*** Dirname */
char *dirname = g_path_get_dirname(song->file);
- info2_add_table_item(table2,_("Dirname:"),dirname,i,TRUE);
+ info2_add_table_item(table2,_("Dirname:"),dirname,i,2);
i++;
q_free(dirname);
}
@@ -673,7 +674,7 @@
int j = strlen(song->file);
for(;j>0&&song->file[j] != '.';j--);
ext= g_strdup(&(song->file)[j+1]);
- info2_add_table_item(table2,_("Extension:"),ext,i,TRUE);
+ info2_add_table_item(table2,_("Extension:"),ext,i,2);
i++;
q_free(ext);
}
@@ -681,11 +682,15 @@
* Play Button
*/
hbox = gtk_hbox_new(FALSE,6);
- button = gtk_button_new_with_label(_("Replace"));
- gtk_button_set_image(GTK_BUTTON(button),gtk_image_new_from_stock(GTK_STOCK_REDO,GTK_ICON_SIZE_BUTTON));
+ button = gtk_button_new_with_label(_("Save tags"));
+ gtk_button_set_image(GTK_BUTTON(button),gtk_image_new_from_stock(GTK_STOCK_SAVE,GTK_ICON_SIZE_BUTTON));
g_object_set_data_full(G_OBJECT(button), "file",g_strdup(song->file), g_free);
- g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(as_song_clicked), GINT_TO_POINTER(1));
+ g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(tag_replace_data), GINT_TO_POINTER(1));
gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
+ if(editable)
+ gtk_widget_set_sensitive(GTK_WIDGET(button), TRUE);
+ else
+ gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
ali = gtk_alignment_new(0,0.5,0,0);
gtk_container_add(GTK_CONTAINER(ali), button);
gtk_box_pack_start(GTK_BOX(hbox), ali, FALSE,TRUE,0);
@@ -766,6 +771,27 @@
}
}
+static void tag_replace_data(GtkButton *button, gpointer data)
+{
+ int clear = GPOINTER_TO_INT(data);
+ char *file = g_object_get_data(G_OBJECT(button), "file");
+ const gchar *artist_text=NULL, *title_text=NULL, *album_text=NULL, *genre_text=NULL, *comment_text=NULL, *composer_text=NULL, *perfomer_text=NULL, *track_text=NULL, *date_text=NULL;
+ if(file && clear) {
+ artist_text = gtk_entry_get_text (GTK_ENTRY (artist));
+ title_text = gtk_entry_get_text (GTK_ENTRY (title));
+ album_text = gtk_entry_get_text (GTK_ENTRY (album));
+ genre_text = gtk_entry_get_text (GTK_ENTRY (genre));
+ comment_text = gtk_entry_get_text (GTK_ENTRY (comment));
+ composer_text = gtk_entry_get_text (GTK_ENTRY (composer));
+ perfomer_text = gtk_entry_get_text (GTK_ENTRY (perfomer));
+ track_text = gtk_entry_get_text (GTK_ENTRY (track));
+ date_text = gtk_entry_get_text (GTK_ENTRY (date));
+ }
+ if(genre==NULL) printf("genre es NULL\n");
+ if(mpd_database_tagedit(connection, file, 18, "artist", artist_text, "title", title_text, "album", album_text, "genre", genre_text, "composer", composer_text, "perfomer", perfomer_text, "track", track_text, "date", date_text, "comment", comment_text ))
+ playlist3_show_error_message(_("Failed to update idtags"), ERROR_CRITICAL);
+}
+
static gboolean info2_row_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data)
{
@@ -1203,7 +1229,7 @@
items++;
}
if(string->len >0) {
- info2_add_table_item(table2, ngettext("Genre: ", "Genres: ", items), string->str, i,TRUE);
+ info2_add_table_item(table2, ngettext("Genre: ", "Genres: ", items), string->str, i,0);
i++;
}
g_string_free(string, TRUE);
@@ -1218,7 +1244,7 @@
items++;
}
if(string->len >0) {
- info2_add_table_item(table2, ngettext("Date: ", "Dates: ", items), string->str, i,TRUE);
+ info2_add_table_item(table2, ngettext("Date: ", "Dates: ", items), string->str, i,0);
i++;
}
g_string_free(string, TRUE);
@@ -1234,13 +1260,13 @@
if(stats)
{
buffer = g_strdup_printf("%i", stats->numberOfSongs);
- info2_add_table_item(table2,_("Songs:"),buffer,i,TRUE);
+ info2_add_table_item(table2,_("Songs:"),buffer,i,2);
i++;
q_free(buffer);
/* Playtime */
buffer = format_time_real(stats->playTime,"");
- info2_add_table_item(table2,_("Playtime:"),buffer,i,TRUE);
- i++;
+ info2_add_table_item(table2,_("Playtime:"),buffer,i,2);
+ i++;
q_free(buffer);
mpd_database_search_free_stats(stats);
}
@@ -1559,7 +1585,7 @@
int tracks = 0;
/** Album name */
if(song2->album){
- info2_add_table_item(table2, _("Album:"), song2->album, i,TRUE);
+ info2_add_table_item(table2, _("Album:"), song2->album, i,0);
i++;
}
/**
@@ -1575,7 +1601,7 @@
}
if(string->len >0)
{
- info2_add_table_item(table2, _("Genre:"), string->str, i,TRUE);
+ info2_add_table_item(table2, _("Genre:"), string->str, i,0);
i++;
}
g_string_free(string, TRUE);
@@ -1599,24 +1625,24 @@
time += data2->song->time;
if(song->date) {
- info2_add_table_item(table2, _("Date:"), song->date, i,TRUE);
+ info2_add_table_item(table2, _("Date:"), song->date, i,0);
i++;
}
if(tracks) {
char *str = g_strdup_printf("%i", tracks);
- info2_add_table_item(table2, _("Tracks:"), str, i,TRUE);
+ info2_add_table_item(table2, _("Tracks:"), str, i,2);
q_free(str);
i++;
}
if(time) {
char *buffer = format_time_real(time,"");
- info2_add_table_item(table2,_("Playtime:"),buffer,i,TRUE);
+ info2_add_table_item(table2,_("Playtime:"),buffer,i,2);
i++;
q_free(buffer);
}
if(song->file) {
char *filename = g_path_get_dirname(song->file);
- info2_add_table_item(table2, _("Directory:"), filename, i,TRUE);
+ info2_add_table_item(table2, _("Directory:"), filename, i,2);
q_free(filename);
i++;
}
@@ -1926,33 +1952,33 @@
gtk_table_set_col_spacings(GTK_TABLE(table2),6);
i=0;
if(song->album) {
- info2_add_table_item(table2,_("Album:"), song->album,i,FALSE);
+ info2_add_table_item(table2,_("Album:"), song->album,i,0);
i++;
}
if(song->genre) {
- info2_add_table_item(table2, _("Genre:"), song->genre,i,FALSE);
+ info2_add_table_item(table2, _("Genre:"), song->genre,i,0);
i++;
}
if(song->date) {
- info2_add_table_item(table2, _("Date:"), song->date,i,FALSE);
+ info2_add_table_item(table2, _("Date:"), song->date,i,0);
i++;
g_object_set_data_full(G_OBJECT(event), "date", g_strdup(song->date),g_free);
}
if(tracks) {
char *str = g_strdup_printf("%i", tracks);
- info2_add_table_item(table2, _("Tracks:"), str,i,FALSE);
+ info2_add_table_item(table2, _("Tracks:"), str,i,2);
q_free(str);
i++;
}
if(time) {
char *buffer = format_time_real(time,"");
- info2_add_table_item(table2,_("Playtime:"),buffer,i,FALSE);
- i++;
+ info2_add_table_item(table2,_("Playtime:"),buffer,i,2);
+ i++;
q_free(buffer);
}
if(song->file) {
gchar *dirname = g_path_get_dirname(song->file);
- info2_add_table_item(table2,_("Directory:"),dirname,i,FALSE);
+ info2_add_table_item(table2,_("Directory:"),dirname,i,2);
i++;
q_free(dirname);
}