|
From: <ny...@us...> - 2007-02-27 15:20:57
|
Revision: 400
http://svn.sourceforge.net/pmplib/?rev=400&view=rev
Author: nyaochi
Date: 2007-02-27 07:20:57 -0800 (Tue, 27 Feb 2007)
Log Message:
-----------
Implemented playlist conversion for iPod players.
Modified Paths:
--------------
trunk/pmplib/frontend/easypmp/cui/main.c
trunk/pmplib/lib/pmp_ipod/ipod.c
trunk/pmplib/lib/pmp_ipod/pmp_ipod.c
Modified: trunk/pmplib/frontend/easypmp/cui/main.c
===================================================================
--- trunk/pmplib/frontend/easypmp/cui/main.c 2007-02-27 14:29:36 UTC (rev 399)
+++ trunk/pmplib/frontend/easypmp/cui/main.c 2007-02-27 15:20:57 UTC (rev 400)
@@ -472,12 +472,7 @@
// Convert playlists.
if (opt.verb & MODE_PLAYLIST) {
- if (opt.verb & MODE_SETTLE) {
- // Playlist referring to music_links.
- easypmp_playlist(pmp, &playlists, &music_links, &opt, records, num_records, easypmp_progress, NULL);
- } else {
- easypmp_playlist(pmp, &playlists, &musics, &opt, records, num_records, easypmp_progress, NULL);
- }
+ easypmp_playlist(pmp, &playlists, &musics, &opt, records, num_records, easypmp_progress, NULL);
}
// Dump the database if specified.
Modified: trunk/pmplib/lib/pmp_ipod/ipod.c
===================================================================
--- trunk/pmplib/lib/pmp_ipod/ipod.c 2007-02-27 14:29:36 UTC (rev 399)
+++ trunk/pmplib/lib/pmp_ipod/ipod.c 2007-02-27 15:20:57 UTC (rev 400)
@@ -434,6 +434,7 @@
itunesdb_chunk_t *mhod = NULL, *mhip = NULL;
chunk_mhyp_t* mhyp_data = (chunk_mhyp_t*)mhyp->data;
sorted_index_t* si = (sorted_index_t*)calloc(num_records, sizeof(sorted_index_t));
+ const static ucs2char_t ucs2cs_master[] = {'M','a','s','t','e','r',0};
if (!si) {
return 1;
@@ -454,7 +455,7 @@
mhod = itunesdb_new_child(mhyp);
if (mhod) {
itunesdb_init(mhod, "mhod", "title");
- itunesdb_set_mhod_string(mhod, L"Nyaopod");
+ itunesdb_set_mhod_string(mhod, ucs2cs_master);
}
/* Construct an "mhod" chunk for title index. */
@@ -526,6 +527,70 @@
return 0;
}
+static uint32_t get_record_index(const ucs2char_t* filename, const pmp_music_record_t* records, int num_records)
+{
+ uint32_t i;
+
+ for (i = 0;i < num_records;++i) {
+ if (ucs2icmp(records[i].filename, filename) == 0) {
+ break;
+ }
+ }
+ return i;
+}
+
+static int set_playlist(itunesdb_chunk_t* mhyp, const pmp_playlist_t* playlist, const pmp_music_record_t* records, int num_records)
+{
+ int i;
+ itunesdb_chunk_t *mhod = NULL, *mhip = NULL;
+ chunk_mhyp_t* mhyp_data = (chunk_mhyp_t*)mhyp->data;
+
+ mhyp_data->flag_master = 0;
+ mhyp_data->id = 0x7520EA5FA870F9EA;
+ mhyp_data->unk3 = 0;
+ mhyp_data->unk4 = 1;
+ mhyp_data->sort_order = 1;
+
+ /* Construct an "mhod" chunk for title. */
+ mhod = itunesdb_new_child(mhyp);
+ if (mhod) {
+ itunesdb_init(mhod, "mhod", "title");
+ itunesdb_set_mhod_string(mhod, playlist->name);
+ }
+
+ /* End of "mhod" chunk(s). */
+ mhyp_data->num_mhod = mhyp->num_children;
+
+ /* */
+ for (i = 0;i < playlist->num_entries;++i) {
+ uint32_t index = get_record_index(playlist->entries[i], records, num_records);
+
+ if (index < num_records) {
+ mhip = itunesdb_new_child(mhyp);
+ if (mhip) {
+ chunk_mhip_t* mhip_data = NULL;
+ itunesdb_init(mhip, "mhip", NULL);
+ mhip_data = (chunk_mhip_t*)mhip->data;
+
+ mhip_data->flag_podcast_group = 0;
+ mhip_data->track_id = index;
+ mhip_data->group_id = index + num_records;
+
+ mhod = itunesdb_new_child(mhip);
+ if (mhod) {
+ itunesdb_init(mhod, "mhod", "playlist_order");
+ itunesdb_set_mhod_playlist_order(mhod, i+1);
+ }
+
+ mhip_data->num_mhod = mhip->num_children;
+ }
+ }
+ }
+
+ mhyp_data->num_mhip = mhyp->num_children - mhyp_data->num_mhod;
+ return 0;
+}
+
result_t ipod_set(ipod_t* ipod, const pmp_music_record_t* records, int num_records, const pmp_playlist_t* playlists, int num_playlists)
{
int i;
@@ -582,19 +647,27 @@
if (mhlp) {
itunesdb_init(mhlp, "mhlp", NULL);
+ /* Create a master playlist. */
mhyp = itunesdb_new_child(mhlp);
if (mhyp) {
chunk_mhyp_t* mhyp_data = NULL;
itunesdb_init(mhyp, "mhyp", NULL);
- mhyp_data = (chunk_mhyp_t*)mhyp->data;
-
set_master_playlist(mhyp, records, num_records);
}
+
+ /* Create user's playlists. */
+ for (i = 0;i < num_playlists;++i) {
+ mhyp = itunesdb_new_child(mhlp);
+ if (mhyp) {
+ chunk_mhyp_t* mhyp_data = NULL;
+ itunesdb_init(mhyp, "mhyp", NULL);
+ set_playlist(mhyp, &playlists[i], records, num_records);
+ }
+ }
}
}
mhbd_data->num_children = mhbd->num_children;
-
ipod->itunesdb = mhbd;
return 0;
}
Modified: trunk/pmplib/lib/pmp_ipod/pmp_ipod.c
===================================================================
--- trunk/pmplib/lib/pmp_ipod/pmp_ipod.c 2007-02-27 14:29:36 UTC (rev 399)
+++ trunk/pmplib/lib/pmp_ipod/pmp_ipod.c 2007-02-27 15:20:57 UTC (rev 400)
@@ -482,5 +482,15 @@
static result_t pmpmusic_set_playlists(pmp_music_t* music, const pmp_playlist_t* playlists, uint32_t num_playlists)
{
- return PMPERR_NOTIMPLIMENTED;
+ pmp_t* pmp = music->pmp;
+ pmp_music_internal_t* pmpmi = (pmp_music_internal_t*)music->instance;
+
+ /* Free playlists attached to pmpmi. */
+ pmplib_playlists_finish(pmpmi->playlists, pmpmi->num_playlists);
+
+ /* Allocate new playlists. */
+ pmpmi->playlists = (pmp_playlist_t*)ucs2malloc(sizeof(pmp_playlist_t) * num_playlists);
+ pmpmi->num_playlists = num_playlists;
+ pmplib_playlists_clone(pmpmi->playlists, playlists, num_playlists);
+ return 0;;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|