|
From: <ny...@us...> - 2007-09-24 03:34:28
|
Revision: 415
http://pmplib.svn.sourceforge.net/pmplib/?rev=415&view=rev
Author: nyaochi
Date: 2007-09-23 20:34:31 -0700 (Sun, 23 Sep 2007)
Log Message:
-----------
- Fixed several bugs.
- Support SmartPlaylist Data mhod type.
- Read/write album_artist fields.
Modified Paths:
--------------
trunk/pmplib/lib/pmp_ipod/ipod.c
trunk/pmplib/lib/pmp_ipod/itunesdb.c
trunk/pmplib/lib/pmp_ipod/itunesdb.h
trunk/pmplib/lib/pmp_ipod/util.c
Modified: trunk/pmplib/lib/pmp_ipod/ipod.c
===================================================================
--- trunk/pmplib/lib/pmp_ipod/ipod.c 2007-09-17 13:00:32 UTC (rev 414)
+++ trunk/pmplib/lib/pmp_ipod/ipod.c 2007-09-24 03:34:31 UTC (rev 415)
@@ -359,6 +359,15 @@
}
}
+ /* Construct an "mhod" chunk for album artist. */
+ if (rec->artist && *rec->artist) {
+ mhod = itunesdb_new_child(mhit);
+ if (mhod) {
+ if (ret = itunesdb_init(mhod, "mhod", "album_artist")) return ret;
+ if (ret = itunesdb_set_mhod_string(mhod, rec->album_artist)) return ret;
+ }
+ }
+
/* Construct an "mhod" chunk for album. */
if (rec->album && *rec->album) {
mhod = itunesdb_new_child(mhit);
@@ -466,6 +475,8 @@
if (ret = itunesdb_get_mhod_string(mhod, &rec->title)) return ret;
} else if (itunesdb_ischunk(mhod, "mhod", "artist")) {
if (ret = itunesdb_get_mhod_string(mhod, &rec->artist)) return ret;
+ } else if (itunesdb_ischunk(mhod, "mhod", "album_artist")) {
+ if (ret = itunesdb_get_mhod_string(mhod, &rec->album_artist)) return ret;
} else if (itunesdb_ischunk(mhod, "mhod", "album")) {
if (ret = itunesdb_get_mhod_string(mhod, &rec->album)) return ret;
} else if (itunesdb_ischunk(mhod, "mhod", "genre")) {
Modified: trunk/pmplib/lib/pmp_ipod/itunesdb.c
===================================================================
--- trunk/pmplib/lib/pmp_ipod/itunesdb.c 2007-09-17 13:00:32 UTC (rev 414)
+++ trunk/pmplib/lib/pmp_ipod/itunesdb.c 2007-09-24 03:34:31 UTC (rev 415)
@@ -331,6 +331,7 @@
if (ret = serialize_uint32le(sio, "unk38", "%u", &mhit->unk38)) return ret;
if (ret = serialize_uint16le(sio, "gapless_track", "%u", &mhit->gapless_track)) return ret;
if (ret = serialize_uint16le(sio, "gapless_album", "%u", &mhit->gapless_album)) return ret;
+ if (ret = serialize_uint8_array(sio, "unknown_hash", "%02X ", mhit->unknown_hash, sizeof(mhit->unknown_hash))) return ret;
return 0;
}
@@ -478,6 +479,34 @@
return 0;
}
+static void mhod_smartplaylist_data_finish(itunesdb_chunk_t* chunk)
+{
+ itunesdb_mhod_t* mhod = (itunesdb_mhod_t*)chunk->data;
+ itunesdb_mhod_smartplaylist_data_t* spd = &mhod->data.spd;
+ memset(spd, 0, sizeof(*spd));
+}
+
+static int mhod_smartplaylist_data_serialize(itunesdb_chunk_t* chunk, const char *name, serializer_t* sio)
+{
+ int ret = 0;
+ itunesdb_mhod_t* mhod = (itunesdb_mhod_t*)chunk->data;
+ itunesdb_mhod_smartplaylist_data_t* spd = &mhod->data.spd;
+
+ if (ret = serialize_uint8(sio, "live_update", "%d", &spd->live_update)) return ret;
+ if (ret = serialize_uint8(sio, "check_rules", "%d", &spd->check_rules)) return ret;
+ if (ret = serialize_uint8(sio, "check_limits", "%d", &spd->check_limits)) return ret;
+ if (ret = serialize_uint8(sio, "limit_type", "%d", &spd->limit_type)) return ret;
+ if (ret = serialize_uint8(sio, "limit_sort", "%d", &spd->limit_sort)) return ret;
+ if (ret = serialize_uint8(sio, "unknown1", "%d", &spd->unknown1)) return ret;
+ if (ret = serialize_uint8(sio, "unknown2", "%d", &spd->unknown2)) return ret;
+ if (ret = serialize_uint8(sio, "unknown3", "%d", &spd->unknown3)) return ret;
+ if (ret = serialize_uint32le(sio, "limit_value", "%d", &spd->limit_value)) return ret;
+ if (ret = serialize_uint8(sio, "match_checked_only", "%d", &spd->match_checked_only)) return ret;
+ if (ret = serialize_uint8(sio, "reverse_limit_sort", "%d", &spd->reverse_limit_sort)) return ret;
+
+ return ret;
+}
+
static void mhod_index_finish(itunesdb_chunk_t* chunk)
{
itunesdb_mhod_t* mhod = (itunesdb_mhod_t*)chunk->data;
@@ -642,10 +671,13 @@
{14, "description", 0, mhod_string_finish, mhod_string_serialize},
{15, "podcast_enclosure_url", 0, mhod_url_finish, mhod_url_serialize},
{16, "podcast_rss_url", 0, mhod_url_finish, mhod_url_serialize},
+ {22, "album_artist", 0, mhod_string_finish, mhod_string_serialize},
+ {23, "sort_artist", 0, mhod_string_finish, mhod_string_serialize},
{27, "sort_title", 0, mhod_string_finish, mhod_string_serialize},
{28, "sort_album", 0, mhod_string_finish, mhod_string_serialize},
{29, "sort_albumartist", 0, mhod_string_finish, mhod_string_serialize},
{30, "sort_composer", 0, mhod_string_finish, mhod_string_serialize},
+ {50, "smartplaylist_data", 0, mhod_smartplaylist_data_finish, mhod_smartplaylist_data_serialize},
{52, "index", 0, mhod_index_finish, mhod_index_serialize},
{53, "library_playlist_index", 0, mhod_library_playlist_index_finish, mhod_library_playlist_index_serialize},
{100, "playlist_column", 0x288, mhod_playlist_column_finish, mhod_playlist_column_serialize},
@@ -919,7 +951,7 @@
}
/* Read children for this chunk. */
- if (strncmp(chunk->id, "mhlt", 4) == 0 || strncmp(chunk->id, "mhlp", 4) == 0) {
+ if (strncmp(chunk->id, "mhla", 4) == 0 || strncmp(chunk->id, "mhlt", 4) == 0 || strncmp(chunk->id, "mhlp", 4) == 0) {
/* chunk->overall_size represents the number of children for "mhlt" and "mhlp" chunks */
chunk->num_children = chunk->overall_size;
chunk->childlen = (itunesdb_chunk_t*)calloc(chunk->num_children, sizeof(itunesdb_chunk_t));
Modified: trunk/pmplib/lib/pmp_ipod/itunesdb.h
===================================================================
--- trunk/pmplib/lib/pmp_ipod/itunesdb.h 2007-09-17 13:00:32 UTC (rev 414)
+++ trunk/pmplib/lib/pmp_ipod/itunesdb.h 2007-09-24 03:34:31 UTC (rev 415)
@@ -137,6 +137,7 @@
uint32_t unk38;
uint16_t gapless_track;
uint16_t gapless_album;
+ uint8_t unknown_hash[20];
} itunesdb_mhit_t;
typedef struct {
@@ -180,6 +181,20 @@
} itunesdb_mhod_url_t;
typedef struct {
+ uint8_t live_update;
+ uint8_t check_rules;
+ uint8_t check_limits;
+ uint8_t limit_type;
+ uint8_t limit_sort;
+ uint8_t unknown1;
+ uint8_t unknown2;
+ uint8_t unknown3;
+ uint32_t limit_value;
+ uint8_t match_checked_only;
+ uint8_t reverse_limit_sort;
+} itunesdb_mhod_smartplaylist_data_t;
+
+typedef struct {
uint32_t type;
uint32_t num_entries;
uint8_t padding[40];
@@ -233,6 +248,7 @@
union {
itunesdb_mhod_string_t str;
itunesdb_mhod_url_t url;
+ itunesdb_mhod_smartplaylist_data_t spd;
itunesdb_mhod_index_t index;
itunesdb_mhod_playlist_column_t pc;
itunesdb_mhod_playlist_order_t po;
Modified: trunk/pmplib/lib/pmp_ipod/util.c
===================================================================
--- trunk/pmplib/lib/pmp_ipod/util.c 2007-09-17 13:00:32 UTC (rev 414)
+++ trunk/pmplib/lib/pmp_ipod/util.c 2007-09-24 03:34:31 UTC (rev 415)
@@ -42,7 +42,7 @@
{
size_t i;
for (i = 0;i < size;i++) {
- if (array[0] != value) {
+ if (array[i] != value) {
return 0;
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|