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

Modified Files:
        display.c file.c file.h file_export.c misc.c misc.h 
        misc_track.c prefs.c prefs.h prefs_window.c 
Log Message:
       NEW: Automatic adding of thumbnail images when adding new
       tracks or updating existing ones. See the option on the 'Track
       Info' page of the preferences dialog for settings about which
       filename will be used. Any filename is possible, even filenames
       constructed from the album or artist name.



Index: display.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/display.c,v
retrieving revision 1.127
retrieving revision 1.128
diff -u -d -r1.127 -r1.128
--- display.c   10 Dec 2005 08:21:59 -0000      1.127
+++ display.c   10 Dec 2005 17:04:28 -0000      1.128
@@ -1,4 +1,4 @@
-/* Time-stamp: <2005-12-10 17:12:50 jcs>
+/* Time-stamp: <2005-12-10 17:30:07 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -1106,17 +1106,7 @@
 void on_delete_selected_tracks_from_harddisk (GtkMenuItem *mi,
                                              gpointer data)
 {
-    GList *tracks = tm_get_selected_tracks ();
-
-    if (tracks)
-    {
-       delete_track_head (DELETE_ACTION_LOCAL);
-       g_list_free (tracks);
-    }
-    else
-    {
-       gtkpod_statusbar_message (_("No tracks selected"));
-    }
+    delete_selected_tracks (DELETE_ACTION_LOCAL);
 }
 
 

Index: file.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/file.c,v
retrieving revision 1.151
retrieving revision 1.152
diff -u -d -r1.151 -r1.152
--- file.c      23 Nov 2005 04:16:12 -0000      1.151
+++ file.c      10 Dec 2005 17:04:28 -0000      1.152
@@ -1,4 +1,4 @@
-/* Time-stamp: <2005-11-23 01:34:07 jcs>
+/* Time-stamp: <2005-12-11 02:00:47 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -55,6 +55,11 @@
 #include "wavfile.h"
 
 
+static const gchar *imageext[] =
+{".jpg", ".jpeg", ".png", ".pbm", ".pgm", ".ppm", ".tif", ".tiff",
+ ".gif", NULL};
+
+
 /*------------------------------------------------------------------*\
  *                                                                  *
  *      Temporary Video stuff -- move to appropriate files when     *
@@ -88,6 +93,7 @@
     case FILE_TYPE_WAV:
     case FILE_TYPE_M3U:
     case FILE_TYPE_PLS:
+    case FILE_TYPE_IMAGE:
        g_free (track);
        g_return_val_if_reached (NULL);
     }
@@ -128,6 +134,20 @@
 
        else if (g_strcasecmp (suf, ".m3u") == 0) type = FILE_TYPE_M3U;
        else if (g_strcasecmp (suf, ".pls") == 0) type = FILE_TYPE_PLS;
+
+       else
+       {
+           const gchar **extp=imageext;
+           while (*extp)
+           {
+               if (g_strcasecmp (suf, *extp) == 0)
+               {
+                   type = FILE_TYPE_IMAGE;
+                   break;
+               }
+               ++extp;
+           }
+       }
     }
 
     g_free(path_utf8);
@@ -198,6 +218,7 @@
        case FILE_TYPE_MP4:
        case FILE_TYPE_MOV:
        case FILE_TYPE_MPG:
+       case FILE_TYPE_IMAGE:
            gtkpod_warning (_("'%s' is a not a known playlist file.\n\n"),
                              plfile);
            g_free(plname);
@@ -290,6 +311,7 @@
        case FILE_TYPE_MP4:
        case FILE_TYPE_MOV:
        case FILE_TYPE_MPG:
+       case FILE_TYPE_IMAGE:
            break;
        }
        if (filename)
@@ -707,7 +729,7 @@
 
 /* Copy "new" info read from file to an old Track structure.
    Return value: a pointer to the track the data was copied to. */
-Track *copy_new_info (Track *from, Track *to)
+static Track *copy_new_info (Track *from, Track *to)
 {
     ExtraTrackData *efrom, *eto;
 
@@ -732,6 +754,9 @@
     g_free (eto->pc_path_utf8);
     g_free (eto->pc_path_locale);
     g_free (eto->charset);
+    g_free (eto->thumb_path_utf8);
+    g_free (eto->thumb_path_locale);
+    itdb_artwork_free (to->artwork);
     /* copy strings */
     to->album = g_strdup (from->album);
     to->artist = g_strdup (from->artist);
@@ -769,6 +794,9 @@
     g_free (eto->year_str);
     eto->year_str = g_strdup_printf ("%d", to->year);
     to->unk208 = from->unk208;
+    /* copy artwork */
+    to->artwork = itdb_artwork_duplicate (from->artwork);
+
     return to;
 }
 
@@ -865,15 +893,87 @@
 }
 
 
+
+/* look for a picture specified by coverart_template  */
+static void add_artwork (Track *tr)
+{
+    ExtraTrackData *etr;
+    const gchar *full_template;
+    gchar **templates, **tplp;
+    gchar *dirname;
+    gchar *filename_local = NULL;
+
+    g_return_if_fail (tr);
+    etr = tr->userdata;
+    g_return_if_fail (etr);
+
+    dirname = g_path_get_dirname (etr->pc_path_utf8);
+
+    full_template = prefs_get_coverart_template ();
+
+    templates = g_strsplit (full_template, ";", 0);
+    tplp = templates;
+    while (*tplp && !filename_local)
+    {
+       gchar *filename_utf8;
+       gchar *fname = get_string_from_template (tr, *tplp, TRUE);
+       if (fname)
+       {
+           if (strchr (fname, '.') != NULL)
+           {   /* if fname has an extension, try if it is valid */
+               filename_utf8 = g_build_filename (dirname, fname, NULL);
+               filename_local = charset_from_utf8 (filename_utf8);
+               g_free (filename_utf8);
+               if (!g_file_test (filename_local, G_FILE_TEST_EXISTS))
+               {
+                   g_free (filename_local);
+                   filename_local = NULL;
+               }
+           }
+           else
+           {   /* otherwise try out different extensions */
+               const gchar **extp = imageext;
+               while (*extp && !filename_local)
+               {
+                   gchar *ffname;
+                   ffname = g_strconcat (fname, *extp, NULL);
+                   filename_utf8 = g_build_filename (dirname, ffname, NULL);
+                   g_free (ffname);
+                   filename_local = charset_from_utf8 (filename_utf8);
+                   g_free (filename_utf8);
+                   if (!g_file_test (filename_local, G_FILE_TEST_EXISTS))
+                   {
+                       g_free (filename_local);
+                       filename_local = NULL;
+                   }
+                   ++extp;
+               }
+           }
+       }
+       g_free (fname);
+       ++tplp;
+    }
+
+    if (filename_local)
+    {
+       gp_track_set_thumbnails (tr, filename_local);
+    }
+
+    g_strfreev (templates);
+}
+
+
+
 /* Fills the supplied @orig_track with data from the file @name. If
  * @or_track is NULL, a new track struct is created. The entries
  * pc_path_utf8 and pc_path_locale are not changed if an entry already
  * exists */
 /* Returns NULL on error, a pointer to the Track otherwise */
-Track *get_track_info_from_file (gchar *name, Track *orig_track)
+static Track *get_track_info_from_file (gchar *name, Track *orig_track)
 {
     Track *track = NULL;
     Track *nti = NULL;
+    FileType filetype;
     gint len;
     gchar *name_utf8 = NULL;
 
@@ -897,7 +997,8 @@
     len = strlen (name);
     if (len < 4) return NULL;
 
-    switch (determine_file_type(name))
+    filetype = determine_file_type(name);
+    switch (filetype)
     {
     case FILE_TYPE_MP3:
        nti = mp3_get_file_info (name);
@@ -936,6 +1037,7 @@
        gtkpod_warning (_("The following track could not be processed (filetype 
unknown): '%s'\n"), name_utf8);
        g_free (name_utf8);
        return NULL;
+    case FILE_TYPE_IMAGE:
     case FILE_TYPE_M3U:
     case FILE_TYPE_PLS:
        break;
@@ -971,16 +1073,23 @@
                replaygain_to_soundcheck (enti->radio_gain);
        /* Set unset strings (album...) from filename */
        set_unset_entries_from_filename (nti);
-       /* Make sure all strings are initialized -- that way we don't
-          have to worry about it when we are handling the
-          strings. Also, validate_entries() will fill in the utf16
-          strings if that hasn't already been done. */
-       /* exception: md5_hash, charset and hostname: these may be NULL. */
+
+       /* Set coverart */
+       if (prefs_get_coverart())
+           add_artwork (nti);
+
        /* Set modification date to *now* */
        nti->time_modified = itdb_time_get_mac_time ();
        /* Set added date to *now* */
        nti->time_added = nti->time_modified;
 
+       /* Make sure all strings are initialized -- that way we don't
+          have to worry about it when we are handling the
+          strings. Also, validate_entries() will fill in the utf16
+          strings if that hasn't already been done. */
+       /* exception: md5_hash, charset and hostname: these may be
+        * NULL. */
+
        gp_track_validate_entries (nti);
 
        if (orig_track)
@@ -1000,8 +1109,17 @@
     }
     else
     {
-       gtkpod_warning (_("The following track could not be processed (filetype 
is known but analysis failed): '%s'\n"), name_utf8);
-    }  
+       switch (filetype)
+       {
+       case FILE_TYPE_IMAGE:
+       case FILE_TYPE_M3U:
+       case FILE_TYPE_PLS:
+           break;
+       default:
+           gtkpod_warning (_("The following track could not be processed 
(filetype is known but analysis failed): '%s'\n"), name_utf8);
+           break;
+       }
+    }
 
     while (widgets_blocked && gtk_events_pending ())
        gtk_main_iteration ();
@@ -1883,24 +2001,26 @@
   }
 
   /* check if file is a playlist */
-  switch (determine_file_type(fname)) {
-         case FILE_TYPE_M3U:
-         case FILE_TYPE_PLS:
-             if (add_playlist_by_filename (itdb, fname, plitem, -1,
-                                           addtrackfunc, data))
-                 return TRUE;
-             return FALSE;
-         case FILE_TYPE_MP3:
-         case FILE_TYPE_M4A:
-         case FILE_TYPE_M4P:
-         case FILE_TYPE_M4B:
-         case FILE_TYPE_WAV:
-         case FILE_TYPE_M4V:
-         case FILE_TYPE_MP4:
-         case FILE_TYPE_MOV:
-         case FILE_TYPE_MPG:
-         case FILE_TYPE_UNKNOWN:
-                 break;
+  switch (determine_file_type(fname))
+  {
+  case FILE_TYPE_M3U:
+  case FILE_TYPE_PLS:
+      if (add_playlist_by_filename (itdb, fname, plitem, -1,
+                                   addtrackfunc, data))
+         return TRUE;
+      return FALSE;
+  case FILE_TYPE_MP3:
+  case FILE_TYPE_M4A:
+  case FILE_TYPE_M4P:
+  case FILE_TYPE_M4B:
+  case FILE_TYPE_WAV:
+  case FILE_TYPE_M4V:
+  case FILE_TYPE_MP4:
+  case FILE_TYPE_MOV:
+  case FILE_TYPE_MPG:
+  case FILE_TYPE_IMAGE:
+  case FILE_TYPE_UNKNOWN:
+      break;
   }
 
   /* print a message about which file is being processed */
@@ -1918,7 +2038,7 @@
   /* Check if there exists already a track with the same filename */
   oldtrack = gp_track_by_filename (itdb, fname);
   /* If a track already exists in the database, either update it or
-     just add it to the current playlist (if it doesn't already exist) */
+     just add it to the current playlist (if it's not already there) */
   if (oldtrack)
   {
       if (prefs_get_update_existing ())
@@ -2079,6 +2199,7 @@
        break;
     case FILE_TYPE_M3U:
     case FILE_TYPE_PLS:
+    case FILE_TYPE_IMAGE:
     case FILE_TYPE_UNKNOWN:
        break;
     }
@@ -2580,6 +2701,7 @@
            break;
        case FILE_TYPE_M3U: 
        case FILE_TYPE_PLS: 
+       case FILE_TYPE_IMAGE: 
            break;
        }
        g_free (path);

Index: file.h
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/file.h,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -d -r1.46 -r1.47
--- file.h      19 Nov 2005 05:32:10 -0000      1.46
+++ file.h      10 Dec 2005 17:04:28 -0000      1.47
@@ -1,4 +1,4 @@
-/* Time-stamp: <2005-11-19 13:46:14 jcs>
+/* Time-stamp: <2005-12-11 01:53:26 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -53,7 +53,8 @@
     FILE_TYPE_MOV,
     FILE_TYPE_MPG,
     FILE_TYPE_M3U,
-    FILE_TYPE_PLS
+    FILE_TYPE_PLS,
+    FILE_TYPE_IMAGE
 } FileType;
 
 typedef enum
@@ -104,7 +105,6 @@
 void unmark_track_for_deletion (iTunesDB *itdb, Track *track);
 void gp_info_deleted_tracks (iTunesDB *itdb,
                             gdouble *size, guint32 *num);
-Track *get_track_info_from_file (gchar *name, Track *or_track);
 void update_charset_info (Track *track);
 gchar *resolve_path(const gchar *,const gchar * const *);
 void parse_offline_playcount (void);

Index: file_export.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/file_export.c,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -d -r1.56 -r1.57
--- file_export.c       26 Nov 2005 13:44:41 -0000      1.56
+++ file_export.c       10 Dec 2005 17:04:28 -0000      1.57
@@ -1,4 +1,4 @@
-/* Time-stamp: <2005-11-25 23:52:13 jcs>
+/* Time-stamp: <2005-12-11 00:14:03 jcs>
 |
 |  Copyright (C) 2002 Corey Donohoe <atmos at atmos.org>
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
@@ -247,7 +247,7 @@
     g_return_val_if_fail (track, NULL);
 
     prefs_get_string_value (EXPORT_FILES_TPL, &template);
-    res_utf8 = get_string_from_template (track, template, TRUE);
+    res_utf8 = get_string_from_full_template (track, template, TRUE);
     C_FREE (template);
 
     prefs_get_int_value (EXPORT_FILES_SPECIAL_CHARSET, &special_charset);
@@ -952,9 +952,8 @@
        for (n=0,i=0; i<num; ++i)
        {
            Track *track = g_list_nth_data (fcd->tracks, i);
-           gchar *infotext_utf8 = get_string_from_template (track,
-                                                            template,
-                                                            FALSE);
+           gchar *infotext_utf8 = get_string_from_full_template (
+               track, template, FALSE);
            gchar *filename = get_file_name_from_source (track,
                                                         source);
            gchar *infotext;

Index: misc.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/misc.c,v
retrieving revision 1.191
retrieving revision 1.192
diff -u -d -r1.191 -r1.192
--- misc.c      9 Dec 2005 14:55:34 -0000       1.191
+++ misc.c      10 Dec 2005 17:04:28 -0000      1.192
@@ -1,5 +1,5 @@
 /* -*- coding: utf-8; -*-
-|  Time-stamp: <2005-12-09 23:51:00 jcs>
+|  Time-stamp: <2005-12-11 00:15:39 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -1057,7 +1057,10 @@
 /* Match a list of templates @p separated by ';' with the type of the
    filename. E.g. '%s.mp3;%t.wav' will return '%s.mp3' if @track is an
    mp3 file, or '%t.wav' if @track is a wav file. If no template can
-   be matched, an empty string is returned. */
+   be matched, an empty string is returned.
+
+   String be freed after use.
+*/
 static gchar *select_template (Track *track, const gchar *p)
 {
     gchar **templates, **tplp;
@@ -1105,56 +1108,38 @@
 }
 
 
-/* Return a string for @track built according to @full_template.
-   @full_template can contain several templates separated by ';',
-   e.g. '%s.mp3;%t.wav'. The correct one is selected using
-   select_template() defined above.
-   If @is_filename is TRUE, potentially harmful characters are
-   replaced in an attempt to create a valid filename.
-   If @is_filename is FALSE, the extension (e.g. '.mp3' will be
-   removed). */
+/* Return a string for @track built according to @template.
+
+   @is_filename: if TRUE, remove potentially harmful characters.*/
 gchar *get_string_from_template (Track *track,
-                                const gchar *full_template,
+                                const gchar *template,
                                 gboolean is_filename)
 {
     GString *result;
-    gchar *p, *res_utf8;
+    gchar *res_utf8;
+    const gchar *p;
     gchar *basename = NULL;
-    gchar *template;
+    gchar *basename_noext = NULL;
     ExtraTrackData *etr;
 
-    g_return_val_if_fail (track && full_template, NULL);
+    g_return_val_if_fail (track, NULL);
+    g_return_val_if_fail (template, NULL);
     etr = track->userdata;
     g_return_val_if_fail (etr, NULL);
 
-    template = select_template (track, full_template);
-
-    if (!template)
-    {
-       gchar *fn = get_file_name (track);
-       gtkpod_warning (_("Template ('%s') does not match file type '%s'\n"), 
full_template, fn ? fn:"");
-       g_free (fn);
-       return NULL;
-    }
-
-    if (!is_filename)
-    {   /* remove an extension, if present ('.???' or '.????'  at the
-          end) */
-       gchar *pnt = strrchr (template, '.');
-       if (pnt)
-       {
-           if (pnt == template+strlen(template)-3)
-               *pnt = 0;
-           if (pnt == template+strlen(template)-4)
-               *pnt = 0;
-       }
-    }
-
     result = g_string_new ("");
 
     /* try to get the original filename */
     if (etr->pc_path_utf8)
        basename = g_path_get_basename (etr->pc_path_utf8);
+    /* get original filename without extension */
+    if (basename)
+    {
+       gchar *ptr;
+       basename_noext = g_strdup (basename);
+       ptr = strrchr (basename_noext, '.');
+       if (ptr) *ptr = '\0';
+    }
 
     p=template;
     while (*p != '\0') {
@@ -1170,6 +1155,12 @@
                    tmp = basename;
                }
                break;
+           case 'O':
+               if (basename_noext)
+               {
+                   tmp = basename_noext;
+               }
+               break;
            case 'p':
                pl = pm_get_selected_playlist ();
                if (pl)
@@ -1274,6 +1265,61 @@
        }
     }
 
+    g_free (basename);
+    g_free (basename_noext);
+
+    return res_utf8;
+}
+
+
+
+/* Return a string for @track built according to @full_template.
+   @full_template can contain several templates separated by ';',
+   e.g. '%s.mp3;%t.wav'. The correct one is selected using
+   select_template() defined above.
+
+   If @is_filename is TRUE, potentially harmful characters are
+   replaced in an attempt to create a valid filename.
+
+   If @is_filename is FALSE, the extension (e.g. '.mp3' will be
+   removed). */
+gchar *get_string_from_full_template (Track *track,
+                                     const gchar *full_template,
+                                     gboolean is_filename)
+{
+    gchar *res_utf8;
+    gchar *template;
+
+    g_return_val_if_fail (track, NULL);
+    g_return_val_if_fail (full_template, NULL);
+
+    template = select_template (track, full_template);
+
+    if (!template)
+    {
+       gchar *fn = get_file_name (track);
+       gtkpod_warning (_("Template ('%s') does not match file type '%s'\n"), 
full_template, fn ? fn:"");
+       g_free (fn);
+       return NULL;
+    }
+
+    if (!is_filename)
+    {   /* remove an extension, if present ('.???' or '.????'  at the
+          end) */
+       gchar *pnt = strrchr (template, '.');
+       if (pnt)
+       {
+           if (pnt == template+strlen(template)-3)
+               *pnt = 0;
+           if (pnt == template+strlen(template)-4)
+               *pnt = 0;
+       }
+    }
+
+    res_utf8 = get_string_from_template (track, template, is_filename);
+
+    g_free (template);
+
     return res_utf8;
 }
 

Index: misc.h
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/misc.h,v
retrieving revision 1.106
retrieving revision 1.107
diff -u -d -r1.106 -r1.107
--- misc.h      25 Nov 2005 14:12:05 -0000      1.106
+++ misc.h      10 Dec 2005 17:04:29 -0000      1.107
@@ -1,4 +1,4 @@
-/* Time-stamp: <2005-11-25 23:05:03 jcs>
+/* Time-stamp: <2005-12-11 00:15:38 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -201,8 +201,11 @@
                                   const gchar *name);
 
 gchar *get_string_from_template (Track *track,
-                                const gchar *full_template,
+                                const gchar *template,
                                 gboolean is_filename);
+gchar *get_string_from_full_template (Track *track,
+                                     const gchar *full_template,
+                                     gboolean is_filename);
 
 GList *glist_duplicate (GList *list);
 

Index: misc_track.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/misc_track.c,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -d -r1.32 -r1.33
--- misc_track.c        3 Dec 2005 16:36:26 -0000       1.32
+++ misc_track.c        10 Dec 2005 17:04:29 -0000      1.33
@@ -1,4 +1,4 @@
-/* Time-stamp: <2005-12-04 00:30:49 jcs>
+/* Time-stamp: <2005-12-11 02:00:14 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -1384,6 +1384,7 @@
                        added = TRUE;
                        break;
                    case FILE_TYPE_UNKNOWN:
+                   case FILE_TYPE_IMAGE:
                        break;
                    }
                }

Index: prefs.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/prefs.c,v
retrieving revision 1.154
retrieving revision 1.155
diff -u -d -r1.154 -r1.155
--- prefs.c     9 Dec 2005 14:55:34 -0000       1.154
+++ prefs.c     10 Dec 2005 17:04:29 -0000      1.155
@@ -1,4 +1,4 @@
-/* Time-stamp: <2005-12-09 23:52:06 jcs>
+/* Time-stamp: <2005-12-10 22:52:53 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -232,6 +232,8 @@
     mycfg->parsetags = FALSE;
     mycfg->parsetags_overwrite = FALSE;
     mycfg->parsetags_template = g_strdup ("%a - %A/%T %t.mp3;%t.wav");
+    mycfg->coverart = TRUE;
+    mycfg->coverart_template = g_strdup ("%A;folder.jpg");
     for (i=0; i<PANED_NUM; ++i)
     {
        mycfg->paned_pos[i] = -1;  /* -1 means: let gtk worry about position */
@@ -652,6 +654,14 @@
          {
              prefs_set_parsetags_template(strdup(arg));
          }
+         else if(g_ascii_strcasecmp (line, "coverart") == 0)
+         {
+             prefs_set_coverart((gboolean)atoi(arg));
+         }
+         else if(g_ascii_strcasecmp (line, "coverart_template") == 0)
+         {
+             prefs_set_coverart_template(strdup(arg));
+         }
          else if(arg_comp (line, "col_visible", &off) == 0)
          {
              gint i = atoi (line+off);
@@ -1219,6 +1229,8 @@
     fprintf(fp, "parsetags=%d\n", prefs_get_parsetags());
     fprintf(fp, "parsetags_overwrite=%d\n", prefs_get_parsetags_overwrite());
     fprintf(fp, "parsetags_template=%s\n",cfg->parsetags_template);
+    fprintf(fp, "coverart=%d\n", prefs_get_coverart());
+    fprintf(fp, "coverart_template=%s\n",cfg->coverart_template);
     fprintf(fp, _("# position of sliders (paned): playlists, above tracks,\n# 
between sort tabs, and in statusbar.\n"));
     for (i=0; i<PANED_NUM; ++i)
     {
@@ -1578,6 +1590,7 @@
        for (i=0; i<PATH_NUM; ++i)
            result->path[i] = g_strdup (cfg->path[i]);
        result->parsetags_template = g_strdup(cfg->parsetags_template);
+       result->coverart_template = g_strdup(cfg->coverart_template);
        result->mserv_username = g_strdup(cfg->mserv_username);
        result->pc_dir = g_strdup(cfg->pc_dir);
        result->pc_log_file = g_strdup(cfg->pc_log_file);
@@ -1904,6 +1917,29 @@
     }
 }
 
+void prefs_set_coverart(gboolean active)
+{
+  cfg->coverart = active;
+}
+
+gboolean prefs_get_coverart(void)
+{
+  return cfg->coverart;
+}
+
+const gchar *prefs_get_coverart_template (void)
+{
+    return cfg->coverart_template;
+}
+
+void prefs_set_coverart_template (const gchar *tpl)
+{
+    if (tpl)
+    {
+       g_free(cfg->coverart_template);
+       cfg->coverart_template = g_strdup (tpl);
+    }
+}
 
 /* Display column tm_item @visible: new value */
 void prefs_set_col_visible (TM_item tm_item, gboolean visible)

Index: prefs.h
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/prefs.h,v
retrieving revision 1.101
retrieving revision 1.102
diff -u -d -r1.101 -r1.102
--- prefs.h     25 Nov 2005 14:12:05 -0000      1.101
+++ prefs.h     10 Dec 2005 17:04:29 -0000      1.102
@@ -1,4 +1,4 @@
-/* Time-stamp: <2005-11-12 16:05:19 jcs>
+/* Time-stamp: <2005-12-10 22:46:54 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -131,6 +131,8 @@
   gboolean parsetags;           /* Get tags by parsing filename? */
   gchar   *parsetags_template;  /* template for parsing tags */
   gboolean parsetags_overwrite; /* Overwrite tags already set? */
+  gboolean coverart;            /* Read coverart when adding files? */
+  gchar *coverart_template;     /* template for coverart filename   */
   gboolean autosettags[TM_NUM_TAGS_PREFS]; /* autoset empty tags to filename?*/
   gint paned_pos[PANED_NUM];    /* position of the GtkPaned elements */
 
@@ -229,6 +231,10 @@
 gboolean prefs_get_autosettags (gint category);
 void prefs_set_parsetags_template (const gchar *tpl);
 const gchar *prefs_get_parsetags_template (void);
+void prefs_set_coverart (gboolean active);
+gboolean prefs_get_coverart(void);
+void prefs_set_coverart_template (const gchar *tpl);
+const gchar *prefs_get_coverart_template (void);
 void prefs_set_last_dir_browse (const gchar * dir);
 const gchar *prefs_get_last_dir_browse (void);
 void prefs_set_charset (gchar *charset);

Index: prefs_window.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/prefs_window.c,v
retrieving revision 1.110
retrieving revision 1.111
diff -u -d -r1.110 -r1.111
--- prefs_window.c      25 Nov 2005 14:12:05 -0000      1.110
+++ prefs_window.c      10 Dec 2005 17:04:29 -0000      1.111
@@ -1,4 +1,4 @@
-/* Time-stamp: <2005-11-25 23:04:16 jcs>
+/* Time-stamp: <2005-12-10 22:52:53 jcs>
 |
 |  Copyright (C) 2002 Corey Donohoe <atmos at atmos.org>
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
@@ -685,6 +685,23 @@
        }
        gtk_widget_set_sensitive (w, tmpcfg->parsetags);
     }
+    if((w = gtkpod_xml_get_widget (prefs_window_xml, "coverart")))
+    {
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w),
+                                    tmpcfg->coverart);
+    }
+    if((w = gtkpod_xml_get_widget (prefs_window_xml, "coverart_template")))
+    {
+       if (tmpcfg->coverart_template)
+       {  /* we should copy the new path first because by setting
+             the text we might get a callback destroying the old
+             value... */
+           gchar *buf = g_strdup (tmpcfg->coverart_template);
+           gtk_entry_set_text(GTK_ENTRY(w), buf);
+           g_free (buf);
+       }
+       gtk_widget_set_sensitive (w, tmpcfg->coverart);
+    }
 
     for (i=0; i<TM_NUM_COLUMNS; ++i)
     {
@@ -923,6 +940,8 @@
        prefs_set_parsetags(tmpcfg->parsetags);
        prefs_set_parsetags_overwrite(tmpcfg->parsetags_overwrite);
        prefs_set_parsetags_template(tmpcfg->parsetags_template);
+       prefs_set_coverart(tmpcfg->coverart);
+       prefs_set_coverart_template(tmpcfg->coverart_template);
        for (i=0; i<TM_NUM_COLUMNS; ++i)
        {
            prefs_set_col_visible (i, tmpcfg->col_visible[i]);
@@ -1505,10 +1524,10 @@
     GtkWidget *w;
 
     tmpcfg->parsetags = val;
-    if((w = gtkpod_xml_get_widget (prefs_window_xml, "parsetags_overwrite")))
-       gtk_widget_set_sensitive (w, val);
-    if((w = gtkpod_xml_get_widget (prefs_window_xml, "parsetags_template")))
-       gtk_widget_set_sensitive (w, val);
+    w = gtkpod_xml_get_widget (prefs_window_xml, "parsetags_overwrite");
+    gtk_widget_set_sensitive (w, val);
+    w = gtkpod_xml_get_widget (prefs_window_xml, "parsetags_template");
+    gtk_widget_set_sensitive (w, val);
 }
 
 void
@@ -1521,12 +1540,32 @@
 
 void
 on_parsetags_template_changed             (GtkEditable     *editable,
-                                       gpointer         user_data)
+                                          gpointer         user_data)
 {
     g_free (tmpcfg->parsetags_template);
     tmpcfg->parsetags_template = gtk_editable_get_chars (editable,0, -1);
 }
 
+void
+on_coverart_toggled                   (GtkToggleButton *togglebutton,
+                                      gpointer         user_data)
+{
+    gboolean val = gtk_toggle_button_get_active(togglebutton);
+    GtkWidget *w;
+
+    tmpcfg->coverart = val;
+    w = gtkpod_xml_get_widget (prefs_window_xml, "coverart_template");
+    gtk_widget_set_sensitive (w, val);
+}
+
+void
+on_coverart_template_changed             (GtkEditable     *editable,
+                                       gpointer         user_data)
+{
+    g_free (tmpcfg->coverart_template);
+    tmpcfg->coverart_template = gtk_editable_get_chars (editable,0, -1);
+}
+
 void prefs_window_set_col_visible (gint column, gboolean visible)
 {
     if (column < TM_NUM_COLUMNS)



-------------------------------------------------------
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