commit fce84f9d23a8e6a9cd153c4b41f348e240507d1d
Author: Christophe Fergeau <[email protected]>
Date: Wed Jun 16 14:42:49 2010 +0200
get ShadowDB version from SysInfoExtended when possible
src/itdb_device.c | 56 ++++++++++++++++++++++++++++++++++++
src/itdb_device.h | 1 +
src/itdb_itunesdb.c | 16 +---------
src/itdb_private.h | 6 ++++
src/itdb_sysinfo_extended_parser.c | 9 ++++++
src/itdb_sysinfo_extended_parser.h | 2 +
6 files changed, 75 insertions(+), 15 deletions(-)
---
diff --git a/src/itdb_device.c b/src/itdb_device.c
index 15d3a78..1eafb0b 100644
--- a/src/itdb_device.c
+++ b/src/itdb_device.c
@@ -2162,3 +2162,59 @@ gboolean itdb_device_is_iphone_family (const Itdb_Device
*device)
g_return_val_if_reached (FALSE);
}
}
+
+enum ItdbShadowDBVersion itdb_device_get_shadowdb_version (const Itdb_Device
*device)
+{
+ int version;
+
+ version = 0;
+ if (device->sysinfo_extended != NULL) {
+ version = itdb_sysinfo_properties_get_shadow_db_version
(device->sysinfo_extended);
+ }
+
+ if (version == 0) {
+ const Itdb_IpodInfo *info;
+
+ info = itdb_device_get_ipod_info (device);
+ 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_MOBILE:
+ case ITDB_IPOD_GENERATION_FOURTH:
+ case ITDB_IPOD_GENERATION_PHOTO:
+ case ITDB_IPOD_GENERATION_MINI_1:
+ case ITDB_IPOD_GENERATION_MINI_2:
+ case ITDB_IPOD_GENERATION_NANO_1:
+ case ITDB_IPOD_GENERATION_NANO_2:
+ case ITDB_IPOD_GENERATION_NANO_3:
+ case ITDB_IPOD_GENERATION_NANO_4:
+ case ITDB_IPOD_GENERATION_NANO_5:
+ case ITDB_IPOD_GENERATION_VIDEO_1:
+ case ITDB_IPOD_GENERATION_VIDEO_2:
+ case ITDB_IPOD_GENERATION_CLASSIC_1:
+ case ITDB_IPOD_GENERATION_CLASSIC_2:
+ case ITDB_IPOD_GENERATION_CLASSIC_3:
+ case ITDB_IPOD_GENERATION_TOUCH_1:
+ case ITDB_IPOD_GENERATION_TOUCH_2:
+ case ITDB_IPOD_GENERATION_TOUCH_3:
+ case ITDB_IPOD_GENERATION_IPHONE_1:
+ case ITDB_IPOD_GENERATION_IPHONE_2:
+ case ITDB_IPOD_GENERATION_IPHONE_3:
+ case ITDB_IPOD_GENERATION_IPAD_1:
+ version = ITDB_SHADOW_DB_UNKNOWN;
+ break;
+ case ITDB_IPOD_GENERATION_SHUFFLE_1:
+ case ITDB_IPOD_GENERATION_SHUFFLE_2:
+ version = ITDB_SHADOW_DB_V1;
+ break;
+ case ITDB_IPOD_GENERATION_SHUFFLE_3:
+ case ITDB_IPOD_GENERATION_SHUFFLE_4:
+ version = ITDB_SHADOW_DB_V2;
+ break;
+ }
+ }
+
+ return version;
+}
diff --git a/src/itdb_device.h b/src/itdb_device.h
index 4c86041..a252100 100644
--- a/src/itdb_device.h
+++ b/src/itdb_device.h
@@ -181,6 +181,7 @@ G_GNUC_INTERNAL void itdb_device_set_timezone_info
(Itdb_Device *device);
G_GNUC_INTERNAL gboolean itdb_device_is_iphone_family (const Itdb_Device
*device);
G_GNUC_INTERNAL gboolean itdb_device_is_shuffle (const Itdb_Device *device);
G_GNUC_INTERNAL ItdbChecksumType itdb_device_get_checksum_type (const
Itdb_Device *device);
+G_GNUC_INTERNAL enum ItdbShadowDBVersion itdb_device_get_shadowdb_version
(const Itdb_Device *device);
const Itdb_IpodInfo *
itdb_ipod_info_from_serial (const char *serial);
diff --git a/src/itdb_itunesdb.c b/src/itdb_itunesdb.c
index 0879d9b..2a19ff7 100644
--- a/src/itdb_itunesdb.c
+++ b/src/itdb_itunesdb.c
@@ -6534,21 +6534,7 @@ static gboolean write_bdhs (FExport *fexp)
static gboolean is_shuffle_2g (Itdb_Device *device)
{
- const Itdb_IpodInfo *shuffle_info;
- Itdb_IpodGeneration generation;
-
- if (!itdb_device_is_shuffle (device)) {
- return FALSE;
- }
-
- shuffle_info = itdb_device_get_ipod_info (device);
-
- if (!shuffle_info) {
- return FALSE;
- }
- generation = shuffle_info->ipod_generation;
- return ((generation == ITDB_IPOD_GENERATION_SHUFFLE_1)
- || (generation == ITDB_IPOD_GENERATION_SHUFFLE_2));
+ return (itdb_device_get_shadowdb_version (device) == ITDB_SHADOW_DB_V1);
}
/**
diff --git a/src/itdb_private.h b/src/itdb_private.h
index c584f72..501d07b 100644
--- a/src/itdb_private.h
+++ b/src/itdb_private.h
@@ -42,6 +42,12 @@ enum ItdbPlType { /* types for playlist->type */
not visible in iPod */
};
+enum ItdbShadowDBVersion {
+ ITDB_SHADOW_DB_UNKNOWN,
+ ITDB_SHADOW_DB_V1,
+ ITDB_SHADOW_DB_V2,
+};
+
/* always use itdb_playlists_is_podcasts() to check for podcasts PL */
enum ItdbPlFlag { /* types for playlist->podcastflag */
ITDB_PL_FLAG_NORM = 0, /* normal playlist, visible under
diff --git a/src/itdb_sysinfo_extended_parser.c
b/src/itdb_sysinfo_extended_parser.c
index 4516871..a1f5cb2 100644
--- a/src/itdb_sysinfo_extended_parser.c
+++ b/src/itdb_sysinfo_extended_parser.c
@@ -80,6 +80,7 @@ struct _SysInfoIpodProperties {
gint oem_id;
gint oem_u;
gint db_version;
+ int shadowdb_version;
char *min_build_id;
char *language;
gboolean voice_memos_supported;
@@ -218,6 +219,7 @@ static const DictFieldMapping
sysinfo_ipod_properties_fields_mapping[] = {
{ "GamesPlatformVersion", G_TYPE_INT, G_STRUCT_OFFSET
(SysInfoIpodProperties, games_platform_version) },
{ "RentalClockBias", G_TYPE_INT, G_STRUCT_OFFSET
(SysInfoIpodProperties, rental_clock_bias) },
{ "SQLiteDB", G_TYPE_BOOLEAN, G_STRUCT_OFFSET
(SysInfoIpodProperties, sqlite_db) },
+ { "ShadowDBVersion", G_TYPE_INT, G_STRUCT_OFFSET
(SysInfoIpodProperties, shadowdb_version) },
{ NULL, G_TYPE_NONE, 0 }
};
@@ -712,3 +714,10 @@ itdb_sysinfo_properties_get_db_version (const
SysInfoIpodProperties *props)
g_return_val_if_fail (props != NULL, FALSE);
return props->db_version;
}
+
+gint
+itdb_sysinfo_properties_get_shadow_db_version (const SysInfoIpodProperties
*props)
+{
+ g_return_val_if_fail (props != NULL, 0);
+ return props->shadowdb_version;
+}
diff --git a/src/itdb_sysinfo_extended_parser.h
b/src/itdb_sysinfo_extended_parser.h
index 046e1f9..5ac3bae 100644
--- a/src/itdb_sysinfo_extended_parser.h
+++ b/src/itdb_sysinfo_extended_parser.h
@@ -72,6 +72,8 @@ G_GNUC_INTERNAL gint
itdb_sysinfo_properties_get_family_id (const SysInfoIpodProperties *props);
G_GNUC_INTERNAL gint
itdb_sysinfo_properties_get_db_version (const SysInfoIpodProperties *props);
+G_GNUC_INTERNAL gint
+itdb_sysinfo_properties_get_shadow_db_version (const SysInfoIpodProperties
*props);
G_END_DECLS
------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
gtkpod-cvs2 mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2