[banshee/amazon] Refactor AmazonPane getting rid of duplicate work



commit ade934867bb2bd1ab306ac1879a09454991d2a4e
Author: Gabriel Burt <gabriel burt gmail com>
Date:   Fri May 8 18:35:44 2009 -0500

    Refactor AmazonPane getting rid of duplicate work
---
 .../Banshee.Amazon/Banshee.Amazon/AmazonPane.cs    |  139 ++++++++++----------
 1 files changed, 69 insertions(+), 70 deletions(-)

diff --git a/src/Extensions/Banshee.Amazon/Banshee.Amazon/AmazonPane.cs b/src/Extensions/Banshee.Amazon/Banshee.Amazon/AmazonPane.cs
index a9a5a63..69ee137 100644
--- a/src/Extensions/Banshee.Amazon/Banshee.Amazon/AmazonPane.cs
+++ b/src/Extensions/Banshee.Amazon/Banshee.Amazon/AmazonPane.cs
@@ -1,5 +1,6 @@
 
 using System;
+using System.Collections.Generic;
 using System.Linq;
 
 using Mono.Unix;
@@ -48,92 +49,53 @@ namespace Banshee.Amazon
         }
     }
 
-    public class AmazonRecs : HBox
+    public class AmazonItemList : TitledList
     {
-        TitledList album_box;
-        VBox album_list;
-        Gtk.ScrolledWindow album_sw;
-        Viewport album_vp;
-        
-        TitledList track_box;
-        VBox track_list;
-        Gtk.ScrolledWindow track_sw;
-        Viewport track_vp;
+        VBox item_list;
+        Viewport viewport;
+        Gtk.ScrolledWindow scrolled_window;
+        bool is_album;
+        string name_format;
 
-        public AmazonRecs ()
+        public AmazonItemList (string defaultName, string nameFormat, bool isAlbum) : base (defaultName)
         {
-            BorderWidth = 5;
+            is_album = isAlbum;
+            name_format = nameFormat;
 
-            album_box  = new TitledList ("Top Albums");
-            album_box.TitleWidthChars = 35;
-            album_list = new VBox ();
-            album_vp = new Gtk.Viewport ();
-            album_vp. ShadowType = ShadowType.None;
-            album_sw = new Gtk.ScrolledWindow ();
-            album_sw.SetPolicy (PolicyType.Never, PolicyType.Automatic);
-            album_sw.ShadowType = ShadowType.None;
-            album_vp.Add (album_box);
-            album_sw.Add (album_vp);
-            album_box.PackStart (album_list, false, false, 0);
-
-            track_box  = new TitledList ("Top Tracks");
-            track_box.TitleWidthChars = 35;
-            track_list = new VBox ();
-            track_vp = new Gtk.Viewport ();
-            track_vp. ShadowType = ShadowType.None;
-            track_sw = new Gtk.ScrolledWindow ();
-            track_sw.ShadowType = ShadowType.None;
-            track_sw.SetPolicy (PolicyType.Never, PolicyType.Automatic);
-            track_vp.Add (track_box);
-            track_sw.Add (track_vp);
-            track_box.PackStart (track_list, true, true, 0);
+            TitleWidthChars = 35;
             
-            PackStart (album_sw, true, true, 5);
-            PackStart (new VSeparator (), false, false, 0);
-            PackStart (track_sw, true, true, 5);
+            item_list = new VBox ();
+            
+            viewport = new Viewport ();
+            viewport. ShadowType = ShadowType.None;
 
-            ShowAll ();
+            scrolled_window = new Gtk.ScrolledWindow ();
+            scrolled_window.SetPolicy (PolicyType.Never, PolicyType.Automatic);
+            scrolled_window.ShadowType = ShadowType.None;
+
+            viewport.Add (item_list);
+            scrolled_window.Add (viewport);
+            PackStart (scrolled_window, true, true, 0);
         }
 
         protected override void OnStyleSet (Style previous_style)
         {
             base.OnStyleSet (previous_style);
-            album_vp.ModifyBg (StateType.Normal, Style.Base (StateType.Normal));
-            track_vp.ModifyBg (StateType.Normal, Style.Base (StateType.Normal));
+            viewport.ModifyBg (StateType.Normal, Style.Base (StateType.Normal));
         }
 
-        string last_artist;
-        public void UpdateForTrack (TrackInfo track)
+        public void Update (TrackInfo track, IEnumerable<AMZN.Item> items)
         {
-            if (track.ArtistName == last_artist)
-                return;
-
-            last_artist = track.ArtistName;
-            var albums = AmazonUtils.FindItems (track.ArtistName, true, false);
-            var tracks = AmazonUtils.FindItems (track.ArtistName, true, true);
+            while (item_list.Children.Length > 0)
+                item_list.Remove (item_list.Children[0]);
 
-            Banshee.Base.ThreadAssist.ProxyToMain (delegate {
-                while (album_list.Children.Length > 0)
-                    album_list.Remove (album_list.Children[0]);
-
-                album_box.Title = String.Format (Catalog.GetString ("Top Albums by {0}"), track.ArtistName);
-                foreach (var item in albums) {
-                    album_list.PackEnd (CreateItemWidget (item, true), false, false, 0);
-                }
-
-                while (track_list.Children.Length > 0)
-                    track_list.Remove (track_list.Children[0]);
-
-                track_box.Title = String.Format (Catalog.GetString ("Top Tracks by {0}"), track.ArtistName);
-                foreach (var item in tracks) {
-                    track_list.PackEnd (CreateItemWidget (item, false), false, false, 0);
-                }
-    
-                ShowAll ();
-            });
+            Title = String.Format (name_format, track.ArtistName);
+            foreach (var item in items) {
+                item_list.PackEnd (CreateItemWidget (item), false, false, 0);
+            }
         }
 
-        private Widget CreateItemWidget (AMZN.Item item, bool isAlbum)
+        private Widget CreateItemWidget (AMZN.Item item)
         {
             string artist = null;
             try { artist = item.ItemAttributes.Artist[0]; } catch {}
@@ -146,7 +108,7 @@ namespace Banshee.Amazon
 
             string title = item.ItemAttributes.Title;
 
-            if (isAlbum) {
+            if (is_album) {
                 string year = null;
                 try { year = item.ItemAttributes.ReleaseDate.Substring (0, 4); } catch {}
                 label.Text = year == null ? title : String.Format ("{0} ({1})", title, year);
@@ -180,4 +142,41 @@ namespace Banshee.Amazon
             return hbox;
         }
     }
+
+    public class AmazonRecs : HBox
+    {
+        AmazonItemList album_box;
+        AmazonItemList track_box;
+
+        public AmazonRecs ()
+        {
+            BorderWidth = 5;
+
+            album_box = new AmazonItemList ("Top Albums", Catalog.GetString ("Top Albums by {0}"), true);
+            track_box = new AmazonItemList ("Top Tracks", Catalog.GetString ("Top Tracks by {0}"), false);
+            
+            PackStart (album_box, true, true, 5);
+            PackStart (new VSeparator (), false, false, 0);
+            PackStart (track_box, true, true, 5);
+
+            ShowAll ();
+        }
+
+        string last_artist;
+        public void UpdateForTrack (TrackInfo track)
+        {
+            if (track.ArtistName == last_artist)
+                return;
+
+            last_artist = track.ArtistName;
+            var albums = AmazonUtils.FindItems (track.ArtistName, true, false);
+            var tracks = AmazonUtils.FindItems (track.ArtistName, true, true);
+
+            Banshee.Base.ThreadAssist.ProxyToMain (delegate {
+                album_box.Update (track, albums);
+                track_box.Update (track, tracks);
+                ShowAll ();
+            });
+        }
+    }
 }



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