[banshee: 4/61] [InternetArchive] Load basic track info



commit 847b860e02a99e34a672ef7a3e8266dca4aa5249
Author: Gabriel Burt <gabriel burt gmail com>
Date:   Wed Oct 7 11:32:19 2009 -0700

    [InternetArchive] Load basic track info
    
    The category and sort dropdowns are functional; add a Refresh button.

 .../Banshee.InternetArchive/HeaderFilters.cs       |   62 ++++++++++++++---
 .../Banshee.InternetArchive/Source.cs              |   47 ++++++++++++-
 .../InternetArchive/Field.cs                       |   22 +++++--
 .../InternetArchive/FieldValue.cs                  |   13 +++-
 .../InternetArchive/Item.cs                        |   43 ++++++++++++
 .../InternetArchive/JsonItem.cs                    |   56 +++++++++++++++
 .../InternetArchive/JsonResults.cs                 |   73 ++++++++++++++++++++
 .../InternetArchive/MediaType.cs                   |    2 +-
 .../InternetArchive/Results.cs                     |   47 +++++++++++++
 .../InternetArchive/Search.cs                      |   23 ++++---
 src/Extensions/Banshee.InternetArchive/Makefile.am |    5 +-
 11 files changed, 362 insertions(+), 31 deletions(-)
---
diff --git a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/HeaderFilters.cs b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/HeaderFilters.cs
index 695ac7c..c6090db 100644
--- a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/HeaderFilters.cs
+++ b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/HeaderFilters.cs
@@ -39,30 +39,40 @@ namespace Banshee.InternetArchive
 {
     public class HeaderFilters : HBox
     {
-        public HeaderFilters ()
+        private Source source;
+
+        private ComboBox sort_combo, media_type_combo;
+        private TreeStore media_type_store;
+
+        public HeaderFilters (Source source)
         {
+            this.source = source;
+
             Spacing = 6;
 
-            BuildMediaTypeCombo ();
             BuildSortCombo ();
+            BuildMediaTypeCombo ();
+            BuildRefreshButton ();
+
+            UpdateSearch ();
         }
 
         private void BuildMediaTypeCombo ()
         {
-            var store = new TreeStore (typeof (string), typeof (string));
+            var store = media_type_store = new TreeStore (typeof (IA.MediaType), typeof (string));
             foreach (var mediatype in IA.MediaType.Options.OrderBy (t => t.Name)) {
                 if (mediatype.Id != "software") {
-                    var iter = store.AppendValues (mediatype.Id, mediatype.Name);
+                    var iter = store.AppendValues (mediatype, mediatype.Name);
 
                     if (mediatype.Children != null) {
                         foreach (var child in mediatype.Children.OrderBy (t => t.Name)) {
-                            store.AppendValues (iter, child.Id, child.Name);
+                            store.AppendValues (iter, child, child.Name);
                         }
                     }
                 }
             }
 
-            var combo = new ComboBox ();
+            var combo = media_type_combo = new ComboBox ();
             combo.Model = store;
 
             var cell = new CellRendererText ();
@@ -70,20 +80,50 @@ namespace Banshee.InternetArchive
             combo.AddAttribute (cell, "text", 1);
             combo.Active = 0;
 
-            PackStart (new Label (Catalog.GetString ("Show")), false, false, 0);
+            //PackStart (new Label (Catalog.GetString ("Show")), false, false, 0);
             PackStart (combo, false, false, 0);
         }
 
         private void BuildSortCombo ()
         {
-            var combo = ComboBox.NewText ();
+            var combo = sort_combo = ComboBox.NewText ();
 
-            combo.AppendText (Catalog.GetString ("Popular This Week"));
             combo.AppendText (Catalog.GetString ("Popular"));
-            combo.AppendText (Catalog.GetString ("Rated"));
+            combo.AppendText (Catalog.GetString ("Popular This Week"));
+            combo.AppendText (Catalog.GetString ("Highly Rated"));
+            combo.Active = 0;
 
-            PackStart (new Label (Catalog.GetString ("Sort by")), false, false, 0);
+            //PackStart (new Label (Catalog.GetString ("Sort by")), false, false, 0);
             PackStart (combo, false, false, 0);
         }
+
+        private void BuildRefreshButton ()
+        {
+            var button = new Button (Stock.Refresh);
+            button.Clicked += (o, a) => {
+                UpdateSearch ();
+                source.Reload ();
+            };
+
+            PackStart (button, false, false, 0);
+        }
+
+        private void UpdateSearch ()
+        {
+            source.Search.Sorts.Clear ();
+
+            string [] sorts = { "downloads desc", "week asc", "avg_rating desc" };
+            source.Search.Sorts.Add (new IA.Sort () { Id = sorts[sort_combo.Active] });
+
+            Console.WriteLine ("sort = {0}", sorts[sort_combo.Active]);
+
+            TreeIter iter;
+            if (media_type_combo.GetActiveIter (out iter)) {
+                var media_type = media_type_store.GetValue (iter, 0) as IA.MediaType;
+                Console.WriteLine ("media_type_combo.Active = {0}", media_type.Id);
+
+                source.Search.Query = media_type.ToString ();
+            }
+        }
     }
 }
diff --git a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/Source.cs b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/Source.cs
index 027499a..309d2e6 100644
--- a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/Source.cs
+++ b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/Source.cs
@@ -48,6 +48,8 @@ using Banshee.Preferences;
 using Banshee.ServiceStack;
 using Banshee.Sources;
 
+using IA=InternetArchive;
+
 namespace Banshee.InternetArchive
 {
     public class Source : Banshee.Sources.PrimarySource
@@ -55,9 +57,16 @@ namespace Banshee.InternetArchive
         private static string name = Catalog.GetString ("Internet Archive");
 
         private Gtk.Widget header_widget;
+        private IA.Search search;
+
+        public IA.Search Search { get { return search; } }
 
         public Source () : base (name, name, "internet-archive", 210)
         {
+            search = new IA.Search () {
+                Format = IA.ResultsFormat.Json
+            };
+
             IsLocal = false;
             // TODO Should probably support normal playlists at some point (but not smart playlists)
             SupportsPlaylists = false;
@@ -96,7 +105,7 @@ namespace Banshee.InternetArchive
             DatabaseTrackModel.CanReorder = false;
 
             if (header_widget == null) {
-                header_widget = new HeaderFilters ();
+                header_widget = new HeaderFilters (this);
                 header_widget.ShowAll ();
                 Properties.Set<Gtk.Widget> ("Nereid.SourceContents.HeaderWidget", header_widget);
             }
@@ -107,6 +116,42 @@ namespace Banshee.InternetArchive
             base.Activate ();
         }
 
+        public override void Reload ()
+        {
+            bool success = false;
+
+            try {
+                var results = new IA.JsonResults (search.GetResults ());
+
+                // TODO set the status bar w/ this
+                Console.WriteLine ("Have {0} total results, {1} current rows, and {2} is the offset", results.TotalResults, results.Count, results.Offset);
+
+                RemoveTrackRange (DatabaseTrackModel, new RangeCollection.Range (0, Count - 1));
+                DatabaseTrackModel.Clear ();
+
+                foreach (var item in results.Items) {
+                    var track = new DatabaseTrackInfo () {
+                        PrimarySource = this,
+                        ArtistName = item.Get (IA.Field.Creator) ?? Catalog.GetString ("Unknown"),
+                        TrackTitle = item.Get (IA.Field.Title),
+                        Comment    = Hyena.StringUtil.RemoveHtml (item.Get (IA.Field.Description))
+                    };
+
+                    track.Save (false);
+                }
+
+                base.Reload ();
+                success = true;
+            } catch (Exception e) {
+                Hyena.Log.Exception ("Error refreshing internet archive", e);
+            }
+
+            if (!success) {
+                // TODO differentiate between various errors types (network, invalid search, etc)
+                SetStatus (Catalog.GetString ("Error refreshing Internet Archive"), true);
+            }
+        }
+
         /*public override bool AcceptsInputFromSource (Source source)
         {
             return false;
diff --git a/src/Extensions/Banshee.InternetArchive/InternetArchive/Field.cs b/src/Extensions/Banshee.InternetArchive/InternetArchive/Field.cs
index 55064cd..aa3d5f2 100644
--- a/src/Extensions/Banshee.InternetArchive/InternetArchive/Field.cs
+++ b/src/Extensions/Banshee.InternetArchive/InternetArchive/Field.cs
@@ -26,6 +26,8 @@
 
 using System;
 
+using Mono.Unix;
+
 using Hyena.Query;
 
 namespace InternetArchive
@@ -38,7 +40,6 @@ namespace InternetArchive
         contributor
         coverage
 
-        creator
         date
         description
         downloads
@@ -55,7 +56,6 @@ namespace InternetArchive
         num_reviews
         oai_updatedate
         publicdate
-        publisher
         rights
 
         scanningcentre
@@ -67,11 +67,23 @@ namespace InternetArchive
         week
         year*/
 
-        public string Name { get; protected set; }
-        public string Id { get; set; }
+        public static Field MediaType  = new Field ("mediatype",  Catalog.GetString ("Media Type"));
+        public static Field Identifier = new Field ("identifier", Catalog.GetString ("ID"));
+        public static Field Title      = new Field ("title",      Catalog.GetString ("Title"));
+        public static Field Creator    = new Field ("creator",    Catalog.GetString ("Creator"));
+        public static Field Publisher  = new Field ("publisher",  Catalog.GetString ("Publisher"));
+        public static Field Downloads  = new Field ("downloads",  Catalog.GetString ("Downloads"));
+        public static Field Description= new Field ("description",Catalog.GetString ("Description"));
+        public static Field AvgRating  = new Field ("avg_rating", Catalog.GetString ("Rating"));
+        public static Field Format     = new Field ("format",     Catalog.GetString ("Format"));
+
+        public string Name { get; private set; }
+        public string Id { get; private set; }
 
-        public Field ()
+        public Field (string id, string name)
         {
+            Id = id;
+            Name = name;
         }
     }
 }
diff --git a/src/Extensions/Banshee.InternetArchive/InternetArchive/FieldValue.cs b/src/Extensions/Banshee.InternetArchive/InternetArchive/FieldValue.cs
index c9d356d..d9d78c6 100644
--- a/src/Extensions/Banshee.InternetArchive/InternetArchive/FieldValue.cs
+++ b/src/Extensions/Banshee.InternetArchive/InternetArchive/FieldValue.cs
@@ -32,13 +32,20 @@ namespace InternetArchive
 {
     public class FieldValue
     {
-        public string Name { get; private set; }
-        public string Id   { get; private set; }
+        public Field  Field { get; private set; }
+        public string Name  { get; private set; }
+        public string Id    { get; private set; }
 
-        public FieldValue (string id, string name)
+        public FieldValue (Field field, string id, string name)
         {
+            Field = field;
             Id = id;
             Name = name;
         }
+
+        public override string ToString ()
+        {
+            return String.Format ("{0}:{1}", Field.Id, Id);
+        }
     }
 }
diff --git a/src/Extensions/Banshee.InternetArchive/InternetArchive/Item.cs b/src/Extensions/Banshee.InternetArchive/InternetArchive/Item.cs
new file mode 100644
index 0000000..4370458
--- /dev/null
+++ b/src/Extensions/Banshee.InternetArchive/InternetArchive/Item.cs
@@ -0,0 +1,43 @@
+//
+// Item.cs
+//  
+// Author:
+//       Gabriel Burt <gabriel burt gmail com>
+// 
+// Copyright (c) 2009 Gabriel Burt
+// 
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+// 
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.IO;
+using System.Net;
+using System.Linq;
+using System.Collections.Generic;
+
+namespace InternetArchive
+{
+    public abstract class Item
+    {
+        public Item ()
+        {
+        }
+
+        public abstract string Get (Field field);
+    }
+}
diff --git a/src/Extensions/Banshee.InternetArchive/InternetArchive/JsonItem.cs b/src/Extensions/Banshee.InternetArchive/InternetArchive/JsonItem.cs
new file mode 100644
index 0000000..118710b
--- /dev/null
+++ b/src/Extensions/Banshee.InternetArchive/InternetArchive/JsonItem.cs
@@ -0,0 +1,56 @@
+//
+// JsonItem.cs
+//  
+// Author:
+//       Gabriel Burt <gabriel burt gmail com>
+// 
+// Copyright (c) 2009 Gabriel Burt
+// 
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+// 
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.IO;
+using System.Net;
+using System.Linq;
+using System.Collections.Generic;
+
+using Hyena.Json;
+
+namespace InternetArchive
+{
+    public class JsonItem : Item
+    {
+        JsonObject item;
+
+        public JsonItem (JsonObject item)
+        {
+            this.item = item;
+        }
+
+        public override string Get (Field field)
+        {
+            object result;
+            if (item.TryGetValue (field.Id, out result)) {
+                return result as string;
+            }
+
+            return null;
+        }
+    }
+}
diff --git a/src/Extensions/Banshee.InternetArchive/InternetArchive/JsonResults.cs b/src/Extensions/Banshee.InternetArchive/InternetArchive/JsonResults.cs
new file mode 100644
index 0000000..12342e7
--- /dev/null
+++ b/src/Extensions/Banshee.InternetArchive/InternetArchive/JsonResults.cs
@@ -0,0 +1,73 @@
+//
+// JsonResults.cs
+//  
+// Author:
+//       Gabriel Burt <gabriel burt gmail com>
+// 
+// Copyright (c) 2009 Gabriel Burt
+// 
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+// 
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.IO;
+using System.Net;
+using System.Linq;
+using System.Collections.Generic;
+
+using Hyena.Json;
+
+namespace InternetArchive
+{
+    public class JsonResults : Results
+    {
+        JsonObject response_header;
+        JsonObject response_header_params;
+
+        JsonObject response;
+        JsonArray  response_docs;
+
+        public JsonResults (string resultsString)
+        {
+            var json = new Deserializer (resultsString).Deserialize () as JsonObject;
+
+            if (Hyena.Log.Debugging) {
+                Hyena.Log.Debug ("Got JSON results from Internet Archive:");
+                json.Dump ();
+            }
+
+            response_header = (JsonObject) json["responseHeader"];
+            response_header_params = (JsonObject) response_header["params"];
+
+            response = (JsonObject) json["response"];
+            response_docs = (JsonArray) response["docs"];
+
+            TotalResults = (int) (double) response["numFound"];
+            Offset = (int) (double) response["start"];
+            Count  = Int32.Parse (response_header_params["rows"] as string);
+        }
+
+        public override IEnumerable<Item> Items {
+            get {
+                foreach (object obj in response_docs) {
+                    yield return new JsonItem ((JsonObject) obj);
+                }
+            }
+        }
+    }
+}
diff --git a/src/Extensions/Banshee.InternetArchive/InternetArchive/MediaType.cs b/src/Extensions/Banshee.InternetArchive/InternetArchive/MediaType.cs
index e05cc2e..5c57cb4 100644
--- a/src/Extensions/Banshee.InternetArchive/InternetArchive/MediaType.cs
+++ b/src/Extensions/Banshee.InternetArchive/InternetArchive/MediaType.cs
@@ -33,7 +33,7 @@ namespace InternetArchive
 {
     public class MediaType : FieldValue
     {
-        private MediaType (string id, string name) : base (id, name) {}
+        private MediaType (string id, string name) : base (Field.MediaType, id, name) {}
 
         private MediaType AddChildren (params MediaType [] children)
         {
diff --git a/src/Extensions/Banshee.InternetArchive/InternetArchive/Results.cs b/src/Extensions/Banshee.InternetArchive/InternetArchive/Results.cs
new file mode 100644
index 0000000..f60fbe6
--- /dev/null
+++ b/src/Extensions/Banshee.InternetArchive/InternetArchive/Results.cs
@@ -0,0 +1,47 @@
+//
+// Results.cs
+//  
+// Author:
+//       Gabriel Burt <gabriel burt gmail com>
+// 
+// Copyright (c) 2009 Gabriel Burt
+// 
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+// 
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.IO;
+using System.Net;
+using System.Linq;
+using System.Collections.Generic;
+
+namespace InternetArchive
+{
+    public abstract class Results
+    {
+        public int TotalResults { get; protected set; }
+        public int Count  { get; protected set; }
+        public int Offset { get; protected set; }
+
+        public Results ()
+        {
+        }
+
+        public abstract IEnumerable<Item> Items { get; }
+    }
+}
diff --git a/src/Extensions/Banshee.InternetArchive/InternetArchive/Search.cs b/src/Extensions/Banshee.InternetArchive/InternetArchive/Search.cs
index 043bac2..536517e 100644
--- a/src/Extensions/Banshee.InternetArchive/InternetArchive/Search.cs
+++ b/src/Extensions/Banshee.InternetArchive/InternetArchive/Search.cs
@@ -57,11 +57,12 @@ namespace InternetArchive
         List<Sort> sorts = new List<Sort> ();
         List<Field> result_fields = new List<Field> ();
         int NumResults;
-        ResultsFormat format;
         //bool indent = false;
 
-        public IList<Field> ReturnFields { get { return result_fields; } }
-        public IList<Sort>  SortBy { get { return sorts; } }
+        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 () {
             //UserAgent = "InternetArchiveSharp";
@@ -70,12 +71,16 @@ namespace InternetArchive
 
         public Search ()
         {
-            format = ResultsFormat.Json;
             NumResults = 50;
 
-            result_fields.Add (new Field () { Id = "identifier" });
-            result_fields.Add (new Field () { Id = "title" });
-            result_fields.Add (new Field () { Id = "creator" });
+            result_fields.Add (Field.Identifier);
+            result_fields.Add (Field.Title);
+            result_fields.Add (Field.Creator);
+            result_fields.Add (Field.Publisher);
+            result_fields.Add (Field.Downloads);
+            result_fields.Add (Field.AvgRating);
+            result_fields.Add (Field.Description);
+            result_fields.Add (Field.Format);
 
             sorts.Add (new Sort () { Id = "avg_rating desc" });
         }
@@ -84,7 +89,7 @@ namespace InternetArchive
         {
             var sb = new System.Text.StringBuilder ();
 
-            sb.AppendFormat ("q={0}", "(collection%3Aaudio+OR+mediatype%3Aaudio)+AND+-mediatype%3Acollection");
+            sb.AppendFormat ("q={0}", System.Web.HttpUtility.UrlEncode (Query));//"(collection%3Aaudio+OR+mediatype%3Aaudio)+AND+-mediatype%3Acollection");
 
             foreach (var field in result_fields) {
                 sb.AppendFormat ("&fl[]={0}", System.Web.HttpUtility.UrlEncode (field.Id));
@@ -95,7 +100,7 @@ namespace InternetArchive
             }
 
             sb.AppendFormat ("&rows={0}", NumResults);
-            sb.AppendFormat ("&fmt={0}", format.Id);
+            sb.AppendFormat ("&fmt={0}", Format.Id);
             sb.Append ("&xmlsearch=Search");
 
             return sb.ToString ();
diff --git a/src/Extensions/Banshee.InternetArchive/Makefile.am b/src/Extensions/Banshee.InternetArchive/Makefile.am
index e7dd75e..67d27fd 100644
--- a/src/Extensions/Banshee.InternetArchive/Makefile.am
+++ b/src/Extensions/Banshee.InternetArchive/Makefile.am
@@ -9,6 +9,10 @@ SOURCES = \
 	InternetArchive/MediaType.cs \
 	InternetArchive/ResultsFormat.cs \
 	InternetArchive/Search.cs \
+	InternetArchive/Results.cs \
+	InternetArchive/Item.cs \
+	InternetArchive/JsonResults.cs \
+	InternetArchive/JsonItem.cs \
 	InternetArchive/Sort.cs \
 	Banshee.InternetArchive/HeaderFilters.cs \
 	Banshee.InternetArchive/Source.cs
@@ -16,4 +20,3 @@ SOURCES = \
 RESOURCES = Banshee.InternetArchive.addin.xml
 
 include $(top_srcdir)/build/build.mk
-



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