[banshee: 1/27] [lastfm] First step of the split



commit 255931fa010f013f500e8c4ecae18e0888a3a6c3
Author: Bertrand Lorentz <bertrand lorentz gmail com>
Date:   Sat Jan 23 17:38:14 2010 +0100

    [lastfm] First step of the split
    
    Created a new Banshee.LastfmStreaming extension that depends on
    Banshee.Lastfm. Moved all Last.fm radio bits to it.
    
    It compiles, but probably a lot of stuff is broken for now.

 Banshee.sln                                        |    6 +
 build/build.environment.mk                         |    2 +
 configure.ac                                       |    1 +
 .../Banshee.Lastfm.Audioscrobbler/Queue.cs         |    4 +-
 .../Banshee.Lastfm.Radio/ILastfmInfo.cs            |   10 +
 .../Banshee.Lastfm.Radio/LastfmActions.cs          |  154 -------------
 .../Banshee.Lastfm.Radio/LastfmSource.cs           |   27 +--
 .../Banshee.Lastfm/Banshee.Lastfm.addin.xml        |    4 +-
 .../Banshee.Lastfm/Banshee.Lastfm.csproj           |    5 +-
 src/Extensions/Banshee.Lastfm/Makefile.am          |    5 +-
 .../LastfmStreamingActions.cs                      |  241 ++++++++++++++++++++
 .../LastfmStreamingService.cs                      |   76 ++++++
 .../LastfmTrackInfo.cs                             |    5 +-
 .../StationEditor.cs                               |    3 +-
 .../StationSource.cs                               |    7 +-
 .../Banshee.LastfmStreaming.Radio}/StationType.cs  |    2 +-
 .../Banshee.LastfmStreaming.addin.xml              |   24 ++
 .../Banshee.LastfmStreaming.csproj                 |   84 +++++++
 src/Extensions/Banshee.LastfmStreaming/Makefile.am |   17 ++
 src/Extensions/Makefile.am                         |    1 +
 20 files changed, 481 insertions(+), 197 deletions(-)
---
diff --git a/Banshee.sln b/Banshee.sln
index b7372a4..c227a74 100644
--- a/Banshee.sln
+++ b/Banshee.sln
@@ -121,6 +121,7 @@ EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Banshee.Audiobook", "src\Extensions\Banshee.Audiobook\Banshee.Audiobook.csproj", "{05148D80-6C5C-4BE5-9BD7-89613753D027}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Banshee.YouTube", "src\Extensions\Banshee.YouTube\Banshee.YouTube.csproj", "{387DC336-45F9-4263-9606-2881907D2105}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Banshee.LastfmStreaming", "src\Extensions\Banshee.LastfmStreaming\Banshee.LastfmStreaming.csproj", "{66617494-94CB-43E8-877C-A586F5A6F4EC}"
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{4F47D6F1-4047-4A89-AE85-3AE5EF9F2961}"
 	ProjectSection(SolutionItems) = postProject
@@ -257,6 +258,10 @@ Global
 		{6171E5DE-5B36-4AE4-8707-F6BEE0AD945B}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{6171E5DE-5B36-4AE4-8707-F6BEE0AD945B}.Windows|Any CPU.ActiveCfg = Windows|Any CPU
 		{6171E5DE-5B36-4AE4-8707-F6BEE0AD945B}.Windows|Any CPU.Build.0 = Windows|Any CPU
+		{66617494-94CB-43E8-877C-A586F5A6F4EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{66617494-94CB-43E8-877C-A586F5A6F4EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{66617494-94CB-43E8-877C-A586F5A6F4EC}.Windows|Any CPU.ActiveCfg = Debug|Any CPU
+		{66617494-94CB-43E8-877C-A586F5A6F4EC}.Windows|Any CPU.Build.0 = Debug|Any CPU
 		{6B73E278-23FB-4A59-9B44-AB7F0212B936}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{6B73E278-23FB-4A59-9B44-AB7F0212B936}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{6B73E278-23FB-4A59-9B44-AB7F0212B936}.Release|Any CPU.ActiveCfg = Debug|Any CPU
@@ -435,6 +440,7 @@ Global
 		{10A5B2EE-C9F0-4B7B-B79B-87B7DA9C1DC1} = {4DD1DE63-F20B-4FC3-8FDA-F0BDF4183722}
 		{05148D80-6C5C-4BE5-9BD7-89613753D027} = {4DD1DE63-F20B-4FC3-8FDA-F0BDF4183722}
 		{387DC336-45F9-4263-9606-2881907D2105} = {4DD1DE63-F20B-4FC3-8FDA-F0BDF4183722}
+		{66617494-94CB-43E8-877C-A586F5A6F4EC} = {4DD1DE63-F20B-4FC3-8FDA-F0BDF4183722}
 		{95374549-9553-4C1E-9D89-667755F90E12} = {4F47D6F1-4047-4A89-AE85-3AE5EF9F2961}
 		{C856EFD8-E812-4E61-8B76-E3583D94C233} = {4F47D6F1-4047-4A89-AE85-3AE5EF9F2961}
 		{C1F63FC5-4B96-48B2-B7F7-5B33FCC4F2A2} = {4F47D6F1-4047-4A89-AE85-3AE5EF9F2961}
diff --git a/build/build.environment.mk b/build/build.environment.mk
index d7c4c8e..18eb1ba 100644
--- a/build/build.environment.mk
+++ b/build/build.environment.mk
@@ -136,6 +136,8 @@ LINK_EXTENSION_PLAYQUEUE = -r:$(DIR_BIN)/Banshee.PlayQueue.dll
 LINK_EXTENSION_PLAYQUEUE_DEPS = $(REF_EXTENSION_PLAYQUEUE) \
 	$(LINK_EXTENSION_PLAYQUEUE)
 REF_EXTENSION_LASTFM = $(LINK_BANSHEE_THICKCLIENT_DEPS) $(LINK_MONO_MEDIA) $(LINK_LASTFM) $(LINK_LASTFM_GUI)
+LINK_EXTENSION_LASTFM = -r:$(DIR_BIN)/Banshee.Lastfm.dll
+REF_EXTENSION_LASTFM_STREAMING = $(LINK_BANSHEE_THICKCLIENT_DEPS) $(LINK_MONO_MEDIA) $(LINK_LASTFM) $(LINK_LASTFM_GUI) $(LINK_EXTENSION_LASTFM)
 REF_EXTENSION_NOWPLAYING = $(LINK_BANSHEE_THICKCLIENT_DEPS)
 LINK_EXTENSION_NOWPLAYING = -r:$(DIR_BIN)/Banshee.NowPlaying.dll
 LINK_EXTENSION_NOWPLAYING_DEPS = $(REF_EXTENSION_NOWPLAYING) \
diff --git a/configure.ac b/configure.ac
index 77766e0..ee54f42 100644
--- a/configure.ac
+++ b/configure.ac
@@ -310,6 +310,7 @@ src/Extensions/Banshee.FileSystemQueue/Makefile
 src/Extensions/Banshee.InternetArchive/Makefile
 src/Extensions/Banshee.InternetRadio/Makefile
 src/Extensions/Banshee.Lastfm/Makefile
+src/Extensions/Banshee.LastfmStreaming/Makefile
 src/Extensions/Banshee.LibraryWatcher/Makefile
 src/Extensions/Banshee.MiniMode/Makefile
 src/Extensions/Banshee.MeeGo/Makefile
diff --git a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Audioscrobbler/Queue.cs b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Audioscrobbler/Queue.cs
index 462c602..c147b65 100644
--- a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Audioscrobbler/Queue.cs
+++ b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Audioscrobbler/Queue.cs
@@ -71,8 +71,8 @@ namespace Banshee.Lastfm.Audioscrobbler
                 this.musicbrainzid = "";
 
                 // set trackauth value, otherwise empty string is default
-                if (track is LastfmTrackInfo) {
-                    this.track_auth = (track as LastfmTrackInfo).TrackAuth;
+                if (track is ILastfmInfo) {
+                    this.track_auth = (track as ILastfmInfo).TrackAuth;
                 }
             }
 
diff --git a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/ILastfmInfo.cs b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/ILastfmInfo.cs
new file mode 100644
index 0000000..fa5374c
--- /dev/null
+++ b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/ILastfmInfo.cs
@@ -0,0 +1,10 @@
+
+using System;
+
+namespace Banshee.Lastfm.Radio
+{
+    public interface ILastfmInfo
+    {
+        string TrackAuth { get; }
+    }
+}
diff --git a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmActions.cs b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmActions.cs
index 7f82b72..f325a4f 100644
--- a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmActions.cs
+++ b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmActions.cs
@@ -60,33 +60,14 @@ namespace Banshee.Lastfm.Radio
         {
             this.lastfm = lastfm;
 
-            AddImportant (
-                new ActionEntry (
-                    "LastfmAddAction", Stock.Add,
-                     Catalog.GetString ("_Add Station..."),
-                     null, Catalog.GetString ("Add a new Last.fm radio station"), OnAddStation
-                )
-            );
-
             Add (new ActionEntry [] {
                 new ActionEntry (
-                    "RefreshSourceAction", Stock.Refresh,
-                     Catalog.GetString ("Refresh"), null,
-                     String.Empty, OnRefreshSource
-                ),
-
-                new ActionEntry (
                     "LastfmConnectAction", null,
                      Catalog.GetString ("Connect"),
                      null, String.Empty, OnConnect
                 )
             });
 
-            // Translators: {0} is a type of Last.fm station, eg "Fans of" or "Similar to".
-            string listen_to = Catalog.GetString ("Listen to {0} Station");
-            // Translators: {0} is a type of Last.fm station, eg "Fans of" or "Similar to".
-            string listen_to_long = Catalog.GetString ("Listen to the Last.fm {0} station for this artist");
-
             // Artist actions
             Add (new ActionEntry [] {
                 new ActionEntry ("LastfmArtistVisitLastfmAction", "audioscrobbler",
@@ -105,16 +86,6 @@ namespace Banshee.Lastfm.Radio
                     Catalog.GetString ("View Artist's Videos"), null,
                     Catalog.GetString ("Find videos by this artist"), OnArtistViewVideos),
 
-                new ActionEntry ("LastfmArtistPlayFanRadioAction", StationType.Fan.IconName,
-                    String.Format (listen_to, String.Format ("'{0}'", Catalog.GetString ("Fans of"))), null,
-                    String.Format (listen_to_long, String.Format ("'{0}'", Catalog.GetString ("Fans of"))),
-                    OnArtistPlayFanRadio),
-
-                new ActionEntry ("LastfmArtistPlaySimilarRadioAction", StationType.Similar.IconName,
-                    String.Format (listen_to, String.Format ("'{0}'", Catalog.GetString ("Similar to"))), null,
-                    String.Format (listen_to_long, String.Format ("'{0}'", Catalog.GetString ("Similar to"))),
-                    OnArtistPlaySimilarRadio),
-
                 new ActionEntry ("LastfmArtistRecommendAction", "",
                     Catalog.GetString ("Recommend to"), null,
                     Catalog.GetString ("Recommend this artist to someone"), OnArtistRecommend)
@@ -138,16 +109,6 @@ namespace Banshee.Lastfm.Radio
 
             // Track actions
             Add (new ActionEntry [] {
-                new ActionEntry (
-                    "LastfmLoveAction", null,
-                    Catalog.GetString ("Love Track"), null,
-                    Catalog.GetString ("Mark current track as loved"), OnLoved),
-
-                new ActionEntry (
-                    "LastfmHateAction", null,
-                    Catalog.GetString ("Ban Track"), null,
-                    Catalog.GetString ("Mark current track as banned"), OnHated),
-
                 new ActionEntry ("LastfmTrackVisitLastfmAction", "audioscrobbler",
                     Catalog.GetString ("View on Last.fm"), null,
                     Catalog.GetString ("View this track's Last.fm page"), OnTrackVisitLastfm),
@@ -157,18 +118,10 @@ namespace Banshee.Lastfm.Radio
                     Catalog.GetString ("Recommend this track to someone"), OnTrackRecommend)
             });
 
-            this["LastfmLoveAction"].IconName = "face-smile";
-            this["LastfmHateAction"].IconName = "face-sad";
-
-            this["LastfmLoveAction"].IsImportant = true;
-            this["LastfmHateAction"].IsImportant = true;
-
             actions_id = Actions.UIManager.AddUiFromResource ("GlobalUI.xml");
             Actions.AddActionGroup (this);
 
             lastfm.Connection.StateChanged += HandleConnectionStateChanged;
-            Actions.SourceActions ["SourcePropertiesAction"].Activated += OnSourceProperties;
-            ServiceManager.PlaybackController.SourceChanged += OnPlaybackSourceChanged;
             ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent,
                 PlayerEvent.StartOfStream |
                 PlayerEvent.EndOfStream);
@@ -180,8 +133,6 @@ namespace Banshee.Lastfm.Radio
             Actions.UIManager.RemoveUi (actions_id);
             Actions.RemoveActionGroup (this);
             lastfm.Connection.StateChanged -= HandleConnectionStateChanged;
-            Actions.SourceActions ["SourcePropertiesAction"].Activated -= OnSourceProperties;
-            ServiceManager.PlaybackController.SourceChanged -= OnPlaybackSourceChanged;
             ServiceManager.PlayerEngine.DisconnectEvent (OnPlayerEvent);
             base.Dispose ();
         }
@@ -199,42 +150,6 @@ namespace Banshee.Lastfm.Radio
             lastfm.Connection.Connect ();
         }
 
-        private void OnSourceProperties (object o, EventArgs args)
-        {
-            Source source = Actions.SourceActions.ActionSource;
-            if (source is StationSource) {
-                StationEditor editor = new StationEditor (lastfm, source as StationSource);
-                editor.RunDialog ();
-            }
-        }
-
-        private void OnRefreshSource (object o, EventArgs args)
-        {
-            StationSource source = Actions.SourceActions.ActionSource as StationSource;
-            if (source != null) {
-                source.Refresh();
-            }
-        }
-
-        private void OnLoved (object sender, EventArgs args)
-        {
-            LastfmTrackInfo track = ServiceManager.PlayerEngine.CurrentTrack as LastfmTrackInfo;
-            if (track == null)
-                return;
-
-            track.Love ();
-        }
-
-        private void OnHated (object sender, EventArgs args)
-        {
-            LastfmTrackInfo track = ServiceManager.PlayerEngine.CurrentTrack as LastfmTrackInfo;
-            if (track == null)
-                return;
-
-            track.Ban ();
-            ServiceManager.PlaybackController.Next ();
-        }
-
         private void OnArtistVisitLastfm (object sender, EventArgs args)
         {
             Browser.Open (String.Format (
@@ -292,48 +207,6 @@ namespace Banshee.Lastfm.Radio
         {
         }*/
 
-        private void OnArtistPlayFanRadio (object sender, EventArgs args)
-        {
-            StationSource fan_radio = null;
-            foreach (StationSource station in lastfm.Children) {
-                if (station.Type == StationType.Fan && station.Arg == CurrentArtist) {
-                    fan_radio = station;
-                    break;
-                }
-            }
-
-            if (fan_radio == null) {
-                fan_radio = new StationSource (lastfm,
-                    String.Format (Catalog.GetString ("Fans of {0}"), CurrentArtist),
-                    "Fan", CurrentArtist
-                );
-                lastfm.AddChildSource (fan_radio);
-            }
-
-            ServiceManager.SourceManager.SetActiveSource (fan_radio);
-        }
-
-        private void OnArtistPlaySimilarRadio (object sender, EventArgs args)
-        {
-            StationSource similar_radio = null;
-            foreach (StationSource station in lastfm.Children) {
-                if (station.Type == StationType.Similar && station.Arg == CurrentArtist) {
-                    similar_radio = station;
-                    break;
-                }
-            }
-
-            if (similar_radio == null) {
-                similar_radio = new StationSource (lastfm,
-                    String.Format (Catalog.GetString ("Similar to {0}"), CurrentArtist),
-                    "Similar", CurrentArtist
-                );
-                lastfm.AddChildSource (similar_radio);
-            }
-
-            ServiceManager.SourceManager.SetActiveSource (similar_radio);
-        }
-
         private void OnArtistRecommend (object sender, EventArgs args)
         {
         }
@@ -396,36 +269,9 @@ namespace Banshee.Lastfm.Radio
                 updating = true;
             }
 
-            bool have_user = (lastfm.Account != null && lastfm.Account.UserName != null);
-            this["LastfmAddAction"].Sensitive = have_user;
-            this["LastfmAddAction"].ShortLabel = Catalog.GetString ("_Add Station");
             this["LastfmConnectAction"].Visible = lastfm.Connection.State == ConnectionState.Disconnected;
 
-            TrackInfo current_track = ServiceManager.PlayerEngine.CurrentTrack;
-            this["LastfmLoveAction"].Visible = current_track is LastfmTrackInfo;
-            this["LastfmHateAction"].Visible = current_track is LastfmTrackInfo;
-
             updating = false;
         }
-
-        private uint track_actions_id;
-        private bool was_lastfm = false;
-        private void OnPlaybackSourceChanged (object o, EventArgs args)
-        {
-            if (Actions == null || Actions.PlaybackActions == null || ServiceManager.PlaybackController == null)
-                return;
-
-            UpdateActions ();
-
-            bool is_lastfm = ServiceManager.PlaybackController.Source is StationSource;
-            Actions.PlaybackActions["PreviousAction"].Sensitive = !is_lastfm;
-
-            if (is_lastfm && !was_lastfm)
-                track_actions_id = Actions.UIManager.AddUiFromResource ("LastfmTrackActions.xml");
-            else if (!is_lastfm && was_lastfm)
-                Actions.UIManager.RemoveUi (track_actions_id);
-
-            was_lastfm = is_lastfm;
-        }
     }
 }
diff --git a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmSource.cs b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmSource.cs
index 1e636b4..f0037f5 100644
--- a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmSource.cs
+++ b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmSource.cs
@@ -115,13 +115,10 @@ namespace Banshee.Lastfm.Radio
             InstallPreferences ();
 
             ServiceManager.SourceManager.AddSource (this);
-
-            ServiceManager.Get<DBusCommandService> ().ArgumentPushed += OnCommandLineArgument;
         }
 
         public void Dispose ()
         {
-            ServiceManager.Get<DBusCommandService> ().ArgumentPushed -= OnCommandLineArgument;
             Connection.StateChanged -= HandleConnectionStateChanged;
             ServiceManager.Get<Network> ().StateChanged -= HandleNetworkStateChanged;
             Connection.Dispose ();
@@ -133,26 +130,15 @@ namespace Banshee.Lastfm.Radio
             account = null;
         }
 
-        private void OnCommandLineArgument (string uri, object value, bool isFile)
-        {
-            if (!isFile || String.IsNullOrEmpty (uri)) {
-                return;
-            }
-
-            // Handle lastfm:// URIs
-            if (uri.StartsWith ("lastfm://")) {
-                StationSource.CreateFromUrl (this, uri);
-            }
-        }
-
         // Order by the playCount of a station, then by inverted name
         public class PlayCountComparer : IComparer<Source>
         {
             public int Compare (Source sa, Source sb)
             {
-                StationSource a = sa as StationSource;
+                /*StationSource a = sa as StationSource;
                 StationSource b = sb as StationSource;
-                return a.PlayCount.CompareTo (b.PlayCount);
+                return a.PlayCount.CompareTo (b.PlayCount);*/
+                return 1;
             }
         }
 
@@ -180,13 +166,6 @@ namespace Banshee.Lastfm.Radio
                 last_username = username;
                 last_was_subscriber = Account.Subscriber;
                 LastfmSource.LastUserSchema.Set (last_username);
-                ClearChildSources ();
-                PauseSorting ();
-                foreach (StationSource child in StationSource.LoadAll (this, Account.UserName)) {
-                    AddChildSource (child);
-                }
-                ResumeSorting ();
-                SortChildSources ();
             }
         }
 
diff --git a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.addin.xml b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.addin.xml
index bf919fa..b4af3f1 100644
--- a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.addin.xml
+++ b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.addin.xml
@@ -4,9 +4,9 @@
     version="1.0"
     compatVersion="1.0"
     copyright="© 2008 Novell Inc. Licensed under the MIT X11 license."
-    name="Last.fm Radio and Scrobbling"
+    name="Last.fm Scrobbling"
     category="Online Sources"
-    description="Last.fm streaming radio, scrobbling, and context pane recommendations."
+    description="Last.fm scrobbling, and context pane recommendations."
     author="Gabriel Burt, Alexander Hixon, Chris Toshok, Fredrik Hedberg, Aaron Bockover, Lukas Lipka"
     url="http://banshee-project.org/";
     defaultEnabled="true">
diff --git a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.csproj b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.csproj
index 602311f..ffa8057 100644
--- a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.csproj
+++ b/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.csproj
@@ -90,16 +90,13 @@
     <Compile Include="Banshee.Lastfm.Radio\LastfmActions.cs" />
     <Compile Include="Banshee.Lastfm.Radio\LastfmSource.cs" />
     <Compile Include="Banshee.Lastfm.Radio\LastfmSourceContents.cs" />
-    <Compile Include="Banshee.Lastfm.Radio\LastfmTrackInfo.cs" />
-    <Compile Include="Banshee.Lastfm.Radio\StationEditor.cs" />
-    <Compile Include="Banshee.Lastfm.Radio\StationSource.cs" />
-    <Compile Include="Banshee.Lastfm.Radio\StationType.cs" />
     <Compile Include="Banshee.Lastfm.Audioscrobbler\AudioscrobblerService.cs" />
     <Compile Include="Banshee.Lastfm.Audioscrobbler\Queue.cs" />
     <Compile Include="Banshee.Lastfm.Radio\LastfmColumnController.cs" />
     <Compile Include="Banshee.Lastfm.Recommendations\ContextPage.cs" />
     <Compile Include="Banshee.Lastfm.Recommendations\RecommendationPane.cs" />
     <Compile Include="Banshee.Lastfm.Recommendations\SimilarArtistTile.cs" />
+    <Compile Include="Banshee.Lastfm.Radio\ILastfmInfo.cs" />
   </ItemGroup>
   <ItemGroup>
     <EmbeddedResource Include="Banshee.Lastfm.addin.xml">
diff --git a/src/Extensions/Banshee.Lastfm/Makefile.am b/src/Extensions/Banshee.Lastfm/Makefile.am
index 5352929..8584585 100644
--- a/src/Extensions/Banshee.Lastfm/Makefile.am
+++ b/src/Extensions/Banshee.Lastfm/Makefile.am
@@ -6,14 +6,11 @@ INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
 SOURCES =  \
 	Banshee.Lastfm.Audioscrobbler/AudioscrobblerService.cs \
 	Banshee.Lastfm.Audioscrobbler/Queue.cs \
+	Banshee.Lastfm.Radio/ILastfmInfo.cs \
 	Banshee.Lastfm.Radio/LastfmActions.cs \
 	Banshee.Lastfm.Radio/LastfmColumnController.cs \
 	Banshee.Lastfm.Radio/LastfmSource.cs \
 	Banshee.Lastfm.Radio/LastfmSourceContents.cs \
-	Banshee.Lastfm.Radio/LastfmTrackInfo.cs \
-	Banshee.Lastfm.Radio/StationEditor.cs \
-	Banshee.Lastfm.Radio/StationSource.cs \
-	Banshee.Lastfm.Radio/StationType.cs \
 	Banshee.Lastfm.Recommendations/ContextPage.cs \
 	Banshee.Lastfm.Recommendations/RecommendationPane.cs \
 	Banshee.Lastfm.Recommendations/SimilarArtistTile.cs
diff --git a/src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming.Radio/LastfmStreamingActions.cs b/src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming.Radio/LastfmStreamingActions.cs
new file mode 100644
index 0000000..0e59cef
--- /dev/null
+++ b/src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming.Radio/LastfmStreamingActions.cs
@@ -0,0 +1,241 @@
+
+using System;
+using Gtk;
+
+using Mono.Unix;
+
+using Banshee.Collection;
+using Banshee.Gui;
+using Banshee.Lastfm.Radio;
+using Banshee.MediaEngine;
+using Banshee.ServiceStack;
+using Banshee.Sources;
+
+using Lastfm;
+
+namespace Banshee.LastfmStreaming.Radio
+{
+    public class LastfmStreamingActions : BansheeActionGroup
+    {
+        private LastfmSource lastfm;
+        private uint actions_id;
+        
+        public LastfmStreamingActions (LastfmSource lastfm) : base (ServiceManager.Get<InterfaceActionService> (), "LastfmStreaming")
+        {
+            this.lastfm = lastfm;
+
+            AddImportant (
+                new ActionEntry (
+                    "LastfmAddAction", Stock.Add,
+                     Catalog.GetString ("_Add Station..."),
+                     null, Catalog.GetString ("Add a new Last.fm radio station"), OnAddStation
+                )
+            );
+
+            Add (new ActionEntry [] {
+                new ActionEntry (
+                    "RefreshSourceAction", Stock.Refresh,
+                     Catalog.GetString ("Refresh"), null,
+                     String.Empty, OnRefreshSource
+                )
+            });
+
+            // Translators: {0} is a type of Last.fm station, eg "Fans of" or "Similar to".
+            string listen_to = Catalog.GetString ("Listen to {0} Station");
+            // Translators: {0} is a type of Last.fm station, eg "Fans of" or "Similar to".
+            string listen_to_long = Catalog.GetString ("Listen to the Last.fm {0} station for this artist");
+
+            // Artist actions
+            Add (new ActionEntry [] {
+                new ActionEntry ("LastfmArtistPlayFanRadioAction", StationType.Fan.IconName,
+                    String.Format (listen_to, String.Format ("'{0}'", Catalog.GetString ("Fans of"))), null,
+                    String.Format (listen_to_long, String.Format ("'{0}'", Catalog.GetString ("Fans of"))),
+                    OnArtistPlayFanRadio),
+
+                new ActionEntry ("LastfmArtistPlaySimilarRadioAction", StationType.Similar.IconName,
+                    String.Format (listen_to, String.Format ("'{0}'", Catalog.GetString ("Similar to"))), null,
+                    String.Format (listen_to_long, String.Format ("'{0}'", Catalog.GetString ("Similar to"))),
+                    OnArtistPlaySimilarRadio)
+            });
+
+            // Track actions
+            Add (new ActionEntry [] {
+                new ActionEntry (
+                    "LastfmLoveAction", null,
+                    Catalog.GetString ("Love Track"), null,
+                    Catalog.GetString ("Mark current track as loved"), OnLoved),
+
+                new ActionEntry (
+                    "LastfmHateAction", null,
+                    Catalog.GetString ("Ban Track"), null,
+                    Catalog.GetString ("Mark current track as banned"), OnHated)
+            });
+
+            this["LastfmLoveAction"].IconName = "face-smile";
+            this["LastfmHateAction"].IconName = "face-sad";
+
+            this["LastfmLoveAction"].IsImportant = true;
+            this["LastfmHateAction"].IsImportant = true;
+
+            actions_id = Actions.UIManager.AddUiFromResource ("GlobalUI.xml");
+            Actions.AddActionGroup (this);
+
+            lastfm.Connection.StateChanged += HandleConnectionStateChanged;
+            Actions.SourceActions ["SourcePropertiesAction"].Activated += OnSourceProperties;
+            ServiceManager.PlaybackController.SourceChanged += OnPlaybackSourceChanged;
+            ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent,
+                PlayerEvent.StartOfStream |
+                PlayerEvent.EndOfStream);
+            UpdateActions ();
+        }
+
+        public override void Dispose ()
+        {
+            Actions.UIManager.RemoveUi (actions_id);
+            Actions.RemoveActionGroup (this);
+            lastfm.Connection.StateChanged -= HandleConnectionStateChanged;
+            Actions.SourceActions ["SourcePropertiesAction"].Activated -= OnSourceProperties;
+            ServiceManager.PlaybackController.SourceChanged -= OnPlaybackSourceChanged;
+            ServiceManager.PlayerEngine.DisconnectEvent (OnPlayerEvent);
+            base.Dispose ();
+        }
+
+#region Action Handlers
+
+        private void OnAddStation (object sender, EventArgs args)
+        {
+            StationEditor ed = new StationEditor (lastfm);
+            ed.Window.ShowAll ();
+            ed.RunDialog ();
+        }
+
+        private void OnSourceProperties (object o, EventArgs args)
+        {
+            Source source = Actions.SourceActions.ActionSource;
+            if (source is StationSource) {
+                StationEditor editor = new StationEditor (lastfm, source as StationSource);
+                editor.RunDialog ();
+            }
+        }
+
+        private void OnRefreshSource (object o, EventArgs args)
+        {
+            StationSource source = Actions.SourceActions.ActionSource as StationSource;
+            if (source != null) {
+                source.Refresh();
+            }
+        }
+
+        private void OnLoved (object sender, EventArgs args)
+        {
+            LastfmTrackInfo track = ServiceManager.PlayerEngine.CurrentTrack as LastfmTrackInfo;
+            if (track == null)
+                return;
+
+            track.Love ();
+        }
+
+        private void OnHated (object sender, EventArgs args)
+        {
+            LastfmTrackInfo track = ServiceManager.PlayerEngine.CurrentTrack as LastfmTrackInfo;
+            if (track == null)
+                return;
+
+            track.Ban ();
+            ServiceManager.PlaybackController.Next ();
+        }
+
+        private void OnArtistPlayFanRadio (object sender, EventArgs args)
+        {
+            StationSource fan_radio = null;
+            foreach (StationSource station in lastfm.Children) {
+                if (station.Type == StationType.Fan && station.Arg == lastfm.Actions.CurrentArtist) {
+                    fan_radio = station;
+                    break;
+                }
+            }
+
+            if (fan_radio == null) {
+                fan_radio = new StationSource (lastfm,
+                    String.Format (Catalog.GetString ("Fans of {0}"), lastfm.Actions.CurrentArtist),
+                    "Fan", lastfm.Actions.CurrentArtist
+                );
+                lastfm.AddChildSource (fan_radio);
+            }
+
+            ServiceManager.SourceManager.SetActiveSource (fan_radio);
+        }
+
+        private void OnArtistPlaySimilarRadio (object sender, EventArgs args)
+        {
+            StationSource similar_radio = null;
+            foreach (StationSource station in lastfm.Children) {
+                if (station.Type == StationType.Similar && station.Arg == lastfm.Actions.CurrentArtist) {
+                    similar_radio = station;
+                    break;
+                }
+            }
+
+            if (similar_radio == null) {
+                similar_radio = new StationSource (lastfm,
+                    String.Format (Catalog.GetString ("Similar to {0}"), lastfm.Actions.CurrentArtist),
+                    "Similar", lastfm.Actions.CurrentArtist
+                );
+                lastfm.AddChildSource (similar_radio);
+            }
+
+            ServiceManager.SourceManager.SetActiveSource (similar_radio);
+        }
+
+#endregion
+        private void OnPlayerEvent (PlayerEventArgs args)
+        {
+            UpdateActions ();
+        }
+
+        private void HandleConnectionStateChanged (object sender, ConnectionStateChangedArgs args)
+        {
+            UpdateActions ();
+        }
+
+        private bool updating = false;
+        private void UpdateActions ()
+        {
+            lock (this) {
+                if (updating)
+                    return;
+                updating = true;
+            }
+
+            bool have_user = (lastfm.Account != null && lastfm.Account.UserName != null);
+            this["LastfmAddAction"].Sensitive = have_user;
+            this["LastfmAddAction"].ShortLabel = Catalog.GetString ("_Add Station");
+
+            TrackInfo current_track = ServiceManager.PlayerEngine.CurrentTrack;
+            this["LastfmLoveAction"].Visible = current_track is LastfmTrackInfo;
+            this["LastfmHateAction"].Visible = current_track is LastfmTrackInfo;
+
+            updating = false;
+        }
+
+        private uint track_actions_id;
+        private bool was_lastfm = false;
+        private void OnPlaybackSourceChanged (object o, EventArgs args)
+        {
+            if (Actions == null || Actions.PlaybackActions == null || ServiceManager.PlaybackController == null)
+                return;
+
+            UpdateActions ();
+
+            bool is_lastfm = ServiceManager.PlaybackController.Source is StationSource;
+            Actions.PlaybackActions["PreviousAction"].Sensitive = !is_lastfm;
+
+            if (is_lastfm && !was_lastfm)
+                track_actions_id = Actions.UIManager.AddUiFromResource ("LastfmTrackActions.xml");
+            else if (!is_lastfm && was_lastfm)
+                Actions.UIManager.RemoveUi (track_actions_id);
+
+            was_lastfm = is_lastfm;
+        }
+    }
+}
diff --git a/src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming.Radio/LastfmStreamingService.cs b/src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming.Radio/LastfmStreamingService.cs
new file mode 100644
index 0000000..d2b7c9b
--- /dev/null
+++ b/src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming.Radio/LastfmStreamingService.cs
@@ -0,0 +1,76 @@
+
+using System;
+
+using Banshee.Lastfm.Radio;
+using Banshee.ServiceStack;
+using Banshee.Sources;
+
+namespace Banshee.LastfmStreaming.Radio
+{
+    public class LastfmStreamingService : IExtensionService, IDisposable
+    {
+        private LastfmSource lastfm_source = null;
+
+        public LastfmStreamingService ()
+        {
+        }
+        
+        void IExtensionService.Initialize ()
+        {
+            ServiceManager.Get<DBusCommandService> ().ArgumentPushed += OnCommandLineArgument;
+            
+            if (!ServiceStartup ()) {
+                ServiceManager.SourceManager.SourceAdded += OnSourceAdded;
+            }
+        }
+        
+        public void Dispose ()
+        {
+            ServiceManager.Get<DBusCommandService> ().ArgumentPushed -= OnCommandLineArgument;
+        }
+
+        private void OnSourceAdded (SourceAddedArgs args)
+        {
+            if (ServiceStartup ()) {
+                ServiceManager.SourceManager.SourceAdded -= OnSourceAdded;
+            }
+        }
+
+        private bool ServiceStartup ()
+        {
+            foreach (var src in ServiceManager.SourceManager.FindSources<LastfmSource> ()) {
+                lastfm_source = src;
+                break;
+            }
+            
+            if (lastfm_source == null) {
+                return false;
+            }
+            
+            lastfm_source.ClearChildSources ();
+            //lastfm_source.PauseSorting ();
+            foreach (StationSource child in StationSource.LoadAll (lastfm_source, lastfm_source.Account.UserName)) {
+                lastfm_source.AddChildSource (child);
+            }
+            //lastfm_source.ResumeSorting ();
+            lastfm_source.SortChildSources ();
+            return true;
+        }
+
+        private void OnCommandLineArgument (string uri, object value, bool isFile)
+        {
+            if (!isFile || String.IsNullOrEmpty (uri)) {
+                return;
+            }
+
+            // Handle lastfm:// URIs
+            if (uri.StartsWith ("lastfm://")) {
+                StationSource.CreateFromUrl (lastfm_source, uri);
+            }
+        }
+        
+        string IService.ServiceName {
+            get { return "LastfmStreamingService"; }
+        }
+    }
+}
diff --git a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmTrackInfo.cs b/src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming.Radio/LastfmTrackInfo.cs
similarity index 96%
rename from src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmTrackInfo.cs
rename to src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming.Radio/LastfmTrackInfo.cs
index c780a1b..545b7a2 100644
--- a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/LastfmTrackInfo.cs
+++ b/src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming.Radio/LastfmTrackInfo.cs
@@ -37,11 +37,12 @@ using Hyena;
 
 using Banshee.Base;
 using Banshee.Collection;
+using Banshee.Lastfm.Radio;
 using Media.Playlists.Xspf;
 
-namespace Banshee.Lastfm.Radio
+namespace Banshee.LastfmStreaming.Radio
 {
-    public class LastfmTrackInfo : TrackInfo
+    public class LastfmTrackInfo : TrackInfo, ILastfmInfo
     {
         private StationSource station;
         private Track track;
diff --git a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationEditor.cs b/src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming.Radio/StationEditor.cs
similarity index 98%
rename from src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationEditor.cs
rename to src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming.Radio/StationEditor.cs
index 68e81b8..3d14a25 100644
--- a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationEditor.cs
+++ b/src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming.Radio/StationEditor.cs
@@ -39,8 +39,9 @@ using Banshee.Database;
 
 using Banshee.Widgets;
 using Banshee.Gui.Dialogs;
+using Banshee.Lastfm.Radio;
 
-namespace Banshee.Lastfm.Radio
+namespace Banshee.LastfmStreaming.Radio
 {
     public class StationEditor : BansheeDialog
     {
diff --git a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationSource.cs b/src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming.Radio/StationSource.cs
similarity index 98%
rename from src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationSource.cs
rename to src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming.Radio/StationSource.cs
index f584dd3..979d212 100644
--- a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationSource.cs
+++ b/src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming.Radio/StationSource.cs
@@ -49,8 +49,9 @@ using Banshee.MediaEngine;
 using Banshee.Collection;
 using Banshee.ServiceStack;
 using Banshee.PlaybackController;
+using Banshee.Lastfm.Radio;
 
-namespace Banshee.Lastfm.Radio
+namespace Banshee.LastfmStreaming.Radio
 {
     public class StationSource : Source, ITrackModelSource, IUnmapableSource, IDisposable, IBasicPlaybackController
     {
@@ -254,13 +255,13 @@ namespace Banshee.Lastfm.Radio
         public override void SetStatus (string message, bool error)
         {
             base.SetStatus (message, error);
-            LastfmSource.SetStatus (status_message, lastfm, error, ConnectionState.Connected);
+            //LastfmSource.SetStatus (status_message, error, ConnectionState.Connected);
         }
 
         public void SetStatus (string message, bool error, ConnectionState state)
         {
             base.SetStatus (message, error);
-            LastfmSource.SetStatus (status_message, lastfm, error, state);
+            //LastfmSource.SetStatus (status_message, error, state);
         }
 
         /*public override void ShowPropertiesDialog ()
diff --git a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationType.cs b/src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming.Radio/StationType.cs
similarity index 99%
rename from src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationType.cs
rename to src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming.Radio/StationType.cs
index 6e6f466..5d05b54 100644
--- a/src/Extensions/Banshee.Lastfm/Banshee.Lastfm.Radio/StationType.cs
+++ b/src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming.Radio/StationType.cs
@@ -30,7 +30,7 @@ using System;
 using System.Collections.Generic;
 using Mono.Unix;
 
-namespace Banshee.Lastfm.Radio
+namespace Banshee.LastfmStreaming.Radio
 {
     public class StationType
     {
diff --git a/src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming.addin.xml b/src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming.addin.xml
new file mode 100644
index 0000000..c266a05
--- /dev/null
+++ b/src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming.addin.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Addin 
+    id="Banshee.LastFmStreaming"
+    version="1.0"
+    compatVersion="1.0"
+    copyright="© 2010 Novell Inc. Licensed under the MIT X11 license."
+    name="Last.fm Radio"
+    category="Online Sources"
+    description="Last.fm streaming radio."
+    author="Gabriel Burt, Alexander Hixon, Chris Toshok, Fredrik Hedberg, Aaron Bockover, Lukas Lipka, Bertrand Lorentz"
+    url="http://banshee-project.org/";
+    defaultEnabled="true">
+
+  <Dependencies>
+    <Addin id="Banshee.Services" version="1.0"/>
+    <Addin id="Banshee.ThickClient" version="1.0"/>
+    <Addin id="Banshee.Lastfm" version="1.0"/>
+  </Dependencies>
+
+  <Extension path="/Banshee/ServiceManager/Service">
+    <Source class="Banshee.LastfmStreaming.Radio.LastfmStreamingService"/>
+  </Extension>
+  
+</Addin>
diff --git a/src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming.csproj b/src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming.csproj
new file mode 100644
index 0000000..a80c6cf
--- /dev/null
+++ b/src/Extensions/Banshee.LastfmStreaming/Banshee.LastfmStreaming.csproj
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"; ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.21022</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{66617494-94CB-43E8-877C-A586F5A6F4EC}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <RootNamespace>Banshee.LastfmStreaming</RootNamespace>
+    <ReleaseVersion>1.3</ReleaseVersion>
+    <AssemblyName>Banshee.LastfmStreaming</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\bin</OutputPath>
+    <DefineConstants>DEBUG</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CustomCommands>
+      <CustomCommands>
+        <Command type="Build" command="make" workingdir="${SolutionDir}" />
+        <Command type="Execute" command="make run" workingdir="${SolutionDir}" />
+      </CustomCommands>
+    </CustomCommands>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>none</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\bin</OutputPath>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Compile Include="Banshee.LastfmStreaming.Radio\StationEditor.cs" />
+    <Compile Include="Banshee.LastfmStreaming.Radio\StationSource.cs" />
+    <Compile Include="Banshee.LastfmStreaming.Radio\StationType.cs" />
+    <Compile Include="Banshee.LastfmStreaming.Radio\LastfmTrackInfo.cs" />
+    <Compile Include="Banshee.LastfmStreaming.Radio\LastfmStreamingActions.cs" />
+    <Compile Include="Banshee.LastfmStreaming.Radio\LastfmStreamingService.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Banshee.LastfmStreaming.addin.xml">
+      <LogicalName>Banshee.LastfmStreaming.addin.xml</LogicalName>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <ProjectExtensions>
+    <MonoDevelop>
+      <Properties>
+        <MonoDevelop.Autotools.MakefileInfo IntegrationEnabled="true" RelativeMakefileName="Makefile.am" IsAutotoolsProject="true" RelativeConfigureInPath="../../..">
+          <BuildFilesVar Sync="true" Name="SOURCES" />
+          <DeployFilesVar />
+          <ResourcesVar Sync="true" Name="RESOURCES" />
+          <OthersVar />
+          <GacRefVar Name="LINK" Prefix="-r:" />
+          <AsmRefVar Name="LINK" Prefix="-r:" />
+          <ProjectRefVar Name="LINK" Prefix="-r:" />
+        </MonoDevelop.Autotools.MakefileInfo>
+      </Properties>
+    </MonoDevelop>
+  </ProjectExtensions>
+  <ItemGroup>
+    <ProjectReference Include="..\Banshee.Lastfm\Banshee.Lastfm.csproj">
+      <Project>{02FD8195-9796-4AF5-A9D2-D310721963F4}</Project>
+      <Name>Banshee.Lastfm</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\Core\Banshee.Services\Banshee.Services.csproj">
+      <Project>{B28354F0-BA87-44E8-989F-B864A3C7C09F}</Project>
+      <Name>Banshee.Services</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\Libraries\Lastfm\Lastfm.csproj">
+      <Project>{C1F63FC5-4B96-48B2-B7F7-5B33FCC4F2A2}</Project>
+      <Name>Lastfm</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\Core\Banshee.Core\Banshee.Core.csproj">
+      <Project>{2ADB831A-A050-47D0-B6B9-9C19D60233BB}</Project>
+      <Name>Banshee.Core</Name>
+    </ProjectReference>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/src/Extensions/Banshee.LastfmStreaming/Makefile.am b/src/Extensions/Banshee.LastfmStreaming/Makefile.am
new file mode 100644
index 0000000..487ebe5
--- /dev/null
+++ b/src/Extensions/Banshee.LastfmStreaming/Makefile.am
@@ -0,0 +1,17 @@
+ASSEMBLY = Banshee.LastfmStreaming
+TARGET = library
+LINK = $(REF_EXTENSION_LASTFM_STREAMING)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES =  \
+	Banshee.LastfmStreaming.Radio/LastfmStreamingActions.cs \
+	Banshee.LastfmStreaming.Radio/LastfmStreamingService.cs \
+	Banshee.LastfmStreaming.Radio/LastfmTrackInfo.cs \
+	Banshee.LastfmStreaming.Radio/StationEditor.cs \
+	Banshee.LastfmStreaming.Radio/StationSource.cs \
+	Banshee.LastfmStreaming.Radio/StationType.cs
+
+RESOURCES = Banshee.LastfmStreaming.addin.xml
+
+include $(top_srcdir)/build/build.mk
+
diff --git a/src/Extensions/Makefile.am b/src/Extensions/Makefile.am
index 23ed398..b4ff658 100644
--- a/src/Extensions/Makefile.am
+++ b/src/Extensions/Makefile.am
@@ -11,6 +11,7 @@ SUBDIRS = \
 	Banshee.InternetArchive \
 	Banshee.InternetRadio \
 	Banshee.Lastfm \
+	Banshee.LastfmStreaming \
 	Banshee.LibraryWatcher \
 	Banshee.MiniMode \
 	Banshee.MultimediaKeys \



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