diff options
author | Jorg Schuler <jcsjcs@users.sourceforge.net> | 2007-09-15 15:33:37 +0000 |
---|---|---|
committer | Jorg Schuler <jcsjcs@users.sourceforge.net> | 2007-09-15 15:33:37 +0000 |
commit | 13839ab29e66c8720632b36e4248edcd4ae74047 (patch) | |
tree | ceae7af81e236934a3e7b4c2d75833c59351a734 | |
parent | e76676a7233fee6a3b7043443dda2bdbfe06703e (diff) | |
download | libgpod-13839ab29e66c8720632b36e4248edcd4ae74047.tar.gz libgpod-13839ab29e66c8720632b36e4248edcd4ae74047.tar.xz libgpod-13839ab29e66c8720632b36e4248edcd4ae74047.zip |
* src/itdb_device.c:
Re-organized the representation of iPod models -- instead of 1st
to 7th generation more well-known names like "iPod Nano 1G",
"iPod Nano 2G"... are used.
Added untested support for iPod Classic Artwork. Not clear which
thumbnail type is used for what.
src/itdb_track.c (itdb_track_set_thumbnails_internal):
Please note: itdb_track_set_thumbnails() needs to be thought
over to make sure all thumbnail types are added properly. Please
see note in itdb_track.c for details.
src/itdb.h: Added symbols for the new representation indicated
above: ITDB_IPOD_GENERATION_*, ITDB_IPOD_MODEL_*
git-svn-id: https://gtkpod.svn.sf.net/svnroot/gtkpod/libgpod/trunk@1695 f01d2545-417e-4e96-918e-98f8d0dbbcb6
-rw-r--r-- | ChangeLog | 18 | ||||
-rw-r--r-- | docs/reference/tmpl/artwork.sgml | 4 | ||||
-rw-r--r-- | docs/reference/tmpl/device.sgml | 25 | ||||
-rw-r--r-- | src/itdb.h | 28 | ||||
-rw-r--r-- | src/itdb_device.c | 253 | ||||
-rw-r--r-- | src/itdb_track.c | 93 |
6 files changed, 305 insertions, 116 deletions
@@ -1,3 +1,21 @@ +2007-09-15 Jorg Schuler <jcsjcs at users.sourceforge.net> + + * src/itdb_device.c: + Re-organized the representation of iPod models -- instead of 1st + to 7th generation more well-known names like "iPod Nano 1G", + "iPod Nano 2G"... are used. + + Added untested support for iPod Classic Artwork. Not clear which + thumbnail type is used for what. + + src/itdb_track.c (itdb_track_set_thumbnails_internal): + Please note: itdb_track_set_thumbnails() needs to be thought + over to make sure all thumbnail types are added properly. Please + see note in itdb_track.c for details. + + src/itdb.h: Added symbols for the new representation indicated + above: ITDB_IPOD_GENERATION_*, ITDB_IPOD_MODEL_* + 2007-09-08 Jorg Schuler <jcsjcs at users.sourceforge.net> * src/db-image-parser.c diff --git a/docs/reference/tmpl/artwork.sgml b/docs/reference/tmpl/artwork.sgml index 94f5baf..3729c83 100644 --- a/docs/reference/tmpl/artwork.sgml +++ b/docs/reference/tmpl/artwork.sgml @@ -76,8 +76,8 @@ album/track artwork. For working with photos, see the @ITDB_THUMB_PHOTO_TV_SCREEN: @ITDB_THUMB_COVER_XLARGE: @ITDB_THUMB_COVER_MEDIUM: -@ITDB_THUMB_COVER_MEDIUM2: -@ITDB_THUMB_COVER_SMALL2: +@ITDB_THUMB_COVER_SMEDIUM: +@ITDB_THUMB_COVER_XSMALL: <!-- ##### FUNCTION itdb_artwork_new ##### --> <para> diff --git a/docs/reference/tmpl/device.sgml b/docs/reference/tmpl/device.sgml index db6bac7..43aab27 100644 --- a/docs/reference/tmpl/device.sgml +++ b/docs/reference/tmpl/device.sgml @@ -168,9 +168,22 @@ These functions are for reading and setting information about the iPod. @ITDB_IPOD_GENERATION_SECOND: @ITDB_IPOD_GENERATION_THIRD: @ITDB_IPOD_GENERATION_FOURTH: +@ITDB_IPOD_GENERATION_PHOTO: +@ITDB_IPOD_GENERATION_MOBILE: +@ITDB_IPOD_GENERATION_MINI_1: +@ITDB_IPOD_GENERATION_MINI_2: +@ITDB_IPOD_GENERATION_SHUFFLE_1: +@ITDB_IPOD_GENERATION_SHUFFLE_2: +@ITDB_IPOD_GENERATION_SHUFFLE_3: +@ITDB_IPOD_GENERATION_NANO_1: +@ITDB_IPOD_GENERATION_NANO_2: +@ITDB_IPOD_GENERATION_NANO_3: +@ITDB_IPOD_GENERATION_VIDEO_1: +@ITDB_IPOD_GENERATION_VIDEO_2: +@ITDB_IPOD_GENERATION_CLASSIC_1: +@ITDB_IPOD_GENERATION_TOUCH_1: @ITDB_IPOD_GENERATION_FIFTH: @ITDB_IPOD_GENERATION_SIXTH: -@ITDB_IPOD_GENERATION_MOBILE: <!-- ##### STRUCT Itdb_IpodInfo ##### --> <para> @@ -215,6 +228,15 @@ These functions are for reading and setting information about the iPod. @ITDB_IPOD_MODEL_NANO_GREEN: @ITDB_IPOD_MODEL_NANO_PINK: @ITDB_IPOD_MODEL_IPHONE_1: +@ITDB_IPOD_MODEL_SHUFFLE_SILVER: +@ITDB_IPOD_MODEL_SHUFFLE_PINK: +@ITDB_IPOD_MODEL_SHUFFLE_BLUE: +@ITDB_IPOD_MODEL_SHUFFLE_GREEN: +@ITDB_IPOD_MODEL_SHUFFLE_ORANGE: +@ITDB_IPOD_MODEL_SHUFFLE_PURPLE: +@ITDB_IPOD_MODEL_CLASSIC_SILVER: +@ITDB_IPOD_MODEL_CLASSIC_BLACK: +@ITDB_IPOD_MODEL_TOUCH_BLACK: <!-- ##### STRUCT Itdb_ArtworkFormat ##### --> <para> @@ -226,4 +248,5 @@ These functions are for reading and setting information about the iPod. @height: @correlation_id: @format: +@padding: @@ -80,9 +80,23 @@ typedef enum { ITDB_IPOD_GENERATION_SECOND, ITDB_IPOD_GENERATION_THIRD, ITDB_IPOD_GENERATION_FOURTH, + ITDB_IPOD_GENERATION_PHOTO, + ITDB_IPOD_GENERATION_MOBILE, + ITDB_IPOD_GENERATION_MINI_1, + ITDB_IPOD_GENERATION_MINI_2, + ITDB_IPOD_GENERATION_SHUFFLE_1, + ITDB_IPOD_GENERATION_SHUFFLE_2, + ITDB_IPOD_GENERATION_SHUFFLE_3, + ITDB_IPOD_GENERATION_NANO_1, + ITDB_IPOD_GENERATION_NANO_2, + ITDB_IPOD_GENERATION_NANO_3, + ITDB_IPOD_GENERATION_VIDEO_1, + ITDB_IPOD_GENERATION_VIDEO_2, + ITDB_IPOD_GENERATION_CLASSIC_1, + ITDB_IPOD_GENERATION_TOUCH_1, + /* The following 2 are no longer in use and should be removed */ ITDB_IPOD_GENERATION_FIFTH, ITDB_IPOD_GENERATION_SIXTH, - ITDB_IPOD_GENERATION_MOBILE } Itdb_IpodGeneration; typedef enum { @@ -108,7 +122,17 @@ typedef enum { ITDB_IPOD_MODEL_NANO_BLUE, ITDB_IPOD_MODEL_NANO_GREEN, ITDB_IPOD_MODEL_NANO_PINK, - ITDB_IPOD_MODEL_IPHONE_1 + ITDB_IPOD_MODEL_NANO_RED, + ITDB_IPOD_MODEL_IPHONE_1, + ITDB_IPOD_MODEL_SHUFFLE_SILVER, + ITDB_IPOD_MODEL_SHUFFLE_PINK, + ITDB_IPOD_MODEL_SHUFFLE_BLUE, + ITDB_IPOD_MODEL_SHUFFLE_GREEN, + ITDB_IPOD_MODEL_SHUFFLE_ORANGE, + ITDB_IPOD_MODEL_SHUFFLE_PURPLE, + ITDB_IPOD_MODEL_CLASSIC_SILVER, + ITDB_IPOD_MODEL_CLASSIC_BLACK, + ITDB_IPOD_MODEL_TOUCH_BLACK, } Itdb_IpodModel; struct _Itdb_IpodInfo { diff --git a/src/itdb_device.c b/src/itdb_device.c index 21d09dc..10ae719 100644 --- a/src/itdb_device.c +++ b/src/itdb_device.c @@ -80,80 +80,113 @@ static const Itdb_IpodInfo ipod_info_table [] = { {"9282", 20, ITDB_IPOD_MODEL_REGULAR, ITDB_IPOD_GENERATION_FOURTH, 50}, {"9787", 25, ITDB_IPOD_MODEL_REGULAR_U2, ITDB_IPOD_GENERATION_FOURTH, 50}, {"9268", 40, ITDB_IPOD_MODEL_REGULAR, ITDB_IPOD_GENERATION_FOURTH, 50}, - {"A079", 20, ITDB_IPOD_MODEL_COLOR, ITDB_IPOD_GENERATION_FOURTH, 50}, - {"A127", 20, ITDB_IPOD_MODEL_COLOR_U2, ITDB_IPOD_GENERATION_FOURTH, 50}, - {"9830", 60, ITDB_IPOD_MODEL_COLOR, ITDB_IPOD_GENERATION_FOURTH, 50}, /* First Generation Mini */ - {"9160", 4, ITDB_IPOD_MODEL_MINI, ITDB_IPOD_GENERATION_FIRST, 6}, - {"9436", 4, ITDB_IPOD_MODEL_MINI_BLUE, ITDB_IPOD_GENERATION_FIRST, 6}, - {"9435", 4, ITDB_IPOD_MODEL_MINI_PINK, ITDB_IPOD_GENERATION_FIRST, 6}, - {"9434", 4, ITDB_IPOD_MODEL_MINI_GREEN, ITDB_IPOD_GENERATION_FIRST, 6}, - {"9437", 4, ITDB_IPOD_MODEL_MINI_GOLD, ITDB_IPOD_GENERATION_FIRST, 6}, + {"9160", 4, ITDB_IPOD_MODEL_MINI, ITDB_IPOD_GENERATION_MINI_1, 6}, + {"9436", 4, ITDB_IPOD_MODEL_MINI_BLUE, ITDB_IPOD_GENERATION_MINI_1, 6}, + {"9435", 4, ITDB_IPOD_MODEL_MINI_PINK, ITDB_IPOD_GENERATION_MINI_1, 6}, + {"9434", 4, ITDB_IPOD_MODEL_MINI_GREEN, ITDB_IPOD_GENERATION_MINI_1, 6}, + {"9437", 4, ITDB_IPOD_MODEL_MINI_GOLD, ITDB_IPOD_GENERATION_MINI_1, 6}, /* Second Generation Mini */ - {"9800", 4, ITDB_IPOD_MODEL_MINI, ITDB_IPOD_GENERATION_SECOND, 6}, - {"9802", 4, ITDB_IPOD_MODEL_MINI_BLUE, ITDB_IPOD_GENERATION_SECOND, 6}, - {"9804", 4, ITDB_IPOD_MODEL_MINI_PINK, ITDB_IPOD_GENERATION_SECOND, 6}, - {"9806", 4, ITDB_IPOD_MODEL_MINI_GREEN, ITDB_IPOD_GENERATION_SECOND, 6}, - {"9801", 6, ITDB_IPOD_MODEL_MINI, ITDB_IPOD_GENERATION_SECOND, 20}, - {"9803", 6, ITDB_IPOD_MODEL_MINI_BLUE, ITDB_IPOD_GENERATION_SECOND, 20}, - {"9805", 6, ITDB_IPOD_MODEL_MINI_PINK, ITDB_IPOD_GENERATION_SECOND, 20}, - {"9807", 6, ITDB_IPOD_MODEL_MINI_GREEN, ITDB_IPOD_GENERATION_SECOND, 20}, + {"9800", 4, ITDB_IPOD_MODEL_MINI, ITDB_IPOD_GENERATION_MINI_2, 6}, + {"9802", 4, ITDB_IPOD_MODEL_MINI_BLUE, ITDB_IPOD_GENERATION_MINI_2, 6}, + {"9804", 4, ITDB_IPOD_MODEL_MINI_PINK, ITDB_IPOD_GENERATION_MINI_2, 6}, + {"9806", 4, ITDB_IPOD_MODEL_MINI_GREEN, ITDB_IPOD_GENERATION_MINI_2, 6}, + {"9801", 6, ITDB_IPOD_MODEL_MINI, ITDB_IPOD_GENERATION_MINI_2, 20}, + {"9803", 6, ITDB_IPOD_MODEL_MINI_BLUE, ITDB_IPOD_GENERATION_MINI_2, 20}, + {"9805", 6, ITDB_IPOD_MODEL_MINI_PINK, ITDB_IPOD_GENERATION_MINI_2, 20}, + {"9807", 6, ITDB_IPOD_MODEL_MINI_GREEN, ITDB_IPOD_GENERATION_MINI_2, 20}, /* Photo / Fourth Generation */ /* Buttons are integrated into the "touch wheel". */ - {"9829", 30, ITDB_IPOD_MODEL_COLOR, ITDB_IPOD_GENERATION_FOURTH, 50}, - {"9585", 40, ITDB_IPOD_MODEL_COLOR, ITDB_IPOD_GENERATION_FOURTH, 50}, - {"9586", 60, ITDB_IPOD_MODEL_COLOR, ITDB_IPOD_GENERATION_FOURTH, 50}, - {"9830", 60, ITDB_IPOD_MODEL_COLOR, ITDB_IPOD_GENERATION_FOURTH, 50}, + {"A079", 20, ITDB_IPOD_MODEL_COLOR, ITDB_IPOD_GENERATION_PHOTO, 50}, + {"A127", 20, ITDB_IPOD_MODEL_COLOR_U2, ITDB_IPOD_GENERATION_PHOTO, 50}, + {"9829", 30, ITDB_IPOD_MODEL_COLOR, ITDB_IPOD_GENERATION_PHOTO, 50}, + {"9585", 40, ITDB_IPOD_MODEL_COLOR, ITDB_IPOD_GENERATION_PHOTO, 50}, + {"9830", 60, ITDB_IPOD_MODEL_COLOR, ITDB_IPOD_GENERATION_PHOTO, 50}, + {"9586", 60, ITDB_IPOD_MODEL_COLOR, ITDB_IPOD_GENERATION_PHOTO, 50}, + {"9830", 60, ITDB_IPOD_MODEL_COLOR, ITDB_IPOD_GENERATION_PHOTO, 50}, /* Shuffle / Fourth Generation */ - {"9724", 0.5,ITDB_IPOD_MODEL_SHUFFLE, ITDB_IPOD_GENERATION_FOURTH, 3}, - {"9725", 1, ITDB_IPOD_MODEL_SHUFFLE, ITDB_IPOD_GENERATION_FOURTH, 3}, + {"9724", 0.5,ITDB_IPOD_MODEL_SHUFFLE, ITDB_IPOD_GENERATION_SHUFFLE_1, 3}, + {"9725", 1, ITDB_IPOD_MODEL_SHUFFLE, ITDB_IPOD_GENERATION_SHUFFLE_1, 3}, /* Shuffle / Sixth Generation */ /* Square, connected to computer via cable */ - {"A564", 1, ITDB_IPOD_MODEL_SHUFFLE, ITDB_IPOD_GENERATION_SIXTH, 3}, - - /* Nano / Fifth Generation */ + {"A564", 1, ITDB_IPOD_MODEL_SHUFFLE_SILVER, ITDB_IPOD_GENERATION_SHUFFLE_2, 3}, + {"A947", 1, ITDB_IPOD_MODEL_SHUFFLE_PINK, ITDB_IPOD_GENERATION_SHUFFLE_2, 3}, + {"A949", 1, ITDB_IPOD_MODEL_SHUFFLE_BLUE, ITDB_IPOD_GENERATION_SHUFFLE_2, 3}, + {"A951", 1, ITDB_IPOD_MODEL_SHUFFLE_GREEN, ITDB_IPOD_GENERATION_SHUFFLE_2, 3}, + {"A953", 1, ITDB_IPOD_MODEL_SHUFFLE_ORANGE, ITDB_IPOD_GENERATION_SHUFFLE_2, 3}, + /* Shuffle / Seventh Generation */ + /* Square, connected to computer via cable -- look identicaly to + * Sixth Generation*/ + {"B225", 1, ITDB_IPOD_MODEL_SHUFFLE_SILVER, ITDB_IPOD_GENERATION_SHUFFLE_3, 3}, + {"B233", 1, ITDB_IPOD_MODEL_SHUFFLE_PURPLE, ITDB_IPOD_GENERATION_SHUFFLE_3, 3}, + {"B227", 1, ITDB_IPOD_MODEL_SHUFFLE_BLUE, ITDB_IPOD_GENERATION_SHUFFLE_3, 3}, + {"B229", 1, ITDB_IPOD_MODEL_SHUFFLE_GREEN, ITDB_IPOD_GENERATION_SHUFFLE_3, 3}, + + /* Nano / Fifth Generation (first nano generation) */ /* Buttons are integrated into the "touch wheel". */ - {"A350", 1, ITDB_IPOD_MODEL_NANO_WHITE, ITDB_IPOD_GENERATION_FIFTH, 3}, - {"A352", 1, ITDB_IPOD_MODEL_NANO_BLACK, ITDB_IPOD_GENERATION_FIFTH, 3}, - {"A004", 2, ITDB_IPOD_MODEL_NANO_WHITE, ITDB_IPOD_GENERATION_FIFTH, 3}, - {"A099", 2, ITDB_IPOD_MODEL_NANO_BLACK, ITDB_IPOD_GENERATION_FIFTH, 3}, - {"A005", 4, ITDB_IPOD_MODEL_NANO_WHITE, ITDB_IPOD_GENERATION_FIFTH, 6}, - {"A107", 4, ITDB_IPOD_MODEL_NANO_BLACK, ITDB_IPOD_GENERATION_FIFTH, 6}, + {"A350", 1, ITDB_IPOD_MODEL_NANO_WHITE, ITDB_IPOD_GENERATION_NANO_1, 3}, + {"A352", 1, ITDB_IPOD_MODEL_NANO_BLACK, ITDB_IPOD_GENERATION_NANO_1, 3}, + {"A004", 2, ITDB_IPOD_MODEL_NANO_WHITE, ITDB_IPOD_GENERATION_NANO_1, 3}, + {"A099", 2, ITDB_IPOD_MODEL_NANO_BLACK, ITDB_IPOD_GENERATION_NANO_1, 3}, + {"A005", 4, ITDB_IPOD_MODEL_NANO_WHITE, ITDB_IPOD_GENERATION_NANO_1, 6}, + {"A107", 4, ITDB_IPOD_MODEL_NANO_BLACK, ITDB_IPOD_GENERATION_NANO_1, 6}, /* Video / Fifth Generation */ /* Buttons are integrated into the "touch wheel". */ - {"A002", 30, ITDB_IPOD_MODEL_VIDEO_WHITE, ITDB_IPOD_GENERATION_FIFTH, 50}, - {"A146", 30, ITDB_IPOD_MODEL_VIDEO_BLACK, ITDB_IPOD_GENERATION_FIFTH, 50}, - {"A003", 60, ITDB_IPOD_MODEL_VIDEO_WHITE, ITDB_IPOD_GENERATION_FIFTH, 50}, - {"A147", 60, ITDB_IPOD_MODEL_VIDEO_BLACK, ITDB_IPOD_GENERATION_FIFTH, 50}, + {"A002", 30, ITDB_IPOD_MODEL_VIDEO_WHITE, ITDB_IPOD_GENERATION_VIDEO_1, 50}, + {"A146", 30, ITDB_IPOD_MODEL_VIDEO_BLACK, ITDB_IPOD_GENERATION_VIDEO_1, 50}, + {"A003", 60, ITDB_IPOD_MODEL_VIDEO_WHITE, ITDB_IPOD_GENERATION_VIDEO_1, 50}, + {"A147", 60, ITDB_IPOD_MODEL_VIDEO_BLACK, ITDB_IPOD_GENERATION_VIDEO_1, 50}, /* Video / Sixth Generation */ /* Pretty much identical to fifth generation with better display, * extended battery operation time and gap-free playback */ - {"A444", 30, ITDB_IPOD_MODEL_VIDEO_WHITE, ITDB_IPOD_GENERATION_SIXTH, 50}, - {"A446", 30, ITDB_IPOD_MODEL_VIDEO_BLACK, ITDB_IPOD_GENERATION_SIXTH, 50}, - {"A664", 30, ITDB_IPOD_MODEL_VIDEO_U2, ITDB_IPOD_GENERATION_SIXTH, 50}, - {"A448", 80, ITDB_IPOD_MODEL_VIDEO_WHITE, ITDB_IPOD_GENERATION_SIXTH, 50}, - {"A450", 80, ITDB_IPOD_MODEL_VIDEO_BLACK, ITDB_IPOD_GENERATION_SIXTH, 50}, + {"A444", 30, ITDB_IPOD_MODEL_VIDEO_WHITE, ITDB_IPOD_GENERATION_VIDEO_2, 50}, + {"A446", 30, ITDB_IPOD_MODEL_VIDEO_BLACK, ITDB_IPOD_GENERATION_VIDEO_2, 50}, + {"A664", 30, ITDB_IPOD_MODEL_VIDEO_U2, ITDB_IPOD_GENERATION_VIDEO_2, 50}, + {"A448", 80, ITDB_IPOD_MODEL_VIDEO_WHITE, ITDB_IPOD_GENERATION_VIDEO_2, 50}, + {"A450", 80, ITDB_IPOD_MODEL_VIDEO_BLACK, ITDB_IPOD_GENERATION_VIDEO_2, 50}, - /* Nano / Sixth Generation */ + /* Nano / Sixth Generation (second nano generation) */ /* Pretty much identical to fifth generation with better display, * extended battery operation time and gap-free playback */ - {"A477", 2, ITDB_IPOD_MODEL_NANO_SILVER, ITDB_IPOD_GENERATION_SIXTH, 3}, - {"A426", 4, ITDB_IPOD_MODEL_NANO_SILVER, ITDB_IPOD_GENERATION_SIXTH, 6}, - {"A428", 4, ITDB_IPOD_MODEL_NANO_BLUE, ITDB_IPOD_GENERATION_SIXTH, 6}, - {"A487", 4, ITDB_IPOD_MODEL_NANO_GREEN, ITDB_IPOD_GENERATION_SIXTH, 6}, - {"A489", 4, ITDB_IPOD_MODEL_NANO_PINK, ITDB_IPOD_GENERATION_SIXTH, 6}, - {"A497", 8, ITDB_IPOD_MODEL_NANO_BLACK, ITDB_IPOD_GENERATION_SIXTH, 14}, + {"A477", 2, ITDB_IPOD_MODEL_NANO_SILVER, ITDB_IPOD_GENERATION_NANO_2, 3}, + {"A426", 4, ITDB_IPOD_MODEL_NANO_SILVER, ITDB_IPOD_GENERATION_NANO_2, 6}, + {"A428", 4, ITDB_IPOD_MODEL_NANO_BLUE, ITDB_IPOD_GENERATION_NANO_2, 6}, + {"A487", 4, ITDB_IPOD_MODEL_NANO_GREEN, ITDB_IPOD_GENERATION_NANO_2, 6}, + {"A489", 4, ITDB_IPOD_MODEL_NANO_PINK, ITDB_IPOD_GENERATION_NANO_2, 6}, + {"A497", 8, ITDB_IPOD_MODEL_NANO_BLACK, ITDB_IPOD_GENERATION_NANO_2, 14}, /* HP iPods, need contributions for this table */ /* Buttons are integrated into the "touch wheel". */ {"E436", 40, ITDB_IPOD_MODEL_REGULAR, ITDB_IPOD_GENERATION_FOURTH, 50}, - {"S492", 30, ITDB_IPOD_MODEL_COLOR, ITDB_IPOD_GENERATION_FOURTH, 50}, + {"S492", 30, ITDB_IPOD_MODEL_COLOR, ITDB_IPOD_GENERATION_PHOTO, 50}, + + /* iPod Classic G1 */ + /* First generation with "cover flow" */ + {"B029", 80, ITDB_IPOD_MODEL_CLASSIC_SILVER, ITDB_IPOD_GENERATION_CLASSIC_1, 50}, + {"B147", 80, ITDB_IPOD_MODEL_CLASSIC_BLACK, ITDB_IPOD_GENERATION_CLASSIC_1, 50}, + {"B145", 160, ITDB_IPOD_MODEL_CLASSIC_SILVER, ITDB_IPOD_GENERATION_CLASSIC_1, 50}, + {"B150", 160, ITDB_IPOD_MODEL_CLASSIC_BLACK, ITDB_IPOD_GENERATION_CLASSIC_1, 50}, + + /* iPod nano video G1 (Third Nano Generation) */ + /* First generation of video support for nano */ + {"A978", 4, ITDB_IPOD_MODEL_NANO_SILVER, ITDB_IPOD_GENERATION_NANO_3, 6}, + {"A980", 8, ITDB_IPOD_MODEL_NANO_SILVER, ITDB_IPOD_GENERATION_NANO_3, 14}, + {"B261", 8, ITDB_IPOD_MODEL_NANO_BLACK, ITDB_IPOD_GENERATION_NANO_3, 14}, + {"B249", 8, ITDB_IPOD_MODEL_NANO_BLUE, ITDB_IPOD_GENERATION_NANO_3, 14}, + {"B253", 8, ITDB_IPOD_MODEL_NANO_GREEN, ITDB_IPOD_GENERATION_NANO_3, 14}, + {"B257", 8, ITDB_IPOD_MODEL_NANO_RED, ITDB_IPOD_GENERATION_NANO_3, 14}, + + /* iPod touch G1 */ + /* With touch screen */ + {"A623", 8, ITDB_IPOD_MODEL_TOUCH_BLACK, ITDB_IPOD_GENERATION_TOUCH_1, 14}, + {"A627", 16, ITDB_IPOD_MODEL_NANO_SILVER, ITDB_IPOD_GENERATION_TOUCH_1, 28}, + /* No known model number -- create a Device/SysInfo file with * one entry, e.g.: @@ -191,19 +224,41 @@ static const gchar *ipod_model_name_table [] = { N_("Nano (Green)"), N_("Nano (Pink)"), N_("iPhone (1)"), + N_("Shuffle (Silver)"), + N_("Shuffle (Pink)"), + N_("Shuffle (Blue)"), + N_("Shuffle (Green)"), + N_("Shuffle (Orange)"), + N_("Shuffle (Purple)"), + N_("Classic (Silver)"), + N_("Classic (Black)"), + N_("Touch (Black)"), NULL }; /* One entry for each of Itdb_IpodGeneration (itdb.h) */ static const gchar *ipod_generation_name_table [] = { N_("Unknown"), - N_("First Generation"), - N_("Second Generation"), - N_("Third Generation"), - N_("Fourth Generation"), - N_("Fifth Generation"), - N_("Sixth Generation"), - N_("Mobile Phone"), + N_("Regular (1st Gen.)"), + N_("Regular (2nd Gen.)"), + N_("Regular (3rd Gen.)"), + N_("Regular (4th Gen.)"), + N_("Photo"), + N_("Mobile Phones"), + N_("Mini (1st Gen.)"), + N_("Mini (2nd Gen.)"), + N_("Shuffle (1st Gen.)"), + N_("Shuffle (2nd Gen.)"), + N_("Shuffle (3rd Gen.)"), + N_("Nano (1st Gen.)"), + N_("Nano (2nd Gen.)"), + N_("Nano Video (Read-Only)"), + N_("Video (1st Gen.)"), + N_("Video (2nd Gen.)"), + N_("Classic (Read-Only)"), + N_("Touch (Reead-Only)"), + N_("Unused"), + N_("Unused"), NULL }; @@ -251,33 +306,23 @@ static const Itdb_ArtworkFormat ipod_iphone_1_artwork_info[] = { {-1, -1, -1, -1, -1} }; - -/* This will be indexed using a value from the ITDB_IPOD_MODEL enum */ -static const Itdb_ArtworkFormat *ipod_artwork_info_table[] = { - NULL, /* Invalid */ - NULL, /* Unknown */ - ipod_photo_artwork_info, /* Color */ - ipod_photo_artwork_info, /* Color U2 */ - NULL, /* Grayscale */ - NULL, /* Grayscale U2 */ - NULL, /* Mini (Silver) */ - NULL, /* Mini (Blue) */ - NULL, /* Mini (Pink) */ - NULL, /* Mini (Green) */ - NULL, /* Mini (Gold) */ - NULL, /* Shuffle */ - ipod_nano_artwork_info, /* Nano (White) */ - ipod_nano_artwork_info, /* Nano (Black) */ - ipod_video_artwork_info, /* Video (White) */ - ipod_video_artwork_info, /* Video (Black) */ - ipod_mobile_1_artwork_info,/* Mobile (1) */ - ipod_video_artwork_info, /* Video U2 */ - ipod_nano_artwork_info, /* Nano (Silver) */ - ipod_nano_artwork_info, /* Nano (Blue) */ - ipod_nano_artwork_info, /* Nano (Green) */ - ipod_nano_artwork_info, /* Nano (Pink) */ - ipod_iphone_1_artwork_info,/* iPhone (1) */ - NULL +static const Itdb_ArtworkFormat ipod_classic_1_artwork_info[] = { + /* officially 55x55 -- verify! */ + {ITDB_THUMB_COVER_XSMALL, 56, 56, 1061, THUMB_FORMAT_RGB565_LE}, + {ITDB_THUMB_COVER_MEDIUM, 128, 128, 1055, THUMB_FORMAT_RGB565_LE}, + {ITDB_THUMB_COVER_XLARGE, 320, 320, 1060, THUMB_FORMAT_RGB565_LE}, + + /* not sure if the THUMB_FORMAT is correct */ + {ITDB_THUMB_PHOTO_TV_SCREEN, 720, 480, 1067, THUMB_FORMAT_UYVY_BE}, + /* not sure if the THUMB_FORMAT is correct */ + {ITDB_THUMB_PHOTO_FULL_SCREEN,320, 240, 1064, THUMB_FORMAT_RGB565_LE}, + {ITDB_THUMB_PHOTO_SMALL, 64, 64, 1066, THUMB_FORMAT_RGB565_LE}, + {ITDB_THUMB_PHOTO_LARGE, 320, 320, 1060, THUMB_FORMAT_RGB565_LE}, +/* These are the same as for the iPod video... -- labeled by the iPod as + "chapter images" */ + {ITDB_THUMB_COVER_SMALL, 100, 100, 1028, THUMB_FORMAT_RGB565_LE}, + {ITDB_THUMB_COVER_LARGE, 200, 200, 1029, THUMB_FORMAT_RGB565_LE}, + {-1, -1, -1, -1, -1} }; @@ -599,7 +644,49 @@ itdb_device_get_artwork_formats (Itdb_Device *device) g_return_val_if_fail (info, NULL); - return ipod_artwork_info_table[info->ipod_model]; + switch (info->ipod_generation) + { + case ITDB_IPOD_GENERATION_UNKNOWN: + case ITDB_IPOD_GENERATION_FIRST: + case ITDB_IPOD_GENERATION_SECOND: + case ITDB_IPOD_GENERATION_THIRD: + case ITDB_IPOD_GENERATION_FOURTH: + return NULL; + case ITDB_IPOD_GENERATION_PHOTO: + return ipod_photo_artwork_info; + case ITDB_IPOD_GENERATION_MOBILE: + switch (info->ipod_model) + { + case ITDB_IPOD_MODEL_MOBILE_1: + return ipod_mobile_1_artwork_info; + case ITDB_IPOD_MODEL_IPHONE_1: + return ipod_iphone_1_artwork_info; + default: + g_return_val_if_reached (NULL); + } + case ITDB_IPOD_GENERATION_MINI_1: + case ITDB_IPOD_GENERATION_MINI_2: + case ITDB_IPOD_GENERATION_SHUFFLE_1: + case ITDB_IPOD_GENERATION_SHUFFLE_2: + case ITDB_IPOD_GENERATION_SHUFFLE_3: + return NULL; + case ITDB_IPOD_GENERATION_NANO_1: + case ITDB_IPOD_GENERATION_NANO_2: + return ipod_nano_artwork_info; + case ITDB_IPOD_GENERATION_NANO_3: + return NULL; /* FIXME: */ + case ITDB_IPOD_GENERATION_VIDEO_1: + case ITDB_IPOD_GENERATION_VIDEO_2: + return ipod_video_artwork_info; + case ITDB_IPOD_GENERATION_CLASSIC_1: + return ipod_classic_1_artwork_info; + case ITDB_IPOD_GENERATION_TOUCH_1: + return NULL; /* FIXME: */ + case ITDB_IPOD_GENERATION_FIFTH: + case ITDB_IPOD_GENERATION_SIXTH: + return NULL; + } + g_return_val_if_reached (NULL); } diff --git a/src/itdb_track.c b/src/itdb_track.c index fc632a3..e1216f5 100644 --- a/src/itdb_track.c +++ b/src/itdb_track.c @@ -400,48 +400,85 @@ static gboolean itdb_track_set_thumbnails_internal (Itdb_Track *track, gint rotation, GError **error) { + /* FIXME: this looks like it would work, but the problem is that + * gtkpod calls this function mostly with tracks that are not yet + * part of an iTunesDB. This means only the SMALL and LARGE thumbs + * are being added. + * + * One solution would be to add all kinds of cover thumbs and weed + * out the ones not supported when the ArtworkDB is written. + * + * Suggestions welcome! + */ + gboolean result = FALSE; + ItdbThumbType thumbtypes[] = + { ITDB_THUMB_COVER_SMALL, + ITDB_THUMB_COVER_LARGE, + ITDB_THUMB_COVER_XLARGE, + ITDB_THUMB_COVER_MEDIUM, + ITDB_THUMB_COVER_SMEDIUM, + ITDB_THUMB_COVER_XSMALL, + -1 }; + ItdbThumbType *thumbtype; + const Itdb_ArtworkFormat *formats=NULL; g_return_val_if_fail (track, FALSE); + g_return_val_if_fail (filename || image_data || pixbuf, FALSE); + + if (track->itdb && track->itdb->device) + { + formats = itdb_device_get_artwork_formats (track->itdb->device); + } itdb_artwork_remove_thumbnails (track->artwork); - if (filename) + for (thumbtype=thumbtypes; *thumbtype!=-1; ++thumbtype) { - result = itdb_artwork_add_thumbnail (track->artwork, - ITDB_THUMB_COVER_SMALL, - filename, rotation, error); - if (result == TRUE) + if (formats) + { /* check if thumbnail type is supported */ + const Itdb_ArtworkFormat *imgp=formats; + for (imgp=formats; imgp->type!=-1; ++imgp) + { + if (imgp->type == *thumbtype) break; + } + if (imgp->type == -1) + { + continue; /* for (thumbtype=...) */ + } + } + else + { /* only add COVER_SMALL and COVER_LARGE */ + if ((*thumbtype != ITDB_THUMB_COVER_SMALL) && + (*thumbtype != ITDB_THUMB_COVER_LARGE)) + { + continue; /* for (thumbtype=...) */ + } + } + + if (filename) + { result = itdb_artwork_add_thumbnail (track->artwork, - ITDB_THUMB_COVER_LARGE, + *thumbtype, filename, rotation, error); - } - if (image_data) - { - result = itdb_artwork_add_thumbnail_from_data (track->artwork, - ITDB_THUMB_COVER_SMALL, - image_data, - image_data_len, - rotation, error); - if (result == TRUE) + } + if (image_data) + { result = itdb_artwork_add_thumbnail_from_data (track->artwork, - ITDB_THUMB_COVER_LARGE, + *thumbtype, image_data, image_data_len, rotation, error); - } - if (pixbuf) - { - result = itdb_artwork_add_thumbnail_from_pixbuf (track->artwork, - ITDB_THUMB_COVER_SMALL, - pixbuf, rotation, - error); - if (result == TRUE) { - result = itdb_artwork_add_thumbnail_from_pixbuf (track->artwork, - ITDB_THUMB_COVER_LARGE, - pixbuf, rotation, - error); + } + if (pixbuf) + { + result = itdb_artwork_add_thumbnail_from_pixbuf (track->artwork, + *thumbtype, + pixbuf, rotation, + error); } + if (result == FALSE) + break; /* for (thumbtype=...) */ } if (result == TRUE) |