banshee r3291 - in trunk/banshee: . src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio src/Libraries/Lastfm src/Libraries/Lastfm/Lastfm.Data



Author: gburt
Date: Thu Feb 21 01:32:33 2008
New Revision: 3291
URL: http://svn.gnome.org/viewvc/banshee?rev=3291&view=rev

Log:
2008-02-20  Gabriel Burt  <gabriel burt gmail com>

	* src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmSourceContents.cs:
	If possible, set album art on the lists of tracks.  Unfortunately the
	Last.fm feed for recently loved songs doesn't include the album name, so
	no cover art there.

	* src/Libraries/Lastfm/Lastfm.Data/DataEntry.cs: Add new Entry types for
	Artist data.

	* src/Libraries/Lastfm/Makefile.am:
	* src/Libraries/Lastfm/Lastfm.Data/LastfmArtistData.cs: Expose
	artist-related data.


Added:
   trunk/banshee/src/Libraries/Lastfm/Lastfm.Data/LastfmArtistData.cs
Modified:
   trunk/banshee/ChangeLog
   trunk/banshee/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmSourceContents.cs
   trunk/banshee/src/Libraries/Lastfm/Lastfm.Data/DataEntry.cs
   trunk/banshee/src/Libraries/Lastfm/Makefile.am

Modified: trunk/banshee/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmSourceContents.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmSourceContents.cs	(original)
+++ trunk/banshee/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmSourceContents.cs	Thu Feb 21 01:32:33 2008
@@ -8,13 +8,14 @@
 using Banshee.Widgets;
 using Banshee.Sources;
 using Banshee.ServiceStack;
+using Banshee.Collection;
+using Banshee.Collection.Gui;
 using Banshee.Gui;
 using Banshee.Sources.Gui;
 using Banshee.Web;
 
 using Lastfm;
 using Lastfm.Data;
-//using ConnectionState = Lastfm.ConnectionState;
 
 namespace Banshee.Lastfm.Radio
 {
@@ -140,6 +141,8 @@
 
         protected class NumberedList : TitledList
         {
+            protected ArtworkManager artwork_manager = ServiceManager.Get<ArtworkManager> ();
+
             protected LastfmSource lastfm;
             protected NumberedTileView tile_view;
             protected Dictionary<object, RecentTrack> widget_track_map = new Dictionary<object, RecentTrack> ();
@@ -162,6 +165,18 @@
                     tile.PrimaryText = track.Name;
                     tile.SecondaryText = track.Artist;
                     tile.ButtonPressEvent += OnTileActivated;
+
+                    // Unfortunately the recently loved list doesn't include what album the song is on
+                    if (!String.IsNullOrEmpty (track.Album)) {
+                        AlbumInfo album = new AlbumInfo (track.Album);
+                        album.ArtistName = track.Artist;
+
+                        Gdk.Pixbuf pb = artwork_manager == null ? null : artwork_manager.LookupScale (album.ArtworkId, 40);
+                        if (pb != null) {
+                            tile.Pixbuf = pb;
+                        }
+                    }
+
                     tile_view.AddNumberedWidget (tile);
                     tile.Show ();
                 }

Modified: trunk/banshee/src/Libraries/Lastfm/Lastfm.Data/DataEntry.cs
==============================================================================
--- trunk/banshee/src/Libraries/Lastfm/Lastfm.Data/DataEntry.cs	(original)
+++ trunk/banshee/src/Libraries/Lastfm/Lastfm.Data/DataEntry.cs	Thu Feb 21 01:32:33 2008
@@ -184,4 +184,26 @@
             }
         }
     }
+
+    // Artist entries
+    public class SimilarArtist : NamedEntry
+    {
+        public double Match             { get { return Get<double>   ("match"); } }
+        public int MatchAsInt           { get { return (int) Math.Round (Match); } }
+    }
+
+    public class ArtistFan : Friend
+    {
+        public int Weight               { get { return Get<int>      ("weight"); } }
+    }
+
+    public class ArtistTopTrack : NamedEntry
+    {
+        public int Reach                { get { return Get<int>      ("reach"); } }
+    }
+
+    public class ArtistTopAlbum : NamedEntry
+    {
+        public int Reach                { get { return Get<int>      ("reach"); } }
+    }
 }

Added: trunk/banshee/src/Libraries/Lastfm/Lastfm.Data/LastfmArtistData.cs
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Libraries/Lastfm/Lastfm.Data/LastfmArtistData.cs	Thu Feb 21 01:32:33 2008
@@ -0,0 +1,96 @@
+//
+// LastfmArtistData.cs
+//
+// Authors:
+//   Gabriel Burt <gburt novell com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// 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.Collections.Generic;
+
+namespace Lastfm.Data
+{
+    public class LastfmArtistData
+    {
+        protected Dictionary <string, object> cache = new Dictionary <string, object> ();
+
+        protected string name;
+        public string Name {
+            get { return name; }
+        }
+
+        public LastfmArtistData (string name)
+        {
+            this.name = name;
+        }
+
+        protected LastfmData<T> Get<T> (string fragment) where T : DataEntry
+        {
+            return Get<T> (fragment, null);
+        }
+
+        protected LastfmData<T> Get<T> (string fragment, string xpath) where T : DataEntry
+        {
+            if (cache.ContainsKey (fragment)) {
+                return (LastfmData<T>) cache [fragment];
+            }
+
+            LastfmData<T> obj = new LastfmData<T> (String.Format ("artist/{0}/{1}", name, fragment), xpath);
+            cache [fragment] = obj;
+            return obj;
+        }
+
+#region Public Properties
+
+        public LastfmData<SimilarArtist> SimilarArtists {
+            get { return Get<SimilarArtist> ("similar.xml"); }
+        }
+
+        // ?showtracks=1
+        public LastfmData<ArtistFan> Fans {
+            get { return Get<ArtistFan> ("fans.xml"); }
+        }
+
+        public LastfmData<ArtistTopTrack> TopTracks {
+            get { return Get<ArtistTopTrack> ("toptracks.xml"); }
+        }
+
+        public LastfmData<ArtistTopAlbum> TopAlbums {
+            get { return Get<ArtistTopAlbum> ("topalbums.xml"); }
+        }
+
+        public LastfmData<TopTag> TopTags {
+            get { return Get<TopTag> ("toptags.xml"); }
+        }
+
+        public LastfmData<EventEntry> CurrentEvents {
+            get { return Get<EventEntry> ("events.rss"); }
+        }
+
+#endregion
+
+    }
+}
+

Modified: trunk/banshee/src/Libraries/Lastfm/Makefile.am
==============================================================================
--- trunk/banshee/src/Libraries/Lastfm/Makefile.am	(original)
+++ trunk/banshee/src/Libraries/Lastfm/Makefile.am	Thu Feb 21 01:32:33 2008
@@ -10,6 +10,7 @@
 	Lastfm.Data/DataEntry.cs \
 	Lastfm.Data/DataEntryCollection.cs \
 	Lastfm.Data/LastfmData.cs \
+	Lastfm.Data/LastfmArtistData.cs \
 	Lastfm.Data/LastfmUserData.cs 
 
 include $(top_srcdir)/build/build.mk



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