may I ask for some help?
I exported a iTune Playlist xml from iTunes 10.
The xml file looks like this:
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Major Version</key><integer>1</integer>
<key>Minor Version</key><integer>1</integer>
<key>Date</key><date>2011-12-13T14:42:35Z</date>
<key>Application Version</key><string>10.5.1</string>
<key>Features</key><integer>5</integer>
<key>Show Content Ratings</key><true/>
<key>Music Folder</key><string>file://localhost/I:/iTunes%20Media/</string>
<key>Library Persistent ID</key><string>FC27A84515DEA04B</string>
<key>Tracks</key>
<dict>
<key>2510</key>
<dict>
<key>Track ID</key><integer>2510</integer>
<key>Name</key><string>Laura Fygi / Let There Be Love</string>
<key>Artist</key><string>Laura Fygi</string>
<key>Album Artist</key><string>Various Artists</string>
<key>Album</key><string>Barjazz Edition CD 1</string>
<key>Genre</key><string>Jazz</string>
<key>Kind</key><string>MPEG-Audiodatei</string>
<key>Size</key><integer>2739241</integer>
<key>Total Time</key><integer>168624</integer>
<key>Track Number</key><integer>17</integer>
<key>Year</key><integer>2002</integer>
<key>Date Modified</key><date>2011-12-09T16:06:57Z</date>
<key>Date Added</key><date>2011-12-12T20:07:26Z</date>
<key>Bit Rate</key><integer>128</integer>
<key>Sample Rate</key><integer>48000</integer>
<key>Comments</key><string>Saturn Exclusiv Edition</string>
<key>Play Count</key><integer>1</integer>
<key>Play Date</key><integer>3406624784</integer>
<key>Play Date UTC</key><date>2011-12-13T11:39:44Z</date>
<key>Artwork Count</key><integer>1</integer>
<key>Persistent ID</key><string>43883C64AADAAF50</string>
<key>Track Type</key><string>File</string>
<key>Location</key><string>file:/d:/shares/iTunes%20Media/Music/Various%20Artists/Barjazz%20Edition%20CD%201/17%20Laura%20Fygi%20_%20Let%20There%20Be%20Love.mp3</string>
<key>File Folder Count</key><integer>5</integer>
<key>Library Folder Count</key><integer>1</integer>
</dict>
Now my understanding is, that when I copy the playlist, WMS will read this xml file by using the script
Code: Select all
function GetPropertyID(const aKeyName: string): Integer;
begin
if SameText(aKeyName, 'Name') then
Result := mpiTitle
else if SameText(aKeyName, 'Year') then
Result := mpiYear
else if SameText(aKeyName, 'Location') then
Result := mpiFilePath
else if SameText(aKeyName, 'Genre') then
Result := mpiGenre
else if SameText(aKeyName, 'Album') then
Result := mpiAlbum
else if SameText(aKeyName, 'Track Number') then
Result := mpiTrack
else if SameText(aKeyName, 'Artist') then
Result := mpiAuthor
else
Result := 0
end;
function FindKeyValue(aXmlItem: TXMLItem; const aKeyName: string): TXMLItem;
var
i: Integer;
KeyItem, ValueItem: TXMLItem;
begin
Result := nil; i := 0;
while i < aXmlItem.Count do begin
KeyItem := aXmlItem.Items[i]; Inc(i);
if SameText(KeyItem.Name, 'key') and SameText(KeyItem.Value, aKeyName) then begin
if i < aXmlItem.Count then begin
Result := aXmlItem.Items[i]; Break
end
end
end
end;
procedure ProcessKeys(aXmlItem: TXMLItem; aMediaItem: TWmsScriptMediaItem);
var
i, iPropertyID: Integer;
KeyItem, ValueItem: TXMLItem;
begin
i := 0;
while i < aXmlItem.Count do begin
KeyItem := aXmlItem.Items[i]; Inc(i);
if SameText(KeyItem.Name, 'key') then begin
iPropertyID := GetPropertyID(KeyItem.Value);
if iPropertyID <> 0 then begin
ValueItem := aXmlItem.Items[i]; Inc(i);
if MatchText(ValueItem.Name, ['string', 'integer']) then
aMediaItem.Properties[iPropertyID] := ValueItem.Value
end
end
end
end;
var
i: Integer;
PlaylistFile: TXMLDocument;
DictItem, PlaylistsItem, TracksItem: TXMLItem;
begin
PlaylistFile := TXMLDocument.Create;
try
PlaylistFile.LoadFromFile(PlaylistItem.Properties[mpiFilePath]);
if (PlaylistFile.Root <> nil) and SameText(PlaylistFile.Root.Name, 'plist') then begin
DictItem := PlaylistFile.Root.Find('dict');
if DictItem <> nil then begin
TracksItem := FindKeyValue(DictItem, 'Tracks');
if TracksItem <> nil then begin
for i := 0 to TracksItem.Count - 1 do
if SameText(TracksItem.Items[i].Name, 'dict') then
ProcessKeys(TracksItem.Items[i], PlaylistItem.AddChildItem);
end;
PlaylistsItem := FindKeyValue(DictItem, 'Playlists');
if PlaylistsItem <> nil then begin
DictItem := PlaylistsItem.Find('dict');
if DictItem <> nil then
ProcessKeys(DictItem, PlaylistItem)
end
end
end
finally
PlaylistFile.Free
end
end.
I can see the playlist name. But it is empty. Can you give me any advise.
thanks.