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

Reply via email to