Example #1
0
        internal async Task GetSpotifyStatus_WithIdleSpotifyProcess_ReturnsNotPlaying()
        {
            const string windowTitle = Constants.SPOTIFY;
            var          spotify     = new Process {
                Id = 4, MainWindowTitle = windowTitle, ProcessName = Constants.SPOTIFY
            };

            IProcess[] processes = { spotify };

            _processManagerMock.Setup(x => x.GetProcesses()).Returns(processes);
            _processManagerMock.Setup(x => x.GetProcessById(It.IsAny <int>())).Returns(spotify);
            var spotifyProcess = new SpotifyProcess(_mainAudioSessionMock.Object, _processManagerMock.Object);

            var spotifyStatus = await spotifyProcess.GetSpotifyStatus();

            Assert.IsType <SpotifyStatus>(spotifyStatus);
            var track = Assert.IsType <Track>(spotifyStatus.CurrentTrack);

            Assert.Equal(windowTitle, track.Artist);
            Assert.Equal(windowTitle, track.ToString());
            Assert.Empty(track.ToTitleString());
            Assert.False(track.Playing);
            Assert.False(track.IsNormalPlaying);
            Assert.False(track.Ad);
        }
Example #2
0
        internal async Task GetSpotifyStatus_WithSpotifyProcessPlayingNormalType_ReturnsTrackPlaying(string windowTitle)
        {
            var spotify = new Process {
                Id = 4, MainWindowTitle = windowTitle, ProcessName = Constants.SPOTIFY
            };

            IProcess[] processes = { spotify };

            _mainAudioSessionMock.Setup(x => x.IsSpotifyCurrentlyPlaying()).ReturnsAsync(true);
            _processManagerMock.Setup(x => x.GetProcesses()).Returns(processes);
            _processManagerMock.Setup(x => x.GetProcessById(It.IsAny <int>())).Returns(spotify);
            var spotifyProcess = new SpotifyProcess(_mainAudioSessionMock.Object, _processManagerMock.Object);

            var spotifyStatus = await spotifyProcess.GetSpotifyStatus();

            Assert.IsType <SpotifyStatus>(spotifyStatus);
            var track = Assert.IsType <Track>(spotifyStatus.CurrentTrack);

            Assert.Equal(windowTitle, track.ToString());
            Assert.NotEqual(windowTitle, track.ToTitleString());
            Assert.True(track.Playing);
            Assert.False(track.Ad);
            Assert.True(track.IsNormalPlaying);
            Assert.False(track.IsUnknownPlaying);
        }
Example #3
0
        internal async Task GetSpotifyStatus_WithNoSpotifyProcess_ReturnsNull()
        {
            var spotifyProcess = new SpotifyProcess(_mainAudioSessionMock.Object, _processManagerMock.Object);

            var spotifyStatus = await spotifyProcess.GetSpotifyStatus();

            Assert.Null(spotifyStatus);
        }
Example #4
0
        public bool IsRunning()
        {
            if (SpotifyProcess == null)
            {
                return(false);
            }

            SpotifyProcess.Refresh();
            return(!SpotifyProcess.HasExited);
        }
        public SpotifyAudioSession(int?audioEndPointDeviceIndex)
        {
            AudioEndPointDeviceIndex = audioEndPointDeviceIndex;

            AudioMMDevices = new MMDeviceEnumerator();
            UpdateAudioEndPointDevices();

            _spotifyProcessesIds        = SpotifyProcess.GetSpotifyProcesses().Select(x => x.Id).ToList();
            _spytifyProcess             = Process.GetCurrentProcess();
            SpotifyAudioSessionControls = new List <AudioSessionControl>();
        }
Example #6
0
        internal async Task GetSpotifyStatus_WithWrongSpotifyProcess_ReturnsNull()
        {
            var spotify = new Process {
                Id = 4, MainWindowTitle = " ", ProcessName = Constants.SPOTIFY
            };
            var processes = new[] { spotify };

            _processManagerMock.Setup(x => x.GetProcesses()).Returns(processes);
            _processManagerMock.Setup(x => x.GetProcessById(It.IsAny <int>())).Returns(spotify);
            var spotifyProcess = new SpotifyProcess(_mainAudioSessionMock.Object, _processManagerMock.Object);

            var spotifyStatus = await spotifyProcess.GetSpotifyStatus();

            Assert.Null(spotifyStatus);
        }
        private async Task <bool> IsSpotifyPlayingOutsideDefaultAudioEndPoint(bool running)
        {
            int?spotifyAudioSessionProcessId = null;

            while (running && spotifyAudioSessionProcessId == null && SpotifyProcess.GetSpotifyProcesses().Select(x => x.Id).Any())
            {
                var allSessionsAudioEndPointDevices = GetAllSessionsOfAudioEndPointDevices;

                foreach (var sessionAudioEndPointDevice in allSessionsAudioEndPointDevices)
                {
                    for (var i = 0; i < sessionAudioEndPointDevice.Count; i++)
                    {
                        var currentAudioSessionControl = sessionAudioEndPointDevice[i];
                        var currentProcessId           = (int)currentAudioSessionControl.GetProcessID;
                        if (!IsSpotifyAudioSessionControl(currentProcessId))
                        {
                            continue;
                        }

                        spotifyAudioSessionProcessId = currentProcessId;
                    }
                }

                AudioMMDevices = new MMDeviceEnumerator();
                UpdateAudioEndPointDevices();
                await Task.Delay(300);
            }

            var sessionAudioSelectedEndPointDevice = GetSessionsAudioEndPointDevice;

            for (var i = 0; i < sessionAudioSelectedEndPointDevice.Count; i++)
            {
                var currentAudioSessionControl = sessionAudioSelectedEndPointDevice[i];
                var currentProcessId           = (int)currentAudioSessionControl.GetProcessID;
                if (currentProcessId != spotifyAudioSessionProcessId)
                {
                    continue;
                }

                return(false);
            }

            return(true);
        }
Example #8
0
        private async Task SetSpotifyAudioSessionsAndProcessId(bool running)
        {
            _spotifyAudioSessionProcessId = null;

            while (running && _spotifyAudioSessionProcessId == null && _spotifyProcessesIds.Any())
            {
                var sessionsAudioEndPointDevices = AudioMMDevices
                                                   .EnumerateAudioEndPoints(DataFlow.Render, DeviceState.Active)
                                                   .Select(x => x.AudioSessionManager.Sessions)
                                                   .ToList();

                lock (sessionsAudioEndPointDevices)
                {
                    foreach (var sessionAudioEndPointDevice in sessionsAudioEndPointDevices)
                    {
                        for (var i = 0; i < sessionAudioEndPointDevice.Count; i++)
                        {
                            var currentAudioSessionControl = sessionAudioEndPointDevice[i];
                            var currentProcessId           = (int)currentAudioSessionControl.GetProcessID;
                            if (!IsSpotifyAudioSessionControl(currentProcessId))
                            {
                                continue;
                            }
                            if (!SpotifyAudioSessionControls.Contains(currentAudioSessionControl))
                            {
                                SpotifyAudioSessionControls.Add(currentAudioSessionControl);
                            }
                            _spotifyAudioSessionProcessId = currentProcessId;
                            break;
                        }

                        if (_spotifyAudioSessionProcessId.HasValue)
                        {
                            break;
                        }
                    }
                }

                await Task.Delay(300);

                _spotifyProcessesIds = SpotifyProcess.GetSpotifyProcesses(_processManager).Select(x => x.Id).ToList();
            }
        }
Example #9
0
        internal async Task GetSpotifyStatus_WithSpotifyProcessNoSoundOnAds_ReturnsAdPlaying()
        {
            var windowTitle = Constants.ADVERTISEMENT;
            var spotify     = new Process {
                Id = 4, MainWindowTitle = windowTitle, ProcessName = Constants.SPOTIFY
            };
            var processes = new[] { spotify };

            _processManagerMock.Setup(x => x.GetProcesses()).Returns(processes);
            _processManagerMock.Setup(x => x.GetProcessById(It.IsAny <int>())).Returns(spotify);
            var spotifyProcess = new SpotifyProcess(_mainAudioSessionMock.Object, _processManagerMock.Object);

            var spotifyStatus = await spotifyProcess.GetSpotifyStatus();

            Assert.IsType <SpotifyStatus>(spotifyStatus);
            var track = Assert.IsType <Track>(spotifyStatus.CurrentTrack);

            Assert.Equal(windowTitle, track.ToString());
            Assert.True(track.Playing);
            Assert.True(track.Ad);
            Assert.False(track.IsUnknownPlaying);
        }
Example #10
0
 public SpotifyAudioSession()
 {
     _spotifyProcessesIds         = SpotifyProcess.GetSpotifyProcesses().Select(x => x.Id).ToList();
     _spytifyProcess              = Process.GetCurrentProcess();
     _spotifyAudioSessionControls = new List <AudioSessionControl>();
 }
Example #11
0
        internal void GetSpotifyStatus_ReturnInstance()
        {
            var spotifyProcess = new SpotifyProcess(_mainAudioSessionMock.Object, _processManagerMock.Object);

            Assert.IsType <SpotifyProcess>(spotifyProcess);
        }
Example #12
0
 public void SetSpotifyProcesses()
 {
     _spotifyProcessesIds = SpotifyProcess.GetSpotifyProcesses(_processManager).Select(x => x.Id).ToList();
 }