iTune playlist

Post Reply
Rudi
Posts: 6
Joined: Sat Oct 16, 2010 9:23 am

iTune playlist

Post by Rudi »

Eugene,
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>
etc.

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.
But this doesnt seem to work.
I can see the playlist name. But it is empty. Can you give me any advise.
thanks.
Eugene
Posts: 2940
Joined: Tue Nov 17, 2009 8:05 pm

Re: iTune playlist

Post by Eugene »

Hi,

WMS expects

Code: Select all

...
<key>Location</key><string>file://localhost/C:/Media/MP3/Kalimba.mp3</string>
...
Post Reply