[banshee: 42/61] [InternetArchive] Support fetching more results



commit 4f0d5dc1f3a7a409d277772a406fced3b321beed
Author: Gabriel Burt <gabriel burt gmail com>
Date:   Tue Oct 13 15:50:14 2009 -0700

    [InternetArchive] Support fetching more results
    
    If you scroll to the bottom of the results list, a message pops up with
    a button to let you fetch more results.

 .../Banshee.InternetArchive/SearchSource.cs        |   16 ++++++++++++----
 .../Banshee.InternetArchive/SearchView.cs          |   18 ++++++++++++++++++
 2 files changed, 30 insertions(+), 4 deletions(-)
---
diff --git a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/SearchSource.cs b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/SearchSource.cs
index 0990941..bafa503 100644
--- a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/SearchSource.cs
+++ b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/SearchSource.cs
@@ -63,6 +63,9 @@ namespace Banshee.InternetArchive
         private IA.Search search;
         private string status_text = "";
 
+        private int total_results = 0;
+        public int TotalResults { get { return total_results; } }
+
         public IA.Search Search { get { return search; } }
 
         public IListModel<IA.SearchResult> Model { get { return model; } }
@@ -109,13 +112,19 @@ namespace Banshee.InternetArchive
 
         public void Reload ()
         {
-            ThreadAssist.SpawnFromMain (ThreadedReload);
+            model.Clear ();
+            ThreadAssist.SpawnFromMain (ThreadedFetch);
+        }
+
+        public void FetchMore ()
+        {
+            ThreadAssist.SpawnFromMain (ThreadedFetch);
         }
 
-        private void ThreadedReload ()
+        private void ThreadedFetch ()
         {
             bool success = false;
-            int total_results = 0;
+            total_results = 0;
             status_text = "";
             Exception err = null;
 
@@ -136,7 +145,6 @@ namespace Banshee.InternetArchive
 
             if (results != null) {
                 try {
-                    model.Clear ();
 
                     foreach (var result in results) {
                         model.Add (result);
diff --git a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/SearchView.cs b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/SearchView.cs
index 1638e26..bdef305 100644
--- a/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/SearchView.cs
+++ b/src/Extensions/Banshee.InternetArchive/Banshee.InternetArchive/SearchView.cs
@@ -82,6 +82,24 @@ namespace Banshee.InternetArchive
             var sw = new Gtk.ScrolledWindow ();
             sw.Child = list_view;
 
+            var last_hid_more = DateTime.MinValue;
+            string more_text = Catalog.GetString ("Fetch more results from the Internet Archive?");
+            list_view.Vadjustment.ValueChanged += (o, a) => {
+                var adj = list_view.Vadjustment;
+                if ((DateTime.Now - last_hid_more).TotalSeconds > 2 && adj.Value >= adj.Upper - adj.PageSize) {
+                    if (source.TotalResults > source.Model.Count) {
+                        source.SetStatus (more_text, true, false, "gtk-question");
+                        source.CurrentMessage.AddAction (new MessageAction (Catalog.GetString ("Fetch More"), delegate { source.FetchMore (); }));
+                    }
+                }
+            };
+
+            source.MessageNotify += (o, a) => {
+                if (source.CurrentMessage != null && source.CurrentMessage.Text == more_text && source.CurrentMessage.IsHidden) {
+                    last_hid_more = DateTime.Now;
+                }
+            };
+
             PackStart (sw, true, true, 0);
             ShowAll ();
         }



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