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();
            }
        }
示例#3
0
        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;
            }
        }
示例#4
0
        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;
            }
        }
示例#5
0
        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);
        }