protected Track parseTrack(XPathNodeIterator nodeIterator)
 {
     var track = new Track();
     while (nodeIterator.MoveNext())
     {
         string key = nodeIterator.Current.Value;
         if (key.Equals("Track ID", StringComparison.OrdinalIgnoreCase))
         {
             if (nodeIterator.MoveNext())
             {
                 track.TrackID = int.Parse(nodeIterator.Current.Value);
             }
         }
         else
         {
             if (key.Equals("Name", StringComparison.OrdinalIgnoreCase))
             {
                 if (nodeIterator.MoveNext())
                 {
                     track.Name = nodeIterator.Current.Value;
                 }
                 continue;
             }
             if (key.Equals("Artist", StringComparison.OrdinalIgnoreCase))
             {
                 if (nodeIterator.MoveNext())
                 {
                     track.Artist = nodeIterator.Current.Value;
                 }
                 continue;
             }
             if (key.Equals("Album Artist", StringComparison.OrdinalIgnoreCase))
             {
                 if (nodeIterator.MoveNext())
                 {
                     track.AlbumArtist = nodeIterator.Current.Value;
                 }
                 continue;
             }
             if (key.Equals("Album", StringComparison.OrdinalIgnoreCase))
             {
                 if (nodeIterator.MoveNext())
                 {
                     track.Album = nodeIterator.Current.Value;
                 }
                 continue;
             }
             if (key.Equals("Genre", StringComparison.OrdinalIgnoreCase))
             {
                 if (nodeIterator.MoveNext())
                 {
                     track.Genre = nodeIterator.Current.Value;
                 }
                 continue;
             }
             if (key.Equals("Total Time", StringComparison.OrdinalIgnoreCase))
             {
                 if (nodeIterator.MoveNext())
                 {
                     try
                     {
                         track.TotalTime = int.Parse(nodeIterator.Current.Value);
                     }
                     catch
                     {
                     }
                 }
                 continue;
             }
             if (key.Equals("Track Number", StringComparison.OrdinalIgnoreCase))
             {
                 if (nodeIterator.MoveNext())
                 {
                     try
                     {
                         track.TrackNumber = int.Parse(nodeIterator.Current.Value);
                     }
                     catch
                     {
                     }
                 }
                 continue;
             }
             if (key.Equals("Year", StringComparison.OrdinalIgnoreCase))
             {
                 if (nodeIterator.MoveNext())
                 {
                     try
                     {
                         track.Year = int.Parse(nodeIterator.Current.Value);
                     }
                     catch
                     {
                     }
                 }
                 continue;
             }
             if (key.Equals("Play Count", StringComparison.OrdinalIgnoreCase))
             {
                 if (nodeIterator.MoveNext())
                 {
                     try
                     {
                         track.PlayCount = int.Parse(nodeIterator.Current.Value);
                     }
                     catch
                     {
                     }
                 }
                 continue;
             }
         }
     }
     return (track.TrackID != -1) ? track : null;
 }
        public List<Track> GetMusicTracks(string artworkDir)
        {
            List<Track> tracks = new List<Track>();
            try
            {
                var libraryPlaylist = this.iTunesApp.LibraryPlaylist;
                foreach (IITTrack iitrack in libraryPlaylist.Tracks)
                {
                    if (iitrack.Kind != ITTrackKind.ITTrackKindFile) continue;
                    var fileTrack = iitrack as IITFileOrCDTrack;
                    if (fileTrack == null) continue;
                    if (fileTrack.VideoKind != ITVideoKind.ITVideoKindNone) continue;
                    var t = new Track
                    {
                        TrackID = iitrack.trackID,
                        Name = iitrack.Name,
                        Album = iitrack.Album,
                        Artist = iitrack.Artist,
                        BiitRate = iitrack.BitRate,
                        Composer = iitrack.Composer,
                        DateAdded = iitrack.DateAdded,
                        DiscCount = iitrack.DiscCount,
                        DiscNumber = iitrack.DiscNumber,
                        TotalTime = iitrack.Duration,
                        Genre = iitrack.Genre,
                        Kind = iitrack.KindAsString,
                        DateModified = iitrack.ModificationDate,
                        PlayCount = iitrack.PlayedCount,
                        PlayDateUTC = iitrack.PlayedDate,
                        TrackCount = iitrack.TrackCount,
                        TrackNumber = iitrack.TrackNumber,
                        Year = iitrack.Year,
                    };

                    var imagePathName = artworkDir + Path.DirectorySeparatorChar + HashString(t.Album + t.Artist + t.DiscNumber.ToString());
                    if (File.Exists(imagePathName) || ExtractArtwork(iitrack, imagePathName))
                    {
                        t.Image = imagePathName;
                    }
                    tracks.Add(t);
                }
            }
            catch (Exception) { }
            return tracks;
        }