using System; using Mono.Unix; using Mono.WebServer; using Banshee.Base; namespace Banshee.Plugins.Xsp { public class XspPlugin : Banshee.Plugins.Plugin { protected override string ConfigurationName { get { return "WebServer"; } } public override string DisplayName { get { return "XSP Web Server"; } } public override string Description { get { return Catalog.GetString ( "A sample web server running within banshee." ); } } public override string [] Authors { get { return new string [] { "Brian Nickel" }; } } private ApplicationServer server; protected override void PluginInitialize() { Console.WriteLine ("Initializing XSP Plugin"); XSPWebSource source = new XSPWebSource (System.Net.IPAddress.Any, 8080); server = new ApplicationServer (source); server.AddApplicationsFromCommandLine ("/:/home/brian/.config/banshee/plugins/xsp"); server.GetApplicationForPath (null, -1, "/", true).AppHost.Domain.SetData ("bansheeQueries", new XspBansheeQueries ()); server.Start (true); } protected override void PluginDispose () { Console.WriteLine ("Disposing XSP Plugin"); server.Stop (); } } } public class XspBansheeQueries : MarshalByRefObject { public bool Playing { get {return PlayerEngineCore.CurrentTrack != null;} } public TimeSpan NowPlayingDuration { get {return Playing ? PlayerEngineCore.CurrentTrack.Duration : TimeSpan.Zero;} } public string NowPlayingArtist { get {return Playing ? PlayerEngineCore.CurrentTrack.DisplayArtist : "";} } public string NowPlayingAlbum { get {return Playing ? PlayerEngineCore.CurrentTrack.Album : "";} } public string NowPlayingTitle { get {return Playing ? PlayerEngineCore.CurrentTrack.DisplayTitle : "";} } public void NextTrack () { Globals.ActionManager["NextAction"].Activate(); } } public static class PluginModuleEntry { public static Type [] GetTypes() { return new Type [] { typeof(Banshee.Plugins.Xsp.XspPlugin) }; } }