[banshee/amazon] Refactor AmazonPane getting rid of duplicate work
- From: Gabriel Burt <gburt src gnome org>
- To: svn-commits-list gnome org
- Subject: [banshee/amazon] Refactor AmazonPane getting rid of duplicate work
- Date: Fri, 8 May 2009 19:40:15 -0400 (EDT)
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]