diff options
Diffstat (limited to 'src/itdb_track.c')
-rw-r--r-- | src/itdb_track.c | 122 |
1 files changed, 39 insertions, 83 deletions
diff --git a/src/itdb_track.c b/src/itdb_track.c index 66d7b7e..6b0bcf0 100644 --- a/src/itdb_track.c +++ b/src/itdb_track.c @@ -1,4 +1,4 @@ -/* Time-stamp: <2005-11-12 22:57:11 jcs> +/* Time-stamp: <2005-11-28 22:31:30 jcs> | | Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net> | Part of the gtkpod project. @@ -50,6 +50,8 @@ Itdb_Track *itdb_track_new (void) { Itdb_Track *track = g_new0 (Itdb_Track, 1); + track->artwork = itdb_artwork_new (); + track->visible = 1; return track; } @@ -79,7 +81,7 @@ static void itdb_track_set_defaults (Itdb_Track *tr) g_return_if_fail (tr->itdb); /* The exact meaning of unk126 is unknown, but always seems to be - 0xffff for MP3/AAC songs, 0x0 for uncompressed songs (like WAVE + 0xffff for MP3/AAC tracks, 0x0 for uncompressed tracks (like WAVE format), 0x1 for Audible. */ if (tr->unk126 == 0) { @@ -107,9 +109,9 @@ static void itdb_track_set_defaults (Itdb_Track *tr) tr->unk126 = 0x00; /* default value */ } } - /* The exact meaning of unk144 is unknown, but MP3 songs appear to + /* The exact meaning of unk144 is unknown, but MP3 tracks appear to be always 0x0000000c or 0x0100000c (if played one or more times - in iTunes), AAC songs are always 0x01000033, Audible files are + in iTunes), AAC tracks are always 0x01000033, Audible files are 0x01000029, WAV files are 0x0. */ if (tr->unk144 == 0) { @@ -160,7 +162,7 @@ static void itdb_track_set_defaults (Itdb_Track *tr) } } } - /* The sample rate of the song expressed as an IEEE 32 bit + /* The sample rate of the track expressed as an IEEE 32 bit floating point number. It's uncertain why this is here. itdb will set this when adding a track */ tr->samplerate2 = tr->samplerate; @@ -206,22 +208,6 @@ void itdb_track_add (Itdb_iTunesDB *itdb, Itdb_Track *track, gint32 pos) else itdb->tracks = g_list_insert (itdb->tracks, track, pos); } -void -itdb_track_free_generated_thumbnails (Itdb_Track *track) -{ - GList *it; - - for (it = track->thumbnails; it != NULL; it = it->next) { - Itdb_Image *image; - - image = (Itdb_Image *)it->data; - g_free (image->filename); - g_free (image); - } - g_list_free (track->thumbnails); - track->thumbnails = NULL; -} - /* Free the memory taken by @track */ void itdb_track_free (Itdb_Track *track) { @@ -242,8 +228,8 @@ void itdb_track_free (Itdb_Track *track) g_free (track->subtitle); g_free (track->ipod_path); g_free (track->chapterdata_raw); - itdb_track_free_generated_thumbnails (track); - g_free (track->orig_image_filename); + itdb_artwork_remove_thumbnails (track->artwork); + g_free (track->artwork); if (track->userdata && track->userdata_destroy) (*track->userdata_destroy) (track->userdata); g_free (track); @@ -276,30 +262,6 @@ void itdb_track_unlink (Itdb_Track *track) track->itdb = NULL; } -static GList *dup_thumbnails (GList *thumbnails) -{ - GList *it; - GList *result; - - result = NULL; - for (it = thumbnails; it != NULL; it = it->next) - { - Itdb_Image *new_image; - Itdb_Image *image; - - image = (Itdb_Image *)it->data; - g_return_val_if_fail (image, NULL); - - new_image = g_new (Itdb_Image, 1); - memcpy (new_image, image, sizeof (Itdb_Image)); - new_image->filename = g_strdup (image->filename); - - result = g_list_prepend (result, new_image); - } - - return g_list_reverse (result); -} - /* Duplicate an existing track */ Itdb_Track *itdb_track_duplicate (Itdb_Track *tr) { @@ -338,8 +300,7 @@ Itdb_Track *itdb_track_duplicate (Itdb_Track *tr) } /* Copy thumbnail data */ - tr_dup->orig_image_filename = g_strdup (tr->orig_image_filename); - tr_dup->thumbnails = dup_thumbnails (tr->thumbnails); + tr_dup->artwork = itdb_artwork_duplicate (tr->artwork); /* Copy userdata */ if (tr->userdata && tr->userdata_duplicate) @@ -349,6 +310,35 @@ Itdb_Track *itdb_track_duplicate (Itdb_Track *tr) } +gboolean itdb_track_set_thumbnails (Itdb_Track *track, + const gchar *filename) +{ + gboolean result; + + g_return_val_if_fail (track, FALSE); + g_return_val_if_fail (filename, FALSE); + + itdb_artwork_remove_thumbnails (track->artwork); + result = itdb_artwork_add_thumbnail (track->artwork, + ITDB_THUMB_COVER_SMALL, + filename); + if (result == TRUE) + result = itdb_artwork_add_thumbnail (track->artwork, + ITDB_THUMB_COVER_LARGE, + filename); + if (result == FALSE) + itdb_artwork_remove_thumbnails (track->artwork); + + return result; +} + + +void itdb_track_remove_thumbnails (Itdb_Track *track) +{ + g_return_if_fail (track); + itdb_artwork_remove_thumbnails (track->artwork); +} + /* Returns the track with the ID @id or NULL if the ID cannot be * found. */ @@ -419,38 +409,4 @@ Itdb_Track *itdb_track_id_tree_by_id (GTree *idtree, guint32 id) return (Itdb_Track *)g_tree_lookup (idtree, &id); } -void -itdb_track_remove_thumbnail (Itdb_Track *song) -{ - itdb_track_free_generated_thumbnails (song); - g_free (song->orig_image_filename); - song->orig_image_filename = NULL; - song->image_id = 0; -} - -#ifdef HAVE_GDKPIXBUF -/* This operation doesn't make sense when we can't save thumbnail files */ -int -itdb_track_set_thumbnail (Itdb_Track *song, const char *filename) -{ - struct stat statbuf; - - g_return_val_if_fail (song != NULL, -1); - - if (g_stat (filename, &statbuf) != 0) { - return -1; - } - itdb_track_remove_thumbnail (song); - song->artwork_size = statbuf.st_size; - song->orig_image_filename = g_strdup (filename); - - return 0; -} -#else -int -itdb_track_set_thumbnail (Itdb_Track *song, const char *filename) -{ - return -1; -} -#endif |