示例#1
0
        public void Init()
        {
            var server = IPCServer.GetInstance();

            server.Connected       += IPCServer_Connected;
            server.MessageReceived += IPCServer_MessageReceived;
            server.Init();

            var playback = PlaybackManager.GetInstance();

            playback.PlaybackStateChanged += PlaybackManager_PlaybackStateChanged;
            playback.PlaybackTick         += Playback_PlaybackTick;
            playback.VolumeChanged        += PlaybackManager_VolumeChanged;
        }
示例#2
0
        private void PlaybackManager_PlaybackStateChanged(object sender, EventArgs e)
        {
            var app      = (App)Application.Current;
            var playback = PlaybackManager.GetInstance();

            // construct message
            var factory = new IPCMessageFactory();
            var message = factory.Create("playbackStateChanged", out XmlNode messageNode);

            // <hasTrack />
            var hasTrackNode = message.CreateElement("hasTrack");

            hasTrackNode.InnerText = playback.Track == null ? "false" : "true";
            messageNode.AppendChild(hasTrackNode);

            if (playback.Track != null)
            {
                // <title />
                var titleNode = message.CreateElement("title");
                titleNode.InnerText = playback.Track.Title + " - " + playback.Track.Artist.Title;
                messageNode.AppendChild(titleNode);

                // <artwork />
                var artworkNode = message.CreateElement("artwork");
                artworkNode.InnerText = app.plexClient.GetPhotoTranscodeUrl(playback.Track.Thumb, 50, 50).ToString();
                messageNode.AppendChild(artworkNode);

                // <duration />
                var durationNode = message.CreateElement("duration");
                durationNode.InnerText = playback.Track.Duration.ToString();
                messageNode.AppendChild(durationNode);

                // <position />
                var positionNode = message.CreateElement("position");
                positionNode.InnerText = playback.Position.ToString();
                messageNode.AppendChild(positionNode);

                // <playing />
                var playingNode = message.CreateElement("playing");
                playingNode.InnerText = playback.PlaybackState == NAudio.Wave.PlaybackState.Playing ? "true" : "false";
                messageNode.AppendChild(playingNode);
            }

            // send to client
            var server = IPCServer.GetInstance();

            server.Send(message);
        }
示例#3
0
        private void PlaybackManager_VolumeChanged(object sender, EventArgs e)
        {
            var playback = PlaybackManager.GetInstance();

            // construct message
            var factory = new IPCMessageFactory();
            var message = factory.Create("volumeChanged", out XmlNode messageNode);

            // <volume />
            var volumeNode = message.CreateElement("volume");

            volumeNode.InnerText = ((int)Math.Floor(playback.Volume * 100)).ToString();
            messageNode.AppendChild(volumeNode);

            // send to client
            var server = IPCServer.GetInstance();

            server.Send(message);
        }
示例#4
0
        private void Playback_PlaybackTick(object sender, EventArgs e)
        {
            var playback = PlaybackManager.GetInstance();

            // construct message
            var factory = new IPCMessageFactory();
            var message = factory.Create("positionChanged", out XmlNode messageNode);

            // <position />
            var positionNode = message.CreateElement("position");

            positionNode.InnerText = playback.Position.ToString();
            messageNode.AppendChild(positionNode);

            // send to client
            var server = IPCServer.GetInstance();

            server.Send(message);
        }