diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.am | 6 | ||||
-rw-r--r-- | tests/test-covers.c | 46 | ||||
-rw-r--r-- | tests/test-write-covers.c | 126 |
3 files changed, 161 insertions, 17 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index 8875c65..16d9214 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,5 +1,5 @@ if HAVE_GDKPIXBUF -TESTTHUMBS=test-thumbnails +TESTTHUMBS=test-thumbnails test-write-thumbnails else TESTTHUMBS= endif @@ -16,4 +16,8 @@ if HAVE_GDKPIXBUF test_thumbnails_SOURCES = test-covers.c test_thumbnails_CFLAGS = $(GDKPIXBUF_CFLAGS) $(AM_CFLAGS) test_thumbnails_LDADD = $(top_builddir)/src/libgpod.la $(GDKPIXBUF_LIBS) + +test_write_thumbnails_SOURCES = test-write-covers.c +test_write_thumbnails_CFLAGS = $(GDKPIXBUF_CFLAGS) $(AM_CFLAGS) +test_write_thumbnails_LDADD = $(top_builddir)/src/libgpod.la $(GDKPIXBUF_LIBS) endif diff --git a/tests/test-covers.c b/tests/test-covers.c index e7e1fca..a119cc9 100644 --- a/tests/test-covers.c +++ b/tests/test-covers.c @@ -36,14 +36,25 @@ ipod_image_to_gdk_pixbuf (Itdb_Image *image) { GdkPixbuf *result; guchar *pixels; + int row_stride; + + if (image->type == ITDB_IMAGE_FULL_SCREEN) { + row_stride = 140; + } else if (image->type == ITDB_IMAGE_NOW_PLAYING) { + row_stride = 56; + } else { + return NULL; + } pixels = itdb_image_get_rgb_data (image); if (pixels == NULL) { return NULL; } + result = gdk_pixbuf_new_from_data (pixels, GDK_COLORSPACE_RGB, FALSE, 8, image->width, image->height, - image->width * 3, + /*image->width * 3, */ + row_stride * 3, (GdkPixbufDestroyNotify)g_free, NULL); return result; @@ -59,28 +70,31 @@ save_itdb_image (Itdb_Image *image, const char *filename) if (thumb != NULL) { gdk_pixbuf_save (thumb, filename, "png", NULL, NULL); gdk_pixbuf_unref (thumb); - g_print ("Saved %s\n", filename); +/* g_print ("Saved %s\n", filename); */ } } static void save_song_thumbnails (Itdb_Track *song) { - if (song->full_size_thumbnail != NULL) { + GList *it; + + for (it = song->thumbnails; it != NULL; it = it->next) { + Itdb_Image *image; gchar *filename; - - filename = g_strdup_printf ("/tmp/fullsize%016llx.png", - song->dbid); - save_itdb_image (song->full_size_thumbnail,filename); - g_free (filename); - } - if (song->now_playing_thumbnail != NULL) { - gchar *filename; - - filename = g_strdup_printf ("/tmp/nowplaying%016llx.png", - song->dbid); - save_itdb_image (song->now_playing_thumbnail, filename); - g_free (filename); + image = (Itdb_Image *)it->data; + filename = NULL; + if (image->type == ITDB_IMAGE_FULL_SCREEN) { + filename = g_strdup_printf ("/tmp/fullsize%016llx.png", + song->dbid); + } else if (image->type == ITDB_IMAGE_NOW_PLAYING) { + filename = g_strdup_printf ("/tmp/nowplaying%016llx.png", + song->dbid); + } + if (filename != NULL) { + save_itdb_image (image, filename); + g_free (filename); + } } } diff --git a/tests/test-write-covers.c b/tests/test-write-covers.c new file mode 100644 index 0000000..e338716 --- /dev/null +++ b/tests/test-write-covers.c @@ -0,0 +1,126 @@ +/* Copyright (c) 2005, Christophe Fergeau <teuf@gnome.org> + * All rights reserved. + + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the <ORGANIZATION> nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "itdb.h" + +#include <locale.h> +#include <string.h> +#include <gdk-pixbuf/gdk-pixbuf.h> + +static GList * +get_cover_list (const char *dirname) +{ + GDir *dir; + const char *filename; + GList *result; + + dir = g_dir_open (dirname, 0, NULL); + if (dir == NULL) { + return NULL; + } + result = NULL; + filename = g_dir_read_name (dir); + while (filename != NULL) { + const char *ext; + ext = strrchr (filename, '.'); + if (ext != NULL) { + if ((g_ascii_strcasecmp (ext, ".png") == 0) + || (g_ascii_strcasecmp (ext, ".jpg") == 0) + || (g_ascii_strcasecmp (ext, ".jpeg") == 0)) { + char *fullpath; + fullpath = g_build_filename (dirname, filename, + NULL); + result = g_list_prepend (result, fullpath); + } + } + filename = g_dir_read_name (dir); + } + g_dir_close (dir); + + return g_list_reverse (result); +} + + +int +main (int argc, char **argv) +{ + Itdb_iTunesDB *db; + GList *it; + GList *covers; + int nb_covers; + + if (argc < 3) { + g_print ("Usage: %s mountpoint image-dir\n", argv[0]); + return 1; + } + + setlocale (LC_ALL, ""); + g_type_init (); + covers = get_cover_list (argv[2]); + if (covers == NULL) { + g_print ("Error, %s should be a directory containing pictures\n", argv[2]); + return 1; + } + nb_covers = g_list_length (covers); + db = itdb_parse (argv[1], NULL); + if (db == NULL) { + g_print ("Error reading iPod database\n"); + return 1; + } + for (it = db->tracks; it != NULL; it = it->next) { + Itdb_Track *song; + const char *coverpath; + + song = (Itdb_Track*)it->data; + itdb_track_remove_thumbnail (song); + + coverpath = g_list_nth_data (covers, + g_random_int_range (0, nb_covers)); + itdb_track_set_thumbnail (song, coverpath); +/* g_print ("%s - %s - %s gets %s\n", + song->artist, song->album, song->title, coverpath);*/ + + } +/* if (db->tracks != NULL) { + Itdb_Track *song; + const char *coverpath; + + song = (Itdb_Track *)db->tracks->data; + coverpath = g_list_nth_data (covers, + g_random_int_range (0, nb_covers)); + itdb_track_remove_thumbnail (song); + itdb_track_set_thumbnail (song, coverpath); + }*/ + + itdb_write (db, NULL, NULL); + itdb_free (db); + g_list_foreach (covers, (GFunc)g_free, NULL); + g_list_free (covers); + + return 0; +} |