summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJorg Schuler <jcsjcs@users.sourceforge.net>2007-09-15 15:33:37 +0000
committerJorg Schuler <jcsjcs@users.sourceforge.net>2007-09-15 15:33:37 +0000
commit13839ab29e66c8720632b36e4248edcd4ae74047 (patch)
treeceae7af81e236934a3e7b4c2d75833c59351a734
parente76676a7233fee6a3b7043443dda2bdbfe06703e (diff)
downloadlibgpod-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--ChangeLog18
-rw-r--r--docs/reference/tmpl/artwork.sgml4
-rw-r--r--docs/reference/tmpl/device.sgml25
-rw-r--r--src/itdb.h28
-rw-r--r--src/itdb_device.c253
-rw-r--r--src/itdb_track.c93
6 files changed, 305 insertions, 116 deletions
diff --git a/ChangeLog b/ChangeLog
index c856429..aa6996f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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:
diff --git a/src/itdb.h b/src/itdb.h
index aeae904..29edb7f 100644
--- a/src/itdb.h
+++ b/src/itdb.h
@@ -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)