Author: jwilcox
Date: 2006-06-16 10:07:34 -0400 (Fri, 16 Jun 2006)
New Revision: 61801

Modified:
   trunk/ipod-sharp/ChangeLog
   trunk/ipod-sharp/src/Playlist.cs
   trunk/ipod-sharp/src/ShuffleTrackDatabase.cs
   trunk/ipod-sharp/src/TrackDatabase.cs
   trunk/ipod-sharp/tests/IPodTests.cs
Log:
2006-06-16  James Willcox  <[EMAIL PROTECTED]>

        * Convert more stuff to use generic collections



Modified: trunk/ipod-sharp/ChangeLog
===================================================================
--- trunk/ipod-sharp/ChangeLog  2006-06-16 13:41:22 UTC (rev 61800)
+++ trunk/ipod-sharp/ChangeLog  2006-06-16 14:07:34 UTC (rev 61801)
@@ -1,3 +1,7 @@
+2006-06-16  James Willcox  <[EMAIL PROTECTED]>
+
+       * Convert more stuff to use generic collections
+
 2006-06-15  James Willcox  <[EMAIL PROTECTED]>
 
        * Add beginnings of write support for the photo database.  Can read

Modified: trunk/ipod-sharp/src/Playlist.cs
===================================================================
--- trunk/ipod-sharp/src/Playlist.cs    2006-06-16 13:41:22 UTC (rev 61800)
+++ trunk/ipod-sharp/src/Playlist.cs    2006-06-16 14:07:34 UTC (rev 61801)
@@ -1,6 +1,8 @@
 
 using System;
 using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
 
 namespace IPod {
 
@@ -10,7 +12,7 @@
 
         private TrackDatabase db;
         private PlaylistRecord record;
-        private ArrayList otgtracks;
+        private List<Track> otgtracks;
         private string otgtitle;
 
         public event PlaylistTrackHandler TrackAdded;
@@ -20,9 +22,9 @@
             get { return record; }
         }
 
-        internal Playlist (TrackDatabase db, string title, Track[] otgtracks) {
+        internal Playlist (TrackDatabase db, string title, List<Track> 
otgtracks) {
             this.otgtitle = title;
-            this.otgtracks = new ArrayList (otgtracks);
+            this.otgtracks = otgtracks;
         }
         
         internal Playlist (TrackDatabase db, PlaylistRecord record) {
@@ -30,13 +32,13 @@
             this.record = record;
         }
 
-        public Track[] Tracks {
+        public ReadOnlyCollection<Track> Tracks {
             get {
                 if (IsOnTheGo)
-                    return (Track[]) otgtracks.ToArray (typeof (Track));
-                    
-                ArrayList tracks = new ArrayList ();
+                    return new ReadOnlyCollection<Track> (otgtracks);
 
+                List<Track> tracks = new List<Track> ();
+
                 foreach (PlaylistItemRecord item in record.Items) {
                     Track track = db.GetTrackById (item.TrackId);
 
@@ -48,8 +50,8 @@
 
                     tracks.Add (track);
                 }
-                
-                return (Track[]) tracks.ToArray (typeof (Track));
+
+                return new ReadOnlyCollection<Track> (tracks);
             }
         }
 

Modified: trunk/ipod-sharp/src/ShuffleTrackDatabase.cs
===================================================================
--- trunk/ipod-sharp/src/ShuffleTrackDatabase.cs        2006-06-16 13:41:22 UTC 
(rev 61800)
+++ trunk/ipod-sharp/src/ShuffleTrackDatabase.cs        2006-06-16 14:07:34 UTC 
(rev 61801)
@@ -16,7 +16,7 @@
             using(BinaryWriter writer = new BinaryWriter(new FileStream(
                 sdbFile, FileMode.Create))) {
                 
-                WriteHeader(writer, device.TrackDatabase.Tracks.Length);
+                WriteHeader(writer, device.TrackDatabase.Tracks.Count);
                 
                 foreach(Track track in device.TrackDatabase.Tracks) {
                     WriteTrackEntry(writer, device, track);

Modified: trunk/ipod-sharp/src/TrackDatabase.cs
===================================================================
--- trunk/ipod-sharp/src/TrackDatabase.cs       2006-06-16 13:41:22 UTC (rev 
61800)
+++ trunk/ipod-sharp/src/TrackDatabase.cs       2006-06-16 14:07:34 UTC (rev 
61801)
@@ -2,6 +2,8 @@
 using System.IO;
 using System.Text;
 using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
 using Mono.Unix;
 
 namespace IPod {
@@ -137,7 +139,7 @@
 
         private int unknownOne = 0;
         private int unknownTwo = 0;
-        private ArrayList details = new ArrayList ();
+        private List<DetailRecord> details = new List<DetailRecord> ();
         private DetailRecord posrec;
 
         public int TrackId;
@@ -257,9 +259,9 @@
         //private int unknownThree;
         private bool isLibrary;
 
-        private ArrayList stringDetails = new ArrayList ();
-        private ArrayList otherDetails = new ArrayList ();
-        private ArrayList playlistItems = new ArrayList ();
+        private List<DetailRecord> stringDetails = new List<DetailRecord> ();
+        private List<Record> otherDetails = new List<Record> ();
+        private List<PlaylistItemRecord> playlistItems = new 
List<PlaylistItemRecord> ();
 
         private DetailRecord nameRecord;
         
@@ -282,9 +284,9 @@
             }
         }
 
-        public PlaylistItemRecord[] Items {
+        public ReadOnlyCollection<PlaylistItemRecord> Items {
             get {
-                return (PlaylistItemRecord[]) playlistItems.ToArray (typeof 
(PlaylistItemRecord));
+                return new ReadOnlyCollection<PlaylistItemRecord> 
(playlistItems);
             }
         }
 
@@ -400,26 +402,26 @@
 
             // blah, this is soooo sleaux
             
-            ArrayList items = (ArrayList) playlistItems.Clone ();
+            List<PlaylistItemRecord> items = new List<PlaylistItemRecord> 
(playlistItems);
             TrackSorter sorter = new TrackSorter (tracks, type);
             items.Sort (sorter);
 
-            ArrayList indices = new ArrayList ();
+            List<int> indices = new List<int> ();
             foreach (PlaylistItemRecord item in items) {
                 indices.Add (tracks.IndexOf (item.TrackId));
             }
 
-            record.LibraryIndices = (int[]) indices.ToArray (typeof (int));
+            record.LibraryIndices = indices.ToArray ();
             return record;
         }
 #pragma warning restore 0169
 
         private void CreateLibraryIndices (TrackListRecord tracks) {
 
-            ArrayList details = new ArrayList ();
+            List<Record> details = new List<Record> ();
             
             // remove any existing library index records
-            foreach (Record rec in (ArrayList) otherDetails) {
+            foreach (Record rec in otherDetails) {
                 DetailRecord detail = rec as DetailRecord;
                 if (detail != null && detail.Type != DetailType.LibraryIndex) {
                     details.Add (rec);
@@ -495,7 +497,7 @@
             writer.Write (childData, 0, childDataLength);
         }
 
-        private class TrackSorter : IComparer {
+        private class TrackSorter : IComparer<PlaylistItemRecord> {
 
             private TrackListRecord tracks;
             private IndexType type;
@@ -505,9 +507,9 @@
                 this.type = type;
             }
             
-            public int Compare (object a, object b) {
-                TrackRecord trackA = tracks.LookupTrack ((a as 
PlaylistItemRecord).TrackId);
-                TrackRecord trackB = tracks.LookupTrack ((b as 
PlaylistItemRecord).TrackId);
+            public int Compare (PlaylistItemRecord a, PlaylistItemRecord b) {
+                TrackRecord trackA = tracks.LookupTrack (a.TrackId);
+                TrackRecord trackB = tracks.LookupTrack (b.TrackId);
 
                 if (trackA == null || trackB == null)
                     return 0;
@@ -538,7 +540,7 @@
 
     internal class PlaylistListRecord : TrackDbRecord, IEnumerable {
 
-        private ArrayList playlists = new ArrayList ();
+        private List<PlaylistRecord> playlists = new List<PlaylistRecord> ();
 
         public PlaylistRecord this[int index] {
             get {
@@ -546,9 +548,9 @@
             }
         }
 
-        public PlaylistRecord[] Playlists {
+        public ReadOnlyCollection<PlaylistRecord> Playlists {
             get {
-                return (PlaylistRecord[]) playlists.ToArray (typeof 
(PlaylistRecord));
+                return new ReadOnlyCollection<PlaylistRecord> (playlists);
             }
         }
 
@@ -831,7 +833,7 @@
         private int unknownNineteen;
         private int playCountDup;
 
-        private ArrayList details = new ArrayList ();
+        private List<DetailRecord> details = new List<DetailRecord> ();
 
         public int Id;
         public bool Hidden = false;
@@ -875,8 +877,8 @@
         public int SeasonNumber;
         public int EpisodeNumber;
 
-        public DetailRecord[] Details {
-            get { return (DetailRecord[]) details.ToArray (typeof 
(DetailRecord)); }
+        public ReadOnlyCollection<DetailRecord> Details {
+            get { return new ReadOnlyCollection<DetailRecord> (details); }
         }
 
         public TrackRecord (bool isbe) : base (isbe) {
@@ -1159,10 +1161,10 @@
 
     internal class TrackListRecord : TrackDbRecord, IEnumerable {
 
-        private ArrayList tracks = new ArrayList ();
+        private List<TrackRecord> tracks = new List<TrackRecord> ();
 
-        public TrackRecord[] Tracks {
-            get { return (TrackRecord[]) tracks.ToArray (typeof 
(TrackRecord)); }
+        public ReadOnlyCollection<TrackRecord> Tracks {
+            get { return new ReadOnlyCollection<TrackRecord> (tracks); }
         }
 
         public TrackListRecord (bool isbe) : base (isbe) {
@@ -1343,9 +1345,9 @@
 
         private int unknownOne = 1;
         private int unknownTwo = 2;
-        
-        private ArrayList datasets = new ArrayList ();
 
+        private List<DataSetRecord> datasets = new List<DataSetRecord> ();
+
         public int Version = MaxSupportedVersion;
         public long Id;
 
@@ -1361,7 +1363,6 @@
         }
 
         public DatabaseRecord (bool isbe) : base (isbe) {
-            datasets = new ArrayList ();
             datasets.Add (new DataSetRecord (DataSetIndex.Library, isbe));
 
             DataSetRecord plrec = new DataSetRecord (DataSetIndex.Playlist, 
isbe);
@@ -1510,12 +1511,12 @@
         
         private DatabaseRecord dbrec;
 
-        private ArrayList tracks = new ArrayList ();
-        private ArrayList tracksToAdd = new ArrayList ();
-        private ArrayList tracksToRemove = new ArrayList ();
+        private List<Track> tracks = new List<Track> ();
+        private List<Track> tracksToAdd = new List<Track> ();
+        private List<Track> tracksToRemove = new List<Track> ();
 
-        private ArrayList playlists = new ArrayList ();
-        private ArrayList otgPlaylists = new ArrayList ();
+        private List<Playlist> playlists = new List<Playlist> ();
+        private List<Playlist> otgPlaylists = new List<Playlist> ();
         
         private Random random = new Random();
         private Device device;
@@ -1561,20 +1562,22 @@
             get { return ControlPath + "iTunes/Play Counts"; }
         }
 
-        public Track[] Tracks {
+        public ReadOnlyCollection<Track> Tracks {
             get {
-                return (Track[]) tracks.ToArray (typeof (Track));
+                return new ReadOnlyCollection<Track> (tracks);
             }
         }
 
-        public Playlist[] Playlists {
+        public ReadOnlyCollection<Playlist> Playlists {
             get {
-                return (Playlist[]) playlists.ToArray (typeof (Playlist));
+                return new ReadOnlyCollection<Playlist> (playlists);
             }
         }
 
-        public Playlist[] OnTheGoPlaylists {
-            get { return (Playlist[]) otgPlaylists.ToArray (typeof 
(Playlist)); }
+        public ReadOnlyCollection<Playlist> OnTheGoPlaylists {
+            get {
+                return new ReadOnlyCollection<Playlist> (otgPlaylists);
+            }
         }
 
         public int Version {
@@ -1652,9 +1655,9 @@
             if (!finfo.Exists || finfo.Length == 0) {
                 return false;
             }
+
+            List<Track> otgtracks = new List<Track> ();
             
-            ArrayList otgtracks = new ArrayList ();
-            
             using (BinaryReader reader = new BinaryReader (File.Open (path, 
FileMode.Open, FileAccess.Read))) {
 
                 byte[] header = reader.ReadBytes (20);
@@ -1677,7 +1680,7 @@
                 title += " " + num;
             }
             
-            otgPlaylists.Add (new Playlist (this, title, (Track[]) 
otgtracks.ToArray (typeof (Track))));
+            otgPlaylists.Add (new Playlist (this, title, otgtracks));
             return true;
         }
 

Modified: trunk/ipod-sharp/tests/IPodTests.cs
===================================================================
--- trunk/ipod-sharp/tests/IPodTests.cs 2006-06-16 13:41:22 UTC (rev 61800)
+++ trunk/ipod-sharp/tests/IPodTests.cs 2006-06-16 14:07:34 UTC (rev 61801)
@@ -1,5 +1,7 @@
 
 using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
 using System.Diagnostics;
 using System.IO;
 using NUnit.Framework;
@@ -89,7 +91,7 @@
         public void AddTrackTest () {
             TrackDatabase db = OpenDevice ().TrackDatabase;
 
-            int len = db.Tracks.Length;
+            int len = db.Tracks.Count;
 
             for (int i = 0; i < 100; i++)
                 AddTrack (db);
@@ -97,14 +99,14 @@
             db.Save ();
             db.Reload ();
 
-            Assert.AreEqual (len + 100, db.Tracks.Length);
+            Assert.AreEqual (len + 100, db.Tracks.Count);
         }
 
         [Test]
         public void RemoveTrackTest () {
             TrackDatabase db = OpenDevice ().TrackDatabase;
 
-            int origlen = db.Tracks.Length;
+            int origlen = db.Tracks.Count;
             
             Track track = AddTrack (db);
             int index = origlen;
@@ -137,7 +139,7 @@
                 }
             }
 
-            Assert.AreEqual (db.Tracks.Length, origlen);
+            Assert.AreEqual (db.Tracks.Count, origlen);
         }
 
         [Test]
@@ -145,7 +147,7 @@
             TrackDatabase db = OpenDevice ().TrackDatabase;
 
             AddTrack (db);
-            int index = db.Tracks.Length - 1;
+            int index = db.Tracks.Count - 1;
             
             db.Save ();
             db.Reload ();
@@ -222,7 +224,7 @@
             list = db.LookupPlaylist (playlistName);
 
             Assert.IsNotNull (list);
-            Assert.AreEqual (10, list.Tracks.Length);
+            Assert.AreEqual (10, list.Tracks.Count);
         }
 
         [Test]
@@ -257,19 +259,19 @@
             list = db.LookupPlaylist (playlistName);
 
             Assert.IsNotNull (list);
-            Assert.AreEqual (10, list.Tracks.Length);
+            Assert.AreEqual (10, list.Tracks.Count);
 
             for (int i = 0; i < 10; i++)
                 list.AddTrack (AddTrack (db));
 
-            Assert.AreEqual (20, list.Tracks.Length);
+            Assert.AreEqual (20, list.Tracks.Count);
             db.Save ();
             db.Reload ();
 
             list = db.LookupPlaylist (playlistName);
 
             Assert.IsNotNull (list);
-            Assert.AreEqual (20, list.Tracks.Length);
+            Assert.AreEqual (20, list.Tracks.Count);
         }
 
         [Test]
@@ -284,7 +286,7 @@
             list = db.LookupPlaylist (playlistName);
 
             Assert.IsNotNull (list);
-            Assert.AreEqual (10, list.Tracks.Length);
+            Assert.AreEqual (10, list.Tracks.Count);
 
             Track mytrack = list.Tracks[4];
             mytrack.Artist = "reordered";
@@ -440,9 +442,9 @@
         public void ModifyOTGNameTest () {
             TrackDatabase db = OpenDevice ().TrackDatabase;
 
-            Playlist[] lists = db.OnTheGoPlaylists;
+            ReadOnlyCollection<Playlist> lists = db.OnTheGoPlaylists;
             
-            if (lists.Length == 0)
+            if (lists.Count == 0)
                 throw new InvalidOperationException ("no lists");
             
             lists[0].Name = "foobar";
@@ -455,9 +457,9 @@
 
             Track track = AddTrack (db);
 
-            Playlist[] lists = db.OnTheGoPlaylists;
+            ReadOnlyCollection<Playlist> lists = db.OnTheGoPlaylists;
             
-            if (lists.Length == 0)
+            if (lists.Count == 0)
                 throw new InvalidOperationException ("no lists");
 
             lists[0].AddTrack (track);
@@ -468,10 +470,10 @@
         public void RemoveOTGTrackTest () {
             TrackDatabase db = OpenDevice ().TrackDatabase;
 
-            Playlist[] lists = db.OnTheGoPlaylists;
+            ReadOnlyCollection<Playlist> lists = db.OnTheGoPlaylists;
 
             // make nunit happy if there were no tracks or playlists
-            if (lists.Length == 0 || lists[0].Tracks.Length == 0)
+            if (lists.Count == 0 || lists[0].Tracks.Count == 0)
                 throw new InvalidOperationException ("no tracks");
 
             Playlist otg = lists[0];
@@ -486,10 +488,10 @@
         public void RemoveOTGPlaylistTest () {
             TrackDatabase db = OpenDevice ().TrackDatabase;
 
-            Playlist[] lists = db.OnTheGoPlaylists;
+            ReadOnlyCollection<Playlist> lists = db.OnTheGoPlaylists;
 
             // make nunit stfu
-            if (lists.Length == 0)
+            if (lists.Count == 0)
                 throw new InvalidOperationException ("no playlists");
 
             foreach (Playlist pl in lists) {

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to