Update of /cvsroot/gtkpod/gtkpod/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18607/src
Modified Files: context_menus.c details.c fileselection.c fileselection.h itdb.h misc_confirm.c Log Message: * details.c: support for set_thumbnails / remove thumbnails. Index: context_menus.c =================================================================== RCS file: /cvsroot/gtkpod/gtkpod/src/context_menus.c,v retrieving revision 1.49 retrieving revision 1.50 diff -u -d -r1.49 -r1.50 --- context_menus.c 26 Nov 2005 13:44:41 -0000 1.49 +++ context_menus.c 28 Nov 2005 16:25:34 -0000 1.50 @@ -1,4 +1,4 @@ -/* Time-stamp: <2005-11-26 22:41:24 jcs> +/* Time-stamp: <2005-11-27 16:37:21 jcs> | | Copyright (C) 2003 Corey Donohoe <atmos at atmos dot org> | Copyright (C) 2003-2005 Jorg Schuler <jcsjcs at users sourceforge net> @@ -42,7 +42,7 @@ #include "tools.h" #include "podcast.h" -#define LOCALDEBUG 0 +#define LOCALDEBUG 1 static guint entry_inst = -1; static GList *selected_tracks = NULL; @@ -68,24 +68,31 @@ static void do_special(GtkWidget *w, gpointer data) { - GList *gl; - for (gl=selected_tracks; gl; gl=gl->next) + GList *gl; + + for (gl=selected_tracks; gl; gl=gl->next) + { + gchar *mp; + Track *tr = gl->data; + g_return_if_fail (tr); + + g_object_get (tr->itdb->device, "mount-point", &mp, NULL); + printf ("mountpoint: %s\n", mp); + g_free (mp); + + printf ("track: %p: thumbnails: %p id: %d num: %d\n", + tr, tr->artwork->thumbnails, tr->artwork->id, g_list_length (tr->artwork->thumbnails)); + if (tr->artwork->thumbnails) { - Track *tr = gl->data; - g_return_if_fail (tr); - printf ("track: %p: thumbnails: %p id: %d num: %d\n", - tr, tr->thumbnails, tr->image_id, g_list_length (tr->thumbnails)); - if (tr->thumbnails) + GList *gl2; + for (gl2=tr->artwork->thumbnails; gl2; gl2=gl2->next) { - GList *gl2; - for (gl2=tr->thumbnails; gl2; gl2=gl2->next) - { - Image *img = gl2->data; - g_return_if_fail (img); - printf (" %s offset: %d size: %d width: %d height: %d\n", img->filename, img->offset, img->size, img->width, img->height); - } + Thumb *img = gl2->data; + g_return_if_fail (img); + printf (" %s offset: %d size: %d width: %d height: %d\n", img->filename, img->offset, img->size, img->width, img->height); } } + } } #endif Index: details.c =================================================================== RCS file: /cvsroot/gtkpod/gtkpod/src/details.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- details.c 24 Nov 2005 15:37:07 -0000 1.2 +++ details.c 28 Nov 2005 16:25:34 -0000 1.3 @@ -1,4 +1,4 @@ -/* Time-stamp: <2005-11-25 00:27:50 jcs> +/* Time-stamp: <2005-11-29 00:56:25 jcs> | | Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net> | Part of the gtkpod project. @@ -32,6 +32,7 @@ #include <stdlib.h> #include <gtk/gtk.h> #include "details.h" +#include "fileselection.h" #include "misc.h" #include "misc_track.h" #include "prefs.h" @@ -72,6 +73,7 @@ /* Declarations */ +static void details_update_thumbnail (Detail *detail); static void details_set_track (Detail *detail, Track *track); static void details_free (Detail *detail); @@ -183,6 +185,38 @@ } +/****** Thumbnail Control *****/ +static void details_button_set_artwork_clicked (GtkButton *button, + Detail *detail) +{ + gchar *filename; + + g_return_if_fail (detail); + g_return_if_fail (detail->track); + + filename = fileselection_get_cover_filename (); + + if (filename) + { + if (itdb_track_set_thumbnails (detail->track, filename) != TRUE) + { + gtkpod_warning (_("Could not set cover art: '%s'"), + filename); + } + details_update_thumbnail (detail); + } + + g_free (filename); +} + +static void details_button_remove_artwork_clicked (GtkButton *button, + Detail *detail) +{ + itdb_track_remove_thumbnails (detail->track); + details_update_thumbnail (detail); +} + + /****** Window Control *****/ static void details_button_apply_clicked (GtkButton *button, Detail *detail) @@ -408,11 +442,50 @@ } +/* Update the displayed thumbnail */ +static void details_update_thumbnail (Detail *detail) +{ + Thumb *thumb; + GtkImage *img; + + g_return_if_fail (detail); + g_return_if_fail (detail->track); + + img = GTK_IMAGE (gtkpod_xml_get_widget (detail->xml, + "details_image_thumbnail")); + + gtk_image_set_from_pixbuf (img, NULL); + + /* Get large cover */ + thumb = itdb_artwork_get_thumb_by_type (detail->track->artwork, + ITDB_THUMB_COVER_LARGE); + + if (thumb) + { + GdkPixbuf *pixbuf; + pixbuf = itdb_thumb_get_gdk_pixbuf (detail->track->itdb->device, + thumb); + if (pixbuf) + { + gtk_image_set_from_pixbuf (img, pixbuf); + gdk_pixbuf_unref (pixbuf); + } + } + + if (gtk_image_get_storage_type (img) == GTK_IMAGE_EMPTY) + { + gtk_image_set_from_stock (img, GTK_STOCK_MISSING_IMAGE, + GTK_ICON_SIZE_DIALOG); + } +} + + /* Set the display to @track */ static void details_set_track (Detail *detail, Track *track) { GtkWidget *w; gint index; + gchar *buf; T_item item; gboolean first, last; @@ -426,14 +499,12 @@ detail->tracknr = index; detail->track = track; - if ((w = gtkpod_xml_get_widget (detail->xml, "details_label_index"))) - { - gchar *buf = g_strdup_printf ("%d / %d", - index+1, - g_list_length (detail->tracks)); - gtk_label_set_text (GTK_LABEL (w), buf); - g_free (buf); - } + w = gtkpod_xml_get_widget (detail->xml, "details_label_index"); + buf = g_strdup_printf ("%d / %d", + index+1, + g_list_length (detail->tracks)); + gtk_label_set_text (GTK_LABEL (w), buf); + g_free (buf); for (item=1; item<T_ITEM_NUM; ++item) { @@ -451,38 +522,7 @@ } /* Set thumbnail */ - if ((w = gtkpod_xml_get_widget (detail->xml, "details_image_thumbnail"))) - { - GList *gl; - GtkImage *img = GTK_IMAGE (w); - - gtk_image_set_from_pixbuf (img, NULL); - - /* Find large cover */ - for (gl=track->thumbnails; gl; gl=gl->next) - { - Image *thumb = gl->data; - g_return_if_fail (thumb); - - if (thumb->type == 1) - { /* 1 == IPOD_COVER_LARGE */ - GdkPixbuf *pixbuf; - pixbuf = itdb_image_get_gdk_pixbuf (track->itdb, thumb); - if (pixbuf) - { - gtk_image_set_from_pixbuf (img, pixbuf); - gdk_pixbuf_unref (pixbuf); - } - } - } - - if (gtk_image_get_storage_type (img) == GTK_IMAGE_EMPTY) - { - gtk_image_set_from_stock (img, GTK_STOCK_MISSING_IMAGE, - GTK_ICON_SIZE_DIALOG); - } - } - + details_update_thumbnail (detail); /* inactivate prev/next buttons when at the beginning/end of the * list */ @@ -546,22 +586,32 @@ } /* Navigation */ - if ((w = gtkpod_xml_get_widget (detail->xml, "details_button_first"))) - g_signal_connect (w, "clicked", - G_CALLBACK (details_button_first_clicked), - detail); - if ((w = gtkpod_xml_get_widget (detail->xml, "details_button_previous"))) - g_signal_connect (w, "clicked", - G_CALLBACK (details_button_previous_clicked), - detail); - if ((w = gtkpod_xml_get_widget (detail->xml, "details_button_next"))) - g_signal_connect (w, "clicked", - G_CALLBACK (details_button_next_clicked), - detail); - if ((w = gtkpod_xml_get_widget (detail->xml, "details_button_last"))) - g_signal_connect (w, "clicked", - G_CALLBACK (details_button_last_clicked), - detail); + w = gtkpod_xml_get_widget (detail->xml, "details_button_first"); + g_signal_connect (w, "clicked", + G_CALLBACK (details_button_first_clicked), + detail); + w = gtkpod_xml_get_widget (detail->xml, "details_button_previous"); + g_signal_connect (w, "clicked", + G_CALLBACK (details_button_previous_clicked), + detail); + w = gtkpod_xml_get_widget (detail->xml, "details_button_next"); + g_signal_connect (w, "clicked", + G_CALLBACK (details_button_next_clicked), + detail); + w = gtkpod_xml_get_widget (detail->xml, "details_button_last"); + g_signal_connect (w, "clicked", + G_CALLBACK (details_button_last_clicked), + detail); + + /* Thumbnail control */ + w = gtkpod_xml_get_widget (detail->xml, "details_button_set_artwork"); + g_signal_connect (w, "clicked", + G_CALLBACK (details_button_set_artwork_clicked), + detail); + w = gtkpod_xml_get_widget (detail->xml, "details_button_remove_artwork"); + g_signal_connect (w, "clicked", + G_CALLBACK (details_button_remove_artwork_clicked), + detail); /* Window control */ if ((w = gtkpod_xml_get_widget (detail->xml, "details_button_apply"))) Index: fileselection.c =================================================================== RCS file: /cvsroot/gtkpod/gtkpod/src/fileselection.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- fileselection.c 5 Jun 2005 14:48:37 -0000 1.2 +++ fileselection.c 28 Nov 2005 16:25:34 -0000 1.3 @@ -1,4 +1,4 @@ -/* Time-stamp: <2005-06-05 22:40:10 jcs> +/* Time-stamp: <2005-11-27 19:08:07 jcs> | | Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users.sourceforge.net> | Part of the gtkpod project. @@ -254,6 +254,53 @@ + +/* + * Add Cover Art + */ +gchar *fileselection_get_cover_filename (void) +{ + GtkWidget* fc; /* The file chooser dialog */ + gint response; /* The response of the filechooser */ + gchar *filename = NULL; /* The chosen file */ + + /* Create the file chooser, and handle the response */ + fc = gtk_file_chooser_dialog_new (_("Set Cover"), + NULL, + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, + GTK_RESPONSE_ACCEPT, + NULL); + + gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (fc), FALSE); + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (fc), + prefs_get_last_dir_browse ()); + + response = gtk_dialog_run(GTK_DIALOG(fc)); + + switch (response) + { + case GTK_RESPONSE_ACCEPT: + filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (fc)); + break; + case GTK_RESPONSE_CANCEL: + break; + default: /* Fall through */ + break; + } + gtk_widget_destroy(fc); + return filename; +} + + + + + + + + /* | Changed by Jorg Schuler <jcsjcs at users.sourceforge.net> to compile | "standalone" with the gtkpod project 2002/11/24 Index: fileselection.h =================================================================== RCS file: /cvsroot/gtkpod/gtkpod/src/fileselection.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- fileselection.h 17 Jun 2005 13:30:03 -0000 1.2 +++ fileselection.h 28 Nov 2005 16:25:34 -0000 1.3 @@ -1,4 +1,4 @@ -/* Time-stamp: <2005-06-17 22:12:18 jcs> +/* Time-stamp: <2005-11-27 19:05:47 jcs> | | Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net> | Part of the gtkpod project. @@ -41,6 +41,7 @@ void create_add_files_dialog(void); void create_add_playlists_dialog(void); +gchar *fileselection_get_cover_filename(void); /* dirbrowser */ void dirbrowser_block (void); Index: itdb.h =================================================================== RCS file: /cvsroot/gtkpod/gtkpod/src/itdb.h,v retrieving revision 1.17 retrieving revision 1.18 diff -u -d -r1.17 -r1.18 --- itdb.h 23 Nov 2005 04:16:12 -0000 1.17 +++ itdb.h 28 Nov 2005 16:25:34 -0000 1.18 @@ -1,4 +1,4 @@ -/* Time-stamp: <2005-11-20 00:58:09 jcs> +/* Time-stamp: <2005-11-27 15:52:33 jcs> | | Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net> | Part of the gtkpod project. @@ -45,5 +45,6 @@ typedef Itdb_iTunesDB iTunesDB; typedef Itdb_Playlist Playlist; typedef Itdb_Track Track; -typedef Itdb_Image Image; +typedef Itdb_Thumb Thumb; +typedef Itdb_Artwork Artwork; #endif Index: misc_confirm.c =================================================================== RCS file: /cvsroot/gtkpod/gtkpod/src/misc_confirm.c,v retrieving revision 1.23 retrieving revision 1.24 diff -u -d -r1.23 -r1.24 --- misc_confirm.c 23 Nov 2005 04:16:12 -0000 1.23 +++ misc_confirm.c 28 Nov 2005 16:25:34 -0000 1.24 @@ -1,4 +1,4 @@ -/* Time-stamp: <2005-11-19 23:26:22 jcs> +/* Time-stamp: <2005-11-27 17:57:06 jcs> | | Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net> | Part of the gtkpod project. @@ -926,6 +926,17 @@ if (!errordir) g_free (pbuf); } + if (!errordir) + { + pbuf = g_build_filename (mp, "iPod_Control", "Artwork", NULL); + if (!g_file_test (pbuf, G_FILE_TEST_EXISTS)) + { + if((mkdir(pbuf, 0755) != 0)) + errordir = pbuf; + } + if (!errordir) + g_free (pbuf); + } dirnum = ipod_directories_number (mp); for(i = 0; i < dirnum; i++) { ------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Do you grep through log files for problems? Stop! Download the new AJAX search engine that makes searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click _______________________________________________ gtkpod-cvs2 mailing list gtkpod-cvs2@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2