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