diff options
Diffstat (limited to 'src/itdb_track.c')
| -rw-r--r-- | src/itdb_track.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/itdb_track.c b/src/itdb_track.c index 41372c0..9aa1b30 100644 --- a/src/itdb_track.c +++ b/src/itdb_track.c @@ -29,6 +29,7 @@ #include "itdb_private.h" #include <string.h> +#include <glib/gstdio.h> /* Generate a new Itdb_Track structure */ Itdb_Track *itdb_track_new (void) @@ -144,6 +145,22 @@ 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) { @@ -158,6 +175,8 @@ void itdb_track_free (Itdb_Track *track) g_free (track->filetype); g_free (track->grouping); g_free (track->ipod_path); + itdb_track_free_generated_thumbnails (track); + g_free (track->orig_image_filename); if (track->userdata && track->userdata_destroy) (*track->userdata_destroy) (track->userdata); g_free (track); @@ -292,3 +311,30 @@ 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; +} + + +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; +} |
