public BansheeNowPlayingProvider() { if (Application.CommandLine.Contains("disable-dbus")) return; Bus sessionBus = Bus.Session; // FIXME: We check that the name exists because otherwise calling // GetObject() will start banshee, but this won't work if Banshee // is started after Synapse. What's the equivilent of the pydbus // bus.add_signal_receiver() method? if (sessionBus.NameHasOwner("org.bansheeproject.Banshee")) { m_Banshee = sessionBus.GetObject<IPlayerEngineService>("org.bansheeproject.Banshee", new ObjectPath("/org/bansheeproject/Banshee/PlayerEngine")); m_Banshee.EventChanged += HandleEventChanged; UpdateTrackInfo(); } }
public BansheeNowPlayingProvider() { if (Application.CommandLine.Contains("disable-dbus")) { return; } Bus sessionBus = Bus.Session; // FIXME: We check that the name exists because otherwise calling // GetObject() will start banshee, but this won't work if Banshee // is started after Synapse. What's the equivilent of the pydbus // bus.add_signal_receiver() method? if (sessionBus.NameHasOwner("org.bansheeproject.Banshee")) { m_Banshee = sessionBus.GetObject <IPlayerEngineService>("org.bansheeproject.Banshee", new ObjectPath("/org/bansheeproject/Banshee/PlayerEngine")); m_Banshee.EventChanged += HandleEventChanged; UpdateTrackInfo(); } }
private static void HandleQuery (IPlayerEngineService player, IDictionary<string, object> track, string query) { // Translate legacy query arguments into new ones switch (query) { case "title": query = "name"; break; case "duration": query = "length"; break; case "uri": query = "URI"; break; } switch (query) { case "all": if (track != null) { foreach (KeyValuePair<string, object> field in track) { DisplayTrackField (field.Key, field.Value); } } HandleQuery (player, track, "position"); HandleQuery (player, track, "volume"); HandleQuery (player, track, "current-state"); HandleQuery (player, track, "last-state"); HandleQuery (player, track, "can-pause"); HandleQuery (player, track, "can-seek"); break; case "position": DisplayTrackField ("position", TimeSpan.FromMilliseconds (player.Position).TotalSeconds); break; case "volume": DisplayTrackField ("volume", player.Volume); break; case "current-state": DisplayTrackField ("current-state", player.CurrentState); break; case "last-state": DisplayTrackField ("last-state", player.LastState); break; case "can-pause": DisplayTrackField ("can-pause", player.CanPause); break; case "can-seek": DisplayTrackField ("can-seek", player.CanSeek); break; case "URI": case "artist": case "album": case "name": case "length": case "track-number": case "track-count": case "disc": case "year": case "rating": case "score": case "bit-rate": if (track == null) { Error ("not playing"); break; } DisplayTrackField (query, track.ContainsKey (query) ? track[query] : ""); break; default: Error ("'{0}' field unknown", query); break; } }
private static void HandleQuery(IPlayerEngineService player, IDictionary <string, object> track, string query) { // Translate legacy query arguments into new ones switch (query) { case "title": query = "name"; break; case "duration": query = "length"; break; case "uri": query = "URI"; break; } switch (query) { case "all": if (track != null) { foreach (KeyValuePair <string, object> field in track) { DisplayTrackField(field.Key, field.Value); } } HandleQuery(player, track, "position"); HandleQuery(player, track, "volume"); HandleQuery(player, track, "current-state"); HandleQuery(player, track, "last-state"); HandleQuery(player, track, "can-pause"); HandleQuery(player, track, "can-seek"); break; case "position": DisplayTrackField("position", TimeSpan.FromMilliseconds(player.Position).TotalSeconds); break; case "volume": DisplayTrackField("volume", player.Volume); break; case "current-state": DisplayTrackField("current-state", player.CurrentState); break; case "last-state": DisplayTrackField("last-state", player.LastState); break; case "can-pause": DisplayTrackField("can-pause", player.CanPause); break; case "can-seek": DisplayTrackField("can-seek", player.CanSeek); break; case "URI": case "artist": case "album": case "name": case "length": case "track-number": case "track-count": case "disc": case "year": case "rating": case "score": case "bit-rate": if (track == null) { Error("not playing"); break; } DisplayTrackField(query, track.ContainsKey(query) ? track[query] : ""); break; default: Error("'{0}' field unknown", query); break; } }
private static bool HandlePlayerCommands() { IPlayerEngineService player = DBusServiceManager.FindInstance <IPlayerEngineService> ("/PlayerEngine"); IPlaybackControllerService controller = DBusServiceManager.FindInstance <IPlaybackControllerService> ("/PlaybackController"); IDictionary <string, object> track = null; int handled_count = 0; foreach (KeyValuePair <string, string> arg in ApplicationContext.CommandLine.Arguments) { handled_count++; switch (arg.Key) { // For the player engine case "play": player.Play(); break; case "pause": player.Pause(); break; case "stop": player.Close(); break; case "toggle-playing": player.TogglePlaying(); break; // For the playback controller case "first": controller.First(); break; case "next": controller.Next(ParseBool(arg.Value, "restart")); break; case "previous": controller.Previous(ParseBool(arg.Value, "restart")); break; case "stop-when-finished": controller.StopWhenFinished = !ParseBool(arg.Value); break; case "set-position": player.Position = (uint)Math.Round(Double.Parse(arg.Value) * 1000); break; case "set-volume": player.Volume = UInt16.Parse(arg.Value); break; default: if (arg.Key.StartsWith("query-")) { if (track == null) { try { track = player.CurrentTrack; } catch { } } HandleQuery(player, track, arg.Key.Substring(6)); } else { command.PushArgument(arg.Key, arg.Value ?? String.Empty); handled_count--; } break; } } return(handled_count <= 0); }