[banshee: 24/61] [InternetArchive] Major refactor and reorg



commit 5f3c3179fac7922d17acc6308a1b886a532e48de
Author: Gabriel Burt <gabriel burt gmail com>
Date:   Sat Oct 10 15:54:40 2009 -0700

    [InternetArchive] Major refactor and reorg
    
    Clearly distinguish between Search objects and Details objects in class
    naming.  Move the not-Banshee-specific Banshee.InternetArchive/Item.cs
    code to InternetArchive/Details.cs.

 .../Banshee.InternetArchive/Actions.cs             |    2 +-
 .../{ItemSource.cs => DetailsSource.cs}            |   12 ++--
 ...mSourceContents.cs => DetailsSourceContents.cs} |   12 ++--
 .../Banshee.InternetArchive/Source.cs              |   34 ++++----
 .../Item.cs => InternetArchive/Details.cs}         |   62 ++++++++++---
 .../InternetArchive/{File.cs => DetailsFile.cs}    |    6 +-
 .../{Review.cs => DetailsReview.cs}                |    6 +-
 .../InternetArchive/JsonItem.cs                    |   51 -----------
 .../InternetArchive/Results.cs                     |   47 ----------
 .../InternetArchive/ResultsFormat.cs               |   45 ---------
 .../InternetArchive/Search.cs                      |    7 +-
 .../InternetArchive/{Item.cs => SearchResult.cs}   |   94 ++++++++++---------
 .../{JsonResults.cs => SearchResults.cs}           |   56 ++++++++----
 src/Extensions/Banshee.InternetArchive/Makefile.am |   27 +++---
 14 files changed, 184 insertions(+), 277 deletions(-)
---
diff --git a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/Actions.cs b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/Actions.cs
index 7f0aa90..aa14124 100644
--- a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/Actions.cs
+++ b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/Actions.cs
@@ -47,7 +47,7 @@ namespace Banshee.InternetArchive
                     if (item != null && item.Uri != null) {
                         string [] bits = item.Uri.AbsoluteUri.Split ('/');
                         string id = bits[bits.Length - 1];
-                        var src = new ItemSource (item.TrackTitle, id);
+                        var src = new DetailsSource (item.TrackTitle, id);
                         source.AddChildSource (src);
                         Banshee.ServiceStack.ServiceManager.SourceManager.SetActiveSource (src);
                     }
diff --git a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/ItemSource.cs b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/DetailsSource.cs
similarity index 91%
rename from src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/ItemSource.cs
rename to src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/DetailsSource.cs
index 39232cf..dd55e45 100644
--- a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/ItemSource.cs
+++ b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/DetailsSource.cs
@@ -1,5 +1,5 @@
 //
-// ItemSource.cs
+// DetailsSource.cs
 //
 // Authors:
 //   Gabriel Burt <gburt novell com>
@@ -53,18 +53,18 @@ using IA=InternetArchive;
 
 namespace Banshee.InternetArchive
 {
-    public class ItemSource : Banshee.Sources.Source, ITrackModelSource, IDurationAggregator, IFileSizeAggregator
+    public class DetailsSource : Banshee.Sources.Source, ITrackModelSource, IDurationAggregator, IFileSizeAggregator
     {
-        private Item item;
+        private IA.Details item;
         private MemoryTrackListModel track_model;
 
-        public ItemSource (string name, string id) : base (name, name, 40, "internet-archive-" + id)
+        public DetailsSource (string name, string id) : base (name, name, 40, "internet-archive-" + id)
         {
-            item = Item.LoadOrCreate (id, name);
+            item = IA.Details.LoadOrCreate (id, name);
             track_model = new MemoryTrackListModel ();
             track_model.Reloaded += delegate { OnUpdated (); };
 
-            Properties.Set<Gtk.Widget> ("Nereid.SourceContents", new ItemSourceContents (this, item));
+            Properties.Set<Gtk.Widget> ("Nereid.SourceContents", new DetailsSourceContents (this, item));
         }
 
         public void Reload ()
diff --git a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/ItemSourceContents.cs b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/DetailsSourceContents.cs
similarity index 97%
rename from src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/ItemSourceContents.cs
rename to src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/DetailsSourceContents.cs
index dd19ec3..5dbe8aa 100644
--- a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/ItemSourceContents.cs
+++ b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/DetailsSourceContents.cs
@@ -1,5 +1,5 @@
 //
-// ItemSourceContents.cs
+// DetailsSourceContents.cs
 //
 // Authors:
 //   Gabriel Burt <gburt novell com>
@@ -59,12 +59,12 @@ using IA=InternetArchive;
 
 namespace Banshee.InternetArchive
 {
-    public class ItemSourceContents : Gtk.HBox, Banshee.Sources.Gui.ISourceContents
+    public class DetailsSourceContents : Gtk.HBox, Banshee.Sources.Gui.ISourceContents
     {
-        private ItemSource source;
-        Item item;
+        private DetailsSource source;
+        IA.Details item;
 
-        public ItemSourceContents (ItemSource source, Item item)
+        public DetailsSourceContents (DetailsSource source, IA.Details item)
         {
             this.source = source;
             this.item = item;
@@ -81,7 +81,7 @@ namespace Banshee.InternetArchive
 
         public bool SetSource (ISource source)
         {
-            this.source = source as ItemSource;
+            this.source = source as DetailsSource;
             return this.source != null;
         }
 
diff --git a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/Source.cs b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/Source.cs
index 6d3872a..2f0ee08 100644
--- a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/Source.cs
+++ b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/Source.cs
@@ -69,9 +69,7 @@ namespace Banshee.InternetArchive
             IA.Search.UserAgent = Banshee.Web.Browser.UserAgent;
             IA.Search.TimeoutMs = 12*1000;
 
-            search = new IA.Search () {
-                Format = IA.ResultsFormat.Json
-            };
+            search = new IA.Search ();
 
             IsLocal = false;
             // TODO Should probably support normal playlists at some point (but not smart playlists)
@@ -134,7 +132,7 @@ namespace Banshee.InternetArchive
             }
 
             if (ApplicationContext.CommandLine.Contains ("internet-archive-offline-mode")) {
-                AddChildSource (new ItemSource ("Local H Live at Levis L2 Lazer Rock Stage [Summerfest 1999] on 1999-06-24", "banshee-internet-archive-offline-mode"));
+                AddChildSource (new DetailsSource ("Local H Live at Levis L2 Lazer Rock Stage [Summerfest 1999] on 1999-06-24", "banshee-internet-archive-offline-mode"));
             }
         }
 
@@ -153,10 +151,10 @@ namespace Banshee.InternetArchive
                 SetStatus (Catalog.GetString ("Searching the Internet Archive"), false, true, "gtk-find");
             });
 
-            IA.JsonResults results = null;
+            IA.SearchResults results = null;
 
             try {
-                results = new IA.JsonResults (search.GetResults ());
+                results = search.GetResults ();
                 total_results = results.TotalResults;
             } catch (System.Net.WebException e) {
                 Hyena.Log.Exception ("Error searching the Internet Archive", e);
@@ -173,22 +171,22 @@ namespace Banshee.InternetArchive
                     ServiceManager.DbConnection.Execute ("DELETE FROM CoreTracks WHERE PrimarySourceID = ?", this.DbId);
                     DatabaseTrackModel.Clear ();
 
-                    foreach (var item in results.Items) {
+                    foreach (var result in results) {
                         var track = new DatabaseTrackInfo () {
                             PrimarySource = this,
-                            ArtistName = item.GetJoined (IA.Field.Creator, ", ") ?? "",
-                            Comment    = Hyena.StringUtil.RemoveHtml (item.Get<string> (IA.Field.Description)),
-                            Composer   = item.GetJoined (IA.Field.Publisher, ", ") ?? "",
-                            LicenseUri = item.Get<string> (IA.Field.LicenseUrl),
-                            PlayCount  = (int) item.Get<double> (IA.Field.Downloads),
-                            Rating     = (int) Math.Round (item.Get<double> (IA.Field.AvgRating)),
-                            TrackTitle = item.Get<string> (IA.Field.Title),
-                            Uri        = new Banshee.Base.SafeUri (item.WebpageUrl),
-                            MimeType   = item.GetJoined (IA.Field.Format, ", "),
-                            //MimeType   = item.GetJoined (IA.Field.MediaType, ", "),
-                            Year       = (int) item.Get<double> (IA.Field.Year)
+                            ArtistName = result.Creator ?? "",
+                            Comment    = Hyena.StringUtil.RemoveHtml (result.Description),
+                            Composer   = result.Publisher ?? "",
+                            LicenseUri = result.LicenseUrl,
+                            PlayCount  = result.Downloads,
+                            Rating     = (int) Math.Round (result.AvgRating),
+                            TrackTitle = result.Title,
+                            Uri        = new Banshee.Base.SafeUri (result.WebpageUrl),
+                            MimeType   = result.Format,
+                            Year       = result.Year
                         };
 
+                        // HACK to remove ugly empty description
                         if (track.Comment == "There is currently no description for this item.")
                             track.Comment = null;
 
diff --git a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/Item.cs b/src/Extensions/Banshee.InternetArchive/InternetArchive/Details.cs
similarity index 78%
rename from src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/Item.cs
rename to src/Extensions/Banshee.InternetArchive/InternetArchive/Details.cs
index 46374bf..9134896 100644
--- a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/Item.cs
+++ b/src/Extensions/Banshee.InternetArchive/InternetArchive/Details.cs
@@ -1,5 +1,5 @@
 //
-// Item.cs
+// Details.cs
 //
 // Authors:
 //   Gabriel Burt <gburt novell com>
@@ -27,6 +27,8 @@
 //
 
 using System;
+using System.IO;
+using System.Net;
 using System.Collections.Generic;
 using System.Linq;
 
@@ -34,27 +36,24 @@ using Mono.Unix;
 
 using Hyena.Json;
 
-using InternetArchive;
-using IA=InternetArchive;
-
-namespace Banshee.InternetArchive
+namespace InternetArchive
 {
-    public class Item
+    public class Details
     {
         JsonObject details;
         JsonObject metadata, misc, item, review_info;
         JsonArray reviews;
 
-        public static Item LoadOrCreate (string id, string title)
+        public static Details LoadOrCreate (string id, string title)
         {
             /*var item = Provider.LoadFromId (id);
             if (item != null)
                 return item;*/
 
-            return new Item (id, title);
+            return new Details (id, title);
         }
 
-        private Item (string id, string title)
+        private Details (string id, string title)
         {
             Id = id;
             Title = title;
@@ -165,24 +164,24 @@ namespace Banshee.InternetArchive
                 return DateTime.MinValue;
         }
 
-        public IEnumerable<File> Files {
+        public IEnumerable<DetailsFile> Files {
             get {
                 string location_root = String.Format ("http://{0}{1}";, details.Get<string> ("server"), details.Get<string> ("dir"));
                 var files = details["files"] as JsonObject;
                 foreach (JsonObject file in files.Values) {
-                    yield return new File (file, location_root);
+                    yield return new DetailsFile (file, location_root);
                 }
             }
         }
 
-        public IEnumerable<Review> Reviews {
+        public IEnumerable<DetailsReview> Reviews {
             get {
                 if (reviews == null) {
                     yield break;
                 }
 
                 foreach (JsonObject review in reviews) {
-                    yield return new Review (review);
+                    yield return new DetailsReview (review);
                 }
             }
         }
@@ -216,7 +215,7 @@ namespace Banshee.InternetArchive
                 details = new Hyena.Json.Deserializer (System.IO.File.ReadAllText ("item2.json")).Deserialize () as JsonObject;
             } else {
                 // We don't; grab it from archive.org and parse it
-                string json_str = IA.Item.GetDetails (Id);
+                string json_str = GetDetails (Id);
 
                 if (json_str != null) {
                     details = new Hyena.Json.Deserializer (json_str).Deserialize () as JsonObject;
@@ -237,5 +236,40 @@ namespace Banshee.InternetArchive
 
             return false;
         }
+
+        private static string GetDetails (string id)
+        {
+            HttpWebResponse response = null;
+            string url = String.Format ("http://www.archive.org/details/{0}&output=json";, id);
+
+            try {
+                Hyena.Log.Debug ("ArchiveSharp Getting Details", url);
+
+                var request = (HttpWebRequest) WebRequest.Create (url);
+                request.UserAgent = Search.UserAgent;
+                request.Timeout   = Search.TimeoutMs;
+                request.KeepAlive = Search.KeepAlive;
+
+                response = (HttpWebResponse) request.GetResponse ();
+
+                if (response.StatusCode != HttpStatusCode.OK) {
+                    return null;
+                }
+
+                using (Stream stream = response.GetResponseStream ()) {
+                    using (StreamReader reader = new StreamReader (stream)) {
+                        return reader.ReadToEnd ();
+                    }
+                }
+            } finally {
+                if (response != null) {
+                    if (response.StatusCode != HttpStatusCode.OK) {
+                        Hyena.Log.WarningFormat ("Got status {0} searching {1}", response.StatusCode, url);
+                    }
+                    response.Close ();
+                    response = null;
+                }
+            }
+        }
     }
 }
diff --git a/src/Extensions/Banshee.InternetArchive/InternetArchive/File.cs b/src/Extensions/Banshee.InternetArchive/InternetArchive/DetailsFile.cs
similarity index 95%
rename from src/Extensions/Banshee.InternetArchive/InternetArchive/File.cs
rename to src/Extensions/Banshee.InternetArchive/InternetArchive/DetailsFile.cs
index 6b26bd1..d8a41f9 100644
--- a/src/Extensions/Banshee.InternetArchive/InternetArchive/File.cs
+++ b/src/Extensions/Banshee.InternetArchive/InternetArchive/DetailsFile.cs
@@ -1,5 +1,5 @@
 //
-// File.cs
+// DetailsFile.cs
 //
 // Authors:
 //   Gabriel Burt <gburt novell com>
@@ -36,12 +36,12 @@ using Hyena.Json;
 
 namespace InternetArchive
 {
-    public class File
+    public class DetailsFile
     {
         JsonObject file;
         string location_root;
 
-        public File (JsonObject file, string location_root)
+        public DetailsFile (JsonObject file, string location_root)
         {
             this.file = file;
             this.location_root = location_root;
diff --git a/src/Extensions/Banshee.InternetArchive/InternetArchive/Review.cs b/src/Extensions/Banshee.InternetArchive/InternetArchive/DetailsReview.cs
similarity index 95%
rename from src/Extensions/Banshee.InternetArchive/InternetArchive/Review.cs
rename to src/Extensions/Banshee.InternetArchive/InternetArchive/DetailsReview.cs
index 6e25482..789bb68 100644
--- a/src/Extensions/Banshee.InternetArchive/InternetArchive/Review.cs
+++ b/src/Extensions/Banshee.InternetArchive/InternetArchive/DetailsReview.cs
@@ -1,5 +1,5 @@
 //
-// Review.cs
+// DetailsReview.cs
 //
 // Authors:
 //   Gabriel Burt <gburt novell com>
@@ -36,11 +36,11 @@ using Hyena.Json;
 
 namespace InternetArchive
 {
-    public class Review
+    public class DetailsReview
     {
         JsonObject review;
 
-        public Review (JsonObject review)
+        public DetailsReview (JsonObject review)
         {
             this.review = review;
         }
diff --git a/src/Extensions/Banshee.InternetArchive/InternetArchive/Search.cs b/src/Extensions/Banshee.InternetArchive/InternetArchive/Search.cs
index fff2967..3d54c45 100644
--- a/src/Extensions/Banshee.InternetArchive/InternetArchive/Search.cs
+++ b/src/Extensions/Banshee.InternetArchive/InternetArchive/Search.cs
@@ -40,7 +40,6 @@ namespace InternetArchive
 
         public IList<Field>  ReturnFields { get { return result_fields; } }
         public IList<Sort>   Sorts { get { return sorts; } }
-        public ResultsFormat Format { get; set; }
         public string Query { get; set; }
 
         static Search () {
@@ -87,13 +86,13 @@ namespace InternetArchive
             }
 
             sb.AppendFormat ("&rows={0}", NumResults);
-            sb.AppendFormat ("&fmt={0}", Format.Id);
+            sb.AppendFormat ("&fmt={0}", "json");
             sb.Append ("&xmlsearch=Search");
 
             return sb.ToString ();
         }
 
-        public string GetResults ()
+        public SearchResults GetResults ()
         {
             HttpWebResponse response = null;
             string url = null;
@@ -115,7 +114,7 @@ namespace InternetArchive
 
                 using (Stream stream = response.GetResponseStream ()) {
                     using (StreamReader reader = new StreamReader (stream)) {
-                        return reader.ReadToEnd ();
+                        return new SearchResults (reader.ReadToEnd ());
                     }
                 }
             } finally {
diff --git a/src/Extensions/Banshee.InternetArchive/InternetArchive/Item.cs b/src/Extensions/Banshee.InternetArchive/InternetArchive/SearchResult.cs
similarity index 50%
rename from src/Extensions/Banshee.InternetArchive/InternetArchive/Item.cs
rename to src/Extensions/Banshee.InternetArchive/InternetArchive/SearchResult.cs
index b8d6455..2187695 100644
--- a/src/Extensions/Banshee.InternetArchive/InternetArchive/Item.cs
+++ b/src/Extensions/Banshee.InternetArchive/InternetArchive/SearchResult.cs
@@ -1,5 +1,5 @@
 //
-// Item.cs
+// SearchResult.cs
 //  
 // Author:
 //       Gabriel Burt <gabriel burt gmail com>
@@ -30,22 +30,17 @@ using System.Net;
 using System.Linq;
 using System.Collections.Generic;
 
+using Hyena.Json;
+
 namespace InternetArchive
 {
-    public abstract class Item
+    public sealed class SearchResult
     {
-        public Item ()
-        {
-        }
+        JsonObject item;
 
-        public string GetJoined (Field field, string with)
+        internal SearchResult (JsonObject item)
         {
-            var ary = Get<System.Collections.IEnumerable> (field);
-            if (ary != null) {
-                return String.Join (with, ary.Cast<object> ().Select (o => o.ToString ()).ToArray ());
-            }
-
-            return null;
+            this.item = item;
         }
 
         public string Id {
@@ -56,41 +51,50 @@ namespace InternetArchive
             get { return String.Format ("http://www.archive.org/details/{0}";, Id); }
         }
 
-        public static string GetDetails (string id)
+        public string Creator {
+            get { return GetJoined (Field.Creator, ", ") ?? ""; }
+        }
+
+        public string Description {
+            get { return Hyena.StringUtil.RemoveHtml (Get<string> (Field.Description)); }
+        }
+
+        public string Publisher {
+            get { return GetJoined (Field.Publisher, ", ") ?? ""; }
+        }
+
+        public string LicenseUrl {
+            get { return Get<string> (Field.LicenseUrl); }
+        }
+
+        public int Downloads {
+            get { return (int) Get<double> (Field.Downloads); }
+        }
+
+        public double AvgRating {
+            get { return Get<double> (Field.AvgRating); }
+        }
+
+        public string Title {
+            get { return Get<string> (Field.Title); }
+        }
+
+        public string Format {
+            get { return GetJoined (Field.Format, ", "); }
+        }
+
+        public int Year {
+            get { return (int) Get<double> (Field.Year); }
+        }
+
+        public T Get<T> (Field field)
         {
-            HttpWebResponse response = null;
-            string url = String.Format ("http://www.archive.org/details/{0}&output=json";, id);
-
-            try {
-                Hyena.Log.Debug ("ArchiveSharp Getting Details", url);
-
-                var request = (HttpWebRequest) WebRequest.Create (url);
-                request.UserAgent = Search.UserAgent;
-                request.Timeout   = Search.TimeoutMs;
-                request.KeepAlive = Search.KeepAlive;
-
-                response = (HttpWebResponse) request.GetResponse ();
-
-                if (response.StatusCode != HttpStatusCode.OK) {
-                    return null;
-                }
-
-                using (Stream stream = response.GetResponseStream ()) {
-                    using (StreamReader reader = new StreamReader (stream)) {
-                        return reader.ReadToEnd ();
-                    }
-                }
-            } finally {
-                if (response != null) {
-                    if (response.StatusCode != HttpStatusCode.OK) {
-                        Hyena.Log.WarningFormat ("Got status {0} searching {1}", response.StatusCode, url);
-                    }
-                    response.Close ();
-                    response = null;
-                }
-            }
+            return item.Get<T> (field.Id);
         }
 
-        public abstract T Get<T> (Field field);
+        public string GetJoined (Field field, string with)
+        {
+            return item.GetJoined (field.Id, with);
+        }
     }
 }
diff --git a/src/Extensions/Banshee.InternetArchive/InternetArchive/JsonResults.cs b/src/Extensions/Banshee.InternetArchive/InternetArchive/SearchResults.cs
similarity index 51%
rename from src/Extensions/Banshee.InternetArchive/InternetArchive/JsonResults.cs
rename to src/Extensions/Banshee.InternetArchive/InternetArchive/SearchResults.cs
index a8a836b..095ffb0 100644
--- a/src/Extensions/Banshee.InternetArchive/InternetArchive/JsonResults.cs
+++ b/src/Extensions/Banshee.InternetArchive/InternetArchive/SearchResults.cs
@@ -1,5 +1,5 @@
 //
-// JsonResults.cs
+// SearchResults.cs
 //  
 // Author:
 //       Gabriel Burt <gabriel burt gmail com>
@@ -28,41 +28,59 @@ using System;
 using System.IO;
 using System.Net;
 using System.Linq;
+using System.Collections;
 using System.Collections.Generic;
 
 using Hyena.Json;
 
 namespace InternetArchive
 {
-    public class JsonResults : Results
+    public sealed class SearchResults : IEnumerable<SearchResult>
     {
-        JsonObject response_header;
-        JsonObject response_header_params;
+        JsonArray results;
 
-        JsonObject response;
-        JsonArray  response_docs;
+        public int TotalResults { get; private set; }
+        public int Count  { get; private set; }
+        public int Offset { get; private set; }
 
-        public JsonResults (string resultsString)
+        public SearchResults (string resultsString)
         {
             var json = new Deserializer (resultsString).Deserialize () as JsonObject;
 
-            response_header = (JsonObject) json["responseHeader"];
-            response_header_params = (JsonObject) response_header["params"];
+            var response_header = json.Get<JsonObject> ("responseHeader");
+            if (response_header != null) {
+                var response_header_params = response_header.Get<JsonObject> ("params");
 
-            response = (JsonObject) json["response"];
-            response_docs = (JsonArray) response["docs"];
+                Count  = response_header_params.Get<int> ("rows");
+            }
+
+            var response = json.Get<JsonObject> ("response");
+            if (response != null) {
+                results = response.Get<JsonArray> ("docs");
 
-            TotalResults = (int) (double) response["numFound"];
-            Offset = (int) (double) response["start"];
-            Count  = Int32.Parse (response_header_params["rows"] as string);
+                TotalResults = (int) response.Get<double> ("numFound");
+                Offset = (int) response.Get<double> ("start");
+            }
         }
 
-        public override IEnumerable<Item> Items {
-            get {
-                foreach (object obj in response_docs) {
-                    yield return new JsonItem ((JsonObject) obj);
-                }
+        /*public IEnumerable GetEnumerator ()
+        {
+            return GetEnumerator ();
+        }*/
+
+        public IEnumerator<SearchResult> GetEnumerator ()
+        {
+            if (results == null)
+                yield break;
+
+            foreach (JsonObject obj in results) {
+                yield return new SearchResult (obj);
             }
         }
+
+        IEnumerator IEnumerable.GetEnumerator ()
+        {
+            return GetEnumerator ();
+        }
     }
 }
diff --git a/src/Extensions/Banshee.InternetArchive/Makefile.am b/src/Extensions/Banshee.InternetArchive/Makefile.am
index f65c741..cc1f7cb 100644
--- a/src/Extensions/Banshee.InternetArchive/Makefile.am
+++ b/src/Extensions/Banshee.InternetArchive/Makefile.am
@@ -4,26 +4,23 @@ LINK = $(REF_EXTENSION_INTERNETARCHIVE)
 INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
 
 SOURCES = \
+	Banshee.InternetArchive/Actions.cs \
+	Banshee.InternetArchive/DetailsSource.cs \
+	Banshee.InternetArchive/DetailsSourceContents.cs \
+	Banshee.InternetArchive/HeaderFilters.cs \
+	Banshee.InternetArchive/Source.cs \
 	InternetArchive/Collection.cs \
+	InternetArchive/Details.cs \
+	InternetArchive/DetailsFile.cs \
+	InternetArchive/DetailsReview.cs \
 	InternetArchive/Field.cs \
 	InternetArchive/FieldValue.cs \
-	InternetArchive/File.cs \
+	InternetArchive/JsonExtensions.cs \
 	InternetArchive/MediaType.cs \
-	InternetArchive/ResultsFormat.cs \
 	InternetArchive/Search.cs \
-	InternetArchive/Results.cs \
-	InternetArchive/Review.cs \
-	InternetArchive/Item.cs \
-	InternetArchive/JsonExtensions.cs \
-	InternetArchive/JsonItem.cs \
-	InternetArchive/JsonResults.cs \
-	InternetArchive/Sort.cs \
-	Banshee.InternetArchive/Actions.cs \
-	Banshee.InternetArchive/Item.cs \
-	Banshee.InternetArchive/ItemSource.cs \
-	Banshee.InternetArchive/ItemSourceContents.cs \
-	Banshee.InternetArchive/HeaderFilters.cs \
-	Banshee.InternetArchive/Source.cs
+	InternetArchive/SearchResult.cs \
+	InternetArchive/SearchResults.cs \
+	InternetArchive/Sort.cs
 
 RESOURCES = \
 	Banshee.InternetArchive.addin.xml \



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]