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); }
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); }
internal async Task GetSpotifyStatus_WithNoSpotifyProcess_ReturnsNull() { var spotifyProcess = new SpotifyProcess(_mainAudioSessionMock.Object, _processManagerMock.Object); var spotifyStatus = await spotifyProcess.GetSpotifyStatus(); Assert.Null(spotifyStatus); }
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>(); }
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); }
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(); } }
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); }
public SpotifyAudioSession() { _spotifyProcessesIds = SpotifyProcess.GetSpotifyProcesses().Select(x => x.Id).ToList(); _spytifyProcess = Process.GetCurrentProcess(); _spotifyAudioSessionControls = new List <AudioSessionControl>(); }
internal void GetSpotifyStatus_ReturnInstance() { var spotifyProcess = new SpotifyProcess(_mainAudioSessionMock.Object, _processManagerMock.Object); Assert.IsType <SpotifyProcess>(spotifyProcess); }
public void SetSpotifyProcesses() { _spotifyProcessesIds = SpotifyProcess.GetSpotifyProcesses(_processManager).Select(x => x.Id).ToList(); }