Update of /cvsroot/gtkpod/gtkpod/src
In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv18704/src

Modified Files:
        display_itdb.c display_itdb.h file.c mp3file.c mp4file.c 
        prefs.c prefs_window.c 
Log Message:
        * mp4file.c: update instructions at the beginnging of the
          file, read soundcheck values irrespective of "readtags"
          setting.

        * gtkpod.glade
          src/prefs.c
          src/prefs_windows.c
          src/mp3file.c
          src/file.c: implement "coverart_apic" prefs key allowing to
          select whether coverart stored in tags should be used or not.

        * src/display_itdb.c
          src/display_itdb.h: new: gp_track_set_thumbnails_from_data()



Index: display_itdb.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/display_itdb.c,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -d -r1.56 -r1.57
--- display_itdb.c      23 Jun 2006 16:26:32 -0000      1.56
+++ display_itdb.c      18 Sep 2006 07:10:44 -0000      1.57
@@ -1,4 +1,4 @@
-/* Time-stamp: <2006-06-24 01:21:01 jcs>
+/* Time-stamp: <2006-09-18 15:28:13 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -310,37 +310,78 @@
 }
 
 
-/* Set a thumbnail and store the filename in ExtraTrackData */
-gboolean gp_track_set_thumbnails (Track *track, const gchar *filename)
+/* Set a thumbnail and update ExtraTrackData (e.g. filename) */
+static gboolean gp_track_set_thumbnails_internal (Track *track,
+                                                 const gchar *filename,
+                                                 const guchar *image_data,
+                                                 gsize image_data_len)
 {
-    gboolean result;
+    gboolean result = FALSE;
     ExtraTrackData *etr;
 
     g_return_val_if_fail (track, FALSE);
-    g_return_val_if_fail (filename, FALSE);
 
     etr = track->userdata;
     g_return_val_if_fail (etr, FALSE);
 
-    result = itdb_track_set_thumbnails (track, filename);
-    if (result == TRUE)
+    if (filename)
+    {
+       result = itdb_track_set_thumbnails (track, filename);
+    }
+    else if (image_data)
+    {
+       result = itdb_track_set_thumbnails_from_data (track,
+                                                     image_data,
+                                                     image_data_len);
+    }
+
+    g_free (etr->thumb_path_locale);
+    g_free (etr->thumb_path_utf8);
+
+    if (filename && (result == TRUE))
     {
-       g_free (etr->thumb_path_locale);
-       g_free (etr->thumb_path_utf8);
        etr->thumb_path_locale = g_strdup (filename);
        etr->thumb_path_utf8 = charset_to_utf8 (filename);
     }
     else
     {
-       g_free (etr->thumb_path_locale);
-       g_free (etr->thumb_path_utf8);
        etr->thumb_path_locale = g_strdup ("");
        etr->thumb_path_utf8 = g_strdup ("");
-       gtkpod_warning (_("Failed to set cover art: '%s'"), filename);
     }
+
+    if (result == FALSE)
+    {
+       if (filename)
+           gtkpod_warning (_("Failed to set cover art: '%s'"), filename);
+    }
+
     return result;
 }
 
+/* Set a thumbnail and update data in ExtraTrackData */
+gboolean gp_track_set_thumbnails_from_data (Track *track,
+                                           const guchar *image_data,
+                                           gsize image_data_len)
+{
+    g_return_val_if_fail (track, FALSE);
+    g_return_val_if_fail (image_data, FALSE);
+
+    return gp_track_set_thumbnails_internal (track, NULL,
+                                            image_data, image_data_len);
+}
+
+
+/* Set a thumbnail and store the filename in ExtraTrackData */
+gboolean gp_track_set_thumbnails (Track *track, const gchar *filename)
+{
+    g_return_val_if_fail (track, FALSE);
+    g_return_val_if_fail (filename, FALSE);
+
+    return gp_track_set_thumbnails_internal (track, filename,
+                                            NULL, 0);
+}
+
+
 /* Remove a thumbnail and remove the filename in ExtraTrackData */
 /* Return value:
    FALSE: track did not have any thumbnails, so no change was done

Index: display_itdb.h
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/display_itdb.h,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -d -r1.34 -r1.35
--- display_itdb.h      24 Jun 2006 15:39:22 -0000      1.34
+++ display_itdb.h      18 Sep 2006 07:10:44 -0000      1.35
@@ -1,4 +1,4 @@
-/* Time-stamp: <2006-06-24 23:54:21 jcs>
+/* Time-stamp: <2006-09-18 15:27:12 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -127,6 +127,9 @@
 void gp_track_add_extra (Track *track);
 void gp_track_validate_entries (Track *track);
 gboolean gp_track_set_thumbnails (Track *track, const gchar *filename);
+gboolean gp_track_set_thumbnails_from_data (Track *track,
+                                           const guchar *image_data,
+                                           gsize image_data_len);
 gboolean gp_track_remove_thumbnails (Track *track);
 
 Playlist *gp_playlist_new (const gchar *title, gboolean spl);

Index: file.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/file.c,v
retrieving revision 1.184
retrieving revision 1.185
diff -u -d -r1.184 -r1.185
--- file.c      11 Sep 2006 15:36:18 -0000      1.184
+++ file.c      18 Sep 2006 07:10:44 -0000      1.185
@@ -1,4 +1,4 @@
-/* Time-stamp: <2006-09-12 00:31:49 jcs>
+/* Time-stamp: <2006-09-18 15:57:40 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -961,7 +961,7 @@
 
 
 /* look for a picture specified by coverart_template  */
-static void add_artwork (Track *tr)
+static void add_coverart (Track *tr)
 {
     ExtraTrackData *etr;
     gchar *full_template;
@@ -1155,9 +1155,11 @@
        set_unset_entries_from_filename (nti);
 
        /* Set coverart */
-       if (prefs_get_int("coverart"))
+       if (prefs_get_int("coverart_file"))
        {
-           add_artwork (nti);
+           /* APIC data takes precedence */
+           if (!nti->artwork || !nti->artwork->thumbnails)
+               add_coverart (nti);
        }
 
        /* Set modification date to the files modified date */

Index: mp3file.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/mp3file.c,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -d -r1.69 -r1.70
--- mp3file.c   17 Sep 2006 17:18:13 -0000      1.69
+++ mp3file.c   18 Sep 2006 07:10:44 -0000      1.70
@@ -1,4 +1,4 @@
-/* Time-stamp: <2006-09-18 02:09:40 jcs>
+/* Time-stamp: <2006-09-18 15:57:55 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -78,8 +78,6 @@
     gchar *lyrics;        /* does not appear to be the full lyrics --
                             only used to set the flag 'lyrics_flag'
                             of the Track structure */
-    guchar *coverart;     /* Raw data */
-    gsize coverart_len;   /* Size of coverart data */
 };
 
 
@@ -1280,22 +1278,21 @@
 
 
 /***
- * Reads id3v1.x / id3v2 tag and load data into the Id3tag structure.
- * If a tag entry exists (ex: title), we allocate memory, else value
- * stays to NULL
+ * Reads id3v1.x / id3v2 apic data
  * @returns: TRUE on success, else FALSE.
  */
-gboolean id3_tag_read (gchar *filename, File_Tag *tag)
+static gboolean id3_apic_read (gchar *filename,
+                              guchar **image_data, gsize *image_data_len)
 {
     struct id3_file *id3file;
     struct id3_tag *id3tag;
-    gchar* string;
-    gchar* string2;
 
     g_return_val_if_fail (filename, FALSE);
-    g_return_val_if_fail (tag, FALSE);
+    g_return_val_if_fail (image_data, FALSE);
+    g_return_val_if_fail (image_data_len, FALSE);
 
-    memset (tag, 0, sizeof (File_Tag));
+    *image_data = NULL;
+    *image_data_len = 0;
 
     if (!(id3file = id3_file_open (filename, ID3_FILE_MODE_READONLY)))
     {
@@ -1311,8 +1308,6 @@
        id3_length_t len;
        const guchar *coverart;
 
-       tag->coverart = NULL;
-       tag->coverart_len = 0;
        coverart = id3_get_binary (id3tag, "APIC", &len);
 
        if (coverart)
@@ -1327,29 +1322,62 @@
                {
                    const guchar itunes_missing_header[] =
                        { 0xff, 0xd8, 0xff, 0xe0, 0x00 };
-                   tag->coverart = g_malloc (len+5);
-                   memcpy (tag->coverart, itunes_missing_header, 5);
-                   memcpy (tag->coverart+5, coverart, len);
-                   tag->coverart_len = len+5;
+                   *image_data = g_malloc (len+5);
+                   memcpy (*image_data, itunes_missing_header, 5);
+                   memcpy ((*image_data)+5, coverart, len);
+                   *image_data_len = len+5;
                }
            }
-           if (!tag->coverart)
+           if (!*image_data)
            {
-               tag->coverart = g_malloc (len);
-               memcpy (tag->coverart, coverart, len);
-               tag->coverart_len = len;
+               *image_data = g_malloc (len);
+               memcpy (*image_data, coverart, len);
+               *image_data_len = len;
            }
 #if LOCALDEBUG
-           if (tag->coverart)
+           if (*image_data)
            {
                FILE *file;
                file = fopen ("/tmp/folder.jpg", "w");
-               fwrite (tag->coverart, 1, tag->coverart_len, file);
+               fwrite (*image_data, 1, *image_data_len, file);
                fclose (file);
            }
 #endif
        }    
+    }
+    id3_file_close (id3file);
+    return TRUE;
+}
+
+/***
+ * Reads id3v1.x / id3v2 tag and load data into the Id3tag structure.
+ * If a tag entry exists (ex: title), we allocate memory, else value
+ * stays to NULL
+ * @returns: TRUE on success, else FALSE.
+ */
+gboolean id3_tag_read (gchar *filename, File_Tag *tag)
+{
+    struct id3_file *id3file;
+    struct id3_tag *id3tag;
+    gchar* string;
+    gchar* string2;
+
+    g_return_val_if_fail (filename, FALSE);
+    g_return_val_if_fail (tag, FALSE);
+
+    memset (tag, 0, sizeof (File_Tag));
+
+    if (!(id3file = id3_file_open (filename, ID3_FILE_MODE_READONLY)))
+    {
+       gchar *fbuf = charset_to_utf8 (filename);
+       g_print(_("ERROR while opening file: '%s' (%s).\n"),
+               fbuf, g_strerror(errno));
+       g_free (fbuf);
+       return FALSE;
+    }
 
+    if ((id3tag = id3_file_tag(id3file)))
+    {
        tag->title = id3_get_string (id3tag, ID3_FRAME_TITLE);
        tag->artist = id3_get_string (id3tag, ID3_FRAME_GROUP);
        if (!tag->artist || !*tag->artist)
@@ -1409,6 +1437,8 @@
     return TRUE;
 }
 
+
+
 static enum id3_field_textencoding get_encoding_of (struct id3_tag *tag, const 
char *frame_name)
 {
     struct id3_frame *frame;
@@ -2104,6 +2134,8 @@
     File_Tag filetag;
     MP3Info *mp3i=NULL;
     FILE *file;
+    guchar *image_data = NULL;
+    gsize image_data_len = 0;
 
     g_return_val_if_fail (name, NULL);
 
@@ -2128,9 +2160,10 @@
     }
 
     track = gp_track_new ();
+    track->filetype = g_strdup ("MPEG audio file");
+
     if (prefs_get_int("readtags") && (id3_tag_read (name, &filetag) == TRUE))
     {
-       track->filetype = g_strdup ("MPEG audio file");
 
        if (filetag.album)
        {
@@ -2251,14 +2284,17 @@
        {
            track->lyrics_flag = 0x00;
        }
+    }
 
-       if (filetag.coverart)
+    if (prefs_get_int("coverart_apic") &&
+       (id3_apic_read (name, &image_data, &image_data_len) == TRUE))
+    {
+       if (image_data)
        {
-           itdb_track_set_thumbnails_from_data (track,
-                                                filetag.coverart,
-                                                filetag.coverart_len);
-           g_free (filetag.coverart);
-           filetag.coverart = NULL;
+           gp_track_set_thumbnails_from_data (track,
+                                              image_data,
+                                              image_data_len);
+           g_free (image_data);
        }
     }
 

Index: mp4file.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/mp4file.c,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -d -r1.33 -r1.34
--- mp4file.c   14 Jun 2006 12:47:56 -0000      1.33
+++ mp4file.c   18 Sep 2006 07:10:44 -0000      1.34
@@ -1,4 +1,4 @@
-/* Time-stamp: <2006-06-14 20:47:27 jcs>
+/* Time-stamp: <2006-09-18 16:03:15 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -54,7 +54,7 @@
    gchar   *genre;            /+ genre (utf8)          +/
    gchar   *comment;          /+ comment (utf8)        +/
    gchar   *composer;         /+ Composer (utf8)       +/
-   gchar   *fdesc;            /+ Format description (utf8)   +/
+   gchar   *filetype;         /+ Format description (utf8)   +/
    gchar   *charset;          /+ charset used for tags       +/
    gchar   *description;      /+ Description text (podcasts) +/
    gchar   *podcasturl;       /+ URL/Title (podcasts)        +/
@@ -75,7 +75,11 @@
    gboolean compilation;      /+ Track is part of a compilation CD   +/
 
    If prefs_get_int("readtags") returns FALSE you only should fill in
-   tracklen, bitrate and fdesc
+   tracklen, bitrate, samplerate, soundcheck and filetype
+
+   If prefs_get_int("coverart_apic") returns TRUE you should try to
+   read APIC coverart data from the tags and set it with
+   gp_set_thumbnails_from_data().
 
    Please note that the iPod will only play as much of the track as
    specified in "tracklen".
@@ -329,8 +333,8 @@
                    track->genre = charset_to_utf8 (value);
                    g_free(value);
                }
-               mp4_scan_soundcheck (mp4File, track);
            }
+           mp4_scan_soundcheck (mp4File, track);
        }
        else
        {

Index: prefs.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/prefs.c,v
retrieving revision 1.268
retrieving revision 1.269
diff -u -d -r1.268 -r1.269
--- prefs.c     27 Jun 2006 01:05:57 -0000      1.268
+++ prefs.c     18 Sep 2006 07:10:44 -0000      1.269
@@ -1,4 +1,4 @@
-/* Time-stamp: <2006-06-25 21:40:01 jcs>
+/* Time-stamp: <2006-09-18 15:27:13 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Copyright (C) 2006 James Liggett <jrliggett at cox.net>
@@ -226,7 +226,8 @@
     prefs_set_int("parsetags", FALSE);
     prefs_set_int("parsetags_overwrite", FALSE);
     prefs_set_string("parsetags_template", "%a - %A/%T %t.mp3;%t.wav");
-    prefs_set_int("coverart", TRUE);
+    prefs_set_int("coverart_apic", TRUE);
+    prefs_set_int("coverart_file", TRUE);
     prefs_set_string("coverart_template", "%A;folder.jpg");
     prefs_set_int("mserv_use", FALSE);
     prefs_set_string("mserv_username", "");
@@ -686,13 +687,21 @@
     version = prefs_get_double("version");
 
     /* rename mountpoint to initial_mountpoint */
-    if (prefs_get_string_value("mountpoint", &buf))
+    if (prefs_get_string_value(KEY_MOUNTPOINT, &buf))
     {
        prefs_set_string("initial_mountpoint", buf);
        g_free(buf);
        prefs_set_string(KEY_MOUNTPOINT, NULL);
     }
   
+    /* rename coverart to coverart_file */
+    if (prefs_get_string_value("coverart", &buf))
+    {
+       prefs_set_string("coverart_file", buf);
+       g_free(buf);
+       prefs_set_string("coverart", NULL);
+    }
+  
     /* Convert old path numbered keys to named ones */
   
   

Index: prefs_window.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/prefs_window.c,v
retrieving revision 1.183
retrieving revision 1.184
diff -u -d -r1.183 -r1.184
--- prefs_window.c      1 Sep 2006 13:18:42 -0000       1.183
+++ prefs_window.c      18 Sep 2006 07:10:45 -0000      1.184
@@ -1,4 +1,4 @@
-/* Time-stamp: <2006-06-24 00:00:09 jcs>
+/* Time-stamp: <2006-09-18 15:35:32 jcs>
 |
 |  Copyright (C) 2002 Corey Donohoe <atmos at atmos.org>
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
@@ -561,18 +561,29 @@
     w = gtkpod_xml_get_widget (prefs_window_xml, "parsetags_template");
     gtk_widget_set_sensitive (w, prefs_get_int("parsetags"));
     buf = prefs_get_string("parsetags_template");
-    gtk_entry_set_text(GTK_ENTRY(w), buf);
-    g_free(buf);
+    if (buf)
+    {
+       gtk_entry_set_text(GTK_ENTRY(w), buf);
+       g_free(buf);
+    }
 
-    w = gtkpod_xml_get_widget (prefs_window_xml, "coverart");
+    w = gtkpod_xml_get_widget (prefs_window_xml, "coverart_apic");
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w),
-                                prefs_get_int("coverart"));
+                                prefs_get_int("coverart_apic"));
+
+
+    w = gtkpod_xml_get_widget (prefs_window_xml, "coverart_file");
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w),
+                                prefs_get_int("coverart_file"));
 
     w = gtkpod_xml_get_widget (prefs_window_xml, "coverart_template");
     buf = prefs_get_string("coverart_template");
-    gtk_entry_set_text(GTK_ENTRY(w), buf);
-    g_free(buf);
-    gtk_widget_set_sensitive (w, prefs_get_int("coverart"));
+    if (buf)
+    {
+       gtk_entry_set_text(GTK_ENTRY(w), buf);
+       g_free(buf);
+    }
+    gtk_widget_set_sensitive (w, prefs_get_int("coverart_file"));
 
     for (i=0; i<TM_NUM_COLUMNS; ++i)
     {
@@ -644,8 +655,11 @@
 
     w = gtkpod_xml_get_widget (prefs_window_xml, "mserv_username_entry");
     buf = prefs_get_string("mserv_username");
-    gtk_entry_set_text(GTK_ENTRY(w), buf);
-    g_free(buf);
+    if (buf)
+    {
+       gtk_entry_set_text(GTK_ENTRY(w), buf);
+       g_free(buf);
+    }
     w = gtkpod_xml_get_widget (prefs_window_xml, "notebook");
     if (page == -1)
     {
@@ -659,8 +673,11 @@
     
     w = gtkpod_xml_get_widget (prefs_window_xml, "exclude_file_mask_entry");
     buf = prefs_get_string("exclude_file_mask");
-    gtk_entry_set_text(GTK_ENTRY(w), buf);
-    g_free(buf);
+    if (buf)
+    {
+       gtk_entry_set_text(GTK_ENTRY(w), buf);
+       g_free(buf);
+    }
     
     prefs_window_show_hide_tooltips ();
     gtk_widget_show(prefs_window);
@@ -1142,13 +1159,25 @@
 }
 
 void
-on_coverart_toggled                   (GtkToggleButton *togglebutton,
-                                      gpointer         user_data)
+on_coverart_file_toggled                   (GtkToggleButton *togglebutton,
+                                           gpointer         user_data)
 {
     gboolean val = gtk_toggle_button_get_active(togglebutton);
     GtkWidget *w;
 
-    temp_prefs_set_int(temp_prefs, "coverart", val);
+    temp_prefs_set_int(temp_prefs, "coverart_file", val);
+    w = gtkpod_xml_get_widget (prefs_window_xml, "coverart_template");
+    gtk_widget_set_sensitive (w, val);
+}
+
+void
+on_coverart_apic_toggled                   (GtkToggleButton *togglebutton,
+                                           gpointer         user_data)
+{
+    gboolean val = gtk_toggle_button_get_active(togglebutton);
+    GtkWidget *w;
+
+    temp_prefs_set_int(temp_prefs, "coverart_apic", val);
     w = gtkpod_xml_get_widget (prefs_window_xml, "coverart_template");
     gtk_widget_set_sensitive (w, val);
 }


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
gtkpod-cvs2 mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2

Reply via email to