[banshee/amazon] Clean up Amazon cruft, improve pane UI



commit 038e024767eab0200d78b277104d01a772ea4ae3
Author: Gabriel Burt <gabriel burt gmail com>
Date:   Fri May 8 16:34:51 2009 -0500

    Clean up Amazon cruft, improve pane UI
---
 .../Banshee.Amazon/Banshee.Amazon/AmazonPane.cs    |  125 +++++++++-----------
 .../Banshee.Amazon/Banshee.Amazon/AmazonUtils.cs   |    4 +-
 2 files changed, 57 insertions(+), 72 deletions(-)

diff --git a/src/Extensions/Banshee.Amazon/Banshee.Amazon/AmazonPane.cs b/src/Extensions/Banshee.Amazon/Banshee.Amazon/AmazonPane.cs
index 73805e1..c811633 100644
--- a/src/Extensions/Banshee.Amazon/Banshee.Amazon/AmazonPane.cs
+++ b/src/Extensions/Banshee.Amazon/Banshee.Amazon/AmazonPane.cs
@@ -14,6 +14,9 @@ using Banshee.Collection;
 using Banshee.ServiceStack;
 using AMZN = Amazon.ECS.Model;
 
+// Note: As of 2009-05-08, the Amazon API doesn't let you add mp3 tracks or albums to the cart
+// See http://developer.amazonwebservices.com/connect/thread.jspa?messageID=121497&#121497
+
 namespace Banshee.Amazon
 {
     public class AmazonPane : ContextPanePage
@@ -47,34 +50,42 @@ namespace Banshee.Amazon
 
     public class AmazonRecs : HBox
     {
-        AMZN.Cart cart;
-
         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;
 
         public AmazonRecs ()
         {
+            BorderWidth = 5;
+
             album_box  = new TitledList ("Top Albums");
             album_box.TitleWidthChars = 35;
-            album_box.SizeAllocated += OnSideSizeAllocated;
             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.AddWithViewport (album_box);
+            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.SizeAllocated += OnSideSizeAllocated;
             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_sw.AddWithViewport (track_box);
+            track_vp.Add (track_box);
+            track_sw.Add (track_vp);
             track_box.PackStart (track_list, true, true, 0);
             
             PackStart (album_sw, true, true, 5);
@@ -84,16 +95,11 @@ namespace Banshee.Amazon
             ShowAll ();
         }
 
-        private void OnSideSizeAllocated (object o, SizeAllocatedArgs args)
-        {
-            //SetSizeRequest (-1, args.Allocation.Height + (Allocation.Height - args.Allocation.Height));
-        }
-
         protected override void OnStyleSet (Style previous_style)
         {
             base.OnStyleSet (previous_style);
-            album_sw.ModifyBg (StateType.Normal, Style.Base (StateType.Normal));
-            track_sw.ModifyBg (StateType.Normal, Style.Base (StateType.Normal));
+            album_vp.ModifyBg (StateType.Normal, Style.Base (StateType.Normal));
+            track_vp.ModifyBg (StateType.Normal, Style.Base (StateType.Normal));
         }
 
         string last_artist;
@@ -105,7 +111,6 @@ namespace Banshee.Amazon
             last_artist = track.ArtistName;
             var albums = AmazonUtils.FindItems (track.ArtistName, true, false);
             var tracks = AmazonUtils.FindItems (track.ArtistName, true, true);
-            Hyena.Log.DebugFormat ("Got amazon items for {0}", track.ArtistName);
 
             Banshee.Base.ThreadAssist.ProxyToMain (delegate {
                 while (album_list.Children.Length > 0)
@@ -113,8 +118,7 @@ namespace Banshee.Amazon
 
                 album_box.Title = String.Format (Catalog.GetString ("Top Albums by {0}"), track.ArtistName);
                 foreach (var item in albums) {
-                    Console.WriteLine ("Got item {0}", item.ItemAttributes.Title);
-                    album_list.PackEnd (CreateItemWidget (item), false, false, 0);
+                    album_list.PackEnd (CreateItemWidget (item, true), false, false, 0);
                 }
 
                 while (track_list.Children.Length > 0)
@@ -122,79 +126,58 @@ namespace Banshee.Amazon
 
                 track_box.Title = String.Format (Catalog.GetString ("Top Tracks by {0}"), track.ArtistName);
                 foreach (var item in tracks) {
-                    Console.WriteLine ("Got item {0}", item.ItemAttributes.Title);
-                    track_list.PackEnd (CreateItemWidget (item), false, false, 0);
+                    track_list.PackEnd (CreateItemWidget (item, false), false, false, 0);
                 }
     
                 ShowAll ();
             });
         }
 
-        private Widget CreateItemWidget (AMZN.Item item)
+        private Widget CreateItemWidget (AMZN.Item item, bool isAlbum)
         {
-            var label = new Label ();
-            label.Xalign = 0;
-            label.Ellipsize = Pango.EllipsizeMode.End;
-            label.Markup = String.Format ("{0} ({1})", item.ItemAttributes.Title, item.OfferSummary.LowestNewPrice.FormattedPrice);
+            string artist = null;
+            try { artist = item.ItemAttributes.Artist[0]; } catch {}
+            if (artist == null) try { artist = item.ItemAttributes.Author[0]; } catch {}
 
-            //var play_btn = new Button (new Image (Banshee.Gui.IconThemeUtils.LoadIcon ("media-playback-start", 16))) { Relief = ReliefStyle.None };
-            //var add_btn = new Button (new Image (Banshee.Gui.IconThemeUtils.LoadIcon (Stock.Add, 16))) { Relief = ReliefStyle.None };
+            var label = new Label () {
+                Xalign = 0,
+                Ellipsize = Pango.EllipsizeMode.End
+            };
 
-            var hbox = new HBox ();
-            hbox.Spacing = 5;
-            hbox.PackStart (label, true, true, 0);
-            //hbox.PackStart (add_btn, false, false, 0);
-            //hbox.PackStart (play_btn, false, false, 0);
+            string title = item.ItemAttributes.Title;
 
-            var widget = new MenuButton (hbox, CreateMenu (item), true);
-            widget.Name = item.ItemAttributes.Title;
-            widget.CanFocus = true;
+            if (isAlbum) {
+                string year = null;
+                try { year = item.ItemAttributes.ReleaseDate.Substring (0, 4); } catch {}
+                label.Text = year == null ? title : String.Format ("{0} ({1})", title, year);
+            } else {
+                label.Text = title;
+            }
             
-            return widget;
-        }
+            // Price
+            var price = new Label (item.OfferSummary.LowestNewPrice.FormattedPrice);
+            price.Xalign = 1.0f;
 
-        private Menu CreateMenu (AMZN.Item item)
-        {
-            //asin = "B001RTP3YQ";
-            //asin = "B0012EJVIA"; // mp3 album
-            string asin = item.ASIN;
-            Menu menu = new Menu ();
-
-            var goto_details = new ImageMenuItem (Catalog.GetString ("Buy on Amazon..."));
-            goto_details.Image = new Image (Stock.JumpTo, IconSize.Menu);
-            goto_details.Activated += (o, a) => {
-                Banshee.Web.Browser.Open (item.DetailPageURL, true);
-            };
-
-            var queue_preview = new ImageMenuItem (Catalog.GetString ("Play Preview"));
-            queue_preview.Image = new Image (Banshee.Gui.IconThemeUtils.LoadIcon ("media-playback-start", (int)IconSize.Menu));
-            queue_preview.Activated += (o, a) => {
+            var play = new Button (new Image (Banshee.Gui.IconThemeUtils.LoadIcon ("media-playback-start", (int)IconSize.Button))) { Relief = ReliefStyle.None };
+            play.TooltipText = Catalog.GetString ("Play Preview");
+            play.Clicked += (o, a) => {
                 new AmazonPreviewTrackInfo (item).Play ();
             };
 
-            var add_to_cart = new ImageMenuItem (Catalog.GetString ("Add to Cart"));
-            add_to_cart.Image = new Image (Stock.Add, IconSize.Menu);
-            add_to_cart.Activated += (o, a) => {
-                Console.WriteLine ("Got add to cart for asin {0}", asin);
-                if (cart == null) {
-                    cart = AmazonUtils.CreateCart (asin);
-                } else {
-                    AmazonUtils.AddToCart (cart, asin);
-                }
-
-                Console.WriteLine ("Have cart purchaseURL = {0}", cart.PurchaseURL);
+            var go = new Button (new Image (Stock.JumpTo, IconSize.Button)) { Relief = ReliefStyle.None };
+            go.TooltipText = Catalog.GetString ("Buy on Amazon...");
+            go.Clicked += (o, a) => {
+                Banshee.Web.Browser.Open (item.DetailPageURL, true);
             };
 
-            menu.Append (goto_details);
-            menu.Append (queue_preview);
+            var hbox = new HBox ();
+            hbox.Spacing = 2;
+            hbox.PackStart (label, true, true, 0);
+            hbox.PackStart (price, false, false, 0);
+            hbox.PackStart (play, false, false, 0);
+            hbox.PackStart (go, false, false, 0);
 
-            // Unfortunately, the Amazon API doesn't let you add mp3 tracks or albums to the cart
-            // See http://developer.amazonwebservices.com/connect/thread.jspa?messageID=121497&#121497
-            if (item.ItemAttributes.Binding != "MP3 Download") {
-                menu.Append (add_to_cart);
-            }
-            menu.ShowAll ();
-            return menu;
+            return hbox;
         }
     }
 }
diff --git a/src/Extensions/Banshee.Amazon/Banshee.Amazon/AmazonUtils.cs b/src/Extensions/Banshee.Amazon/Banshee.Amazon/AmazonUtils.cs
index 4f0ffa3..883931c 100644
--- a/src/Extensions/Banshee.Amazon/Banshee.Amazon/AmazonUtils.cs
+++ b/src/Extensions/Banshee.Amazon/Banshee.Amazon/AmazonUtils.cs
@@ -47,10 +47,12 @@ namespace Banshee.Amazon
             request.WithSort ("salesrank");
             //request.WithSort ("relevancerank");
             request.WithResponseGroup ("Large", "VariationOffers", "Offers", "ItemAttributes", "Tags", "Images", "Reviews", "AlternateVersions", "Tracks", "Variations", "Similarities");
+            //request.WithResponseGroup ("Offers", "ItemAttributes", "Images", "Reviews", "Tracks", "Variations", "Similarities");
+            //request.WithResponseGroup ("Offers", "ItemAttributes", "Images", "Reviews", "Tracks", "Variations");
 
             try {
                 ItemSearchResponse response = service.ItemSearch (request);
-                System.IO.File.WriteAllText (String.Format ("amazon-{0}-search.xml", artist), response.ToXML ());
+                System.IO.File.WriteAllText (String.Format ("amazon-{0}-{1}-search.xml", artist, returnTracks ? "tracks" : "albums"), response.ToXML ());
                 return response.Items[0].Item;
             } catch (AmazonECSException e) {
                 Hyena.Log.Exception (e);



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