public void Refresh() { var defaultDevice = _deviceService.GetAudioDevices().FirstOrDefault(x => x.IsDefault); var volume = _deviceService.GetAudioDeviceVolume(defaultDevice.Id); var newDevice = new DeviceAppItemViewModel(_proxy, defaultDevice, volume); if (Device != null && Device.IsSame(newDevice)) { Device.UpdateFromOther(newDevice); } else { Device = newDevice; } RaisePropertyChanged("Device"); bool hasApps = Apps.Count > 0; var sessions = _audioService.GetAudioSessionGroups().Select(x => new AppItemViewModel(_proxy, x)); List <AppItemViewModel> staleSessionsToRemove = new List <AppItemViewModel>(); // remove stale apps foreach (var app in Apps) { if (!sessions.Where(x => (x.IsSame(app))).Any()) { staleSessionsToRemove.Add(app); } } foreach (var app in staleSessionsToRemove) { Apps.Remove(app); } // add new apps foreach (var session in sessions) { var findApp = Apps.FirstOrDefault(x => x.IsSame(session)); if (findApp == null) { Apps.AddSorted(session, AppItemViewModelComparer.Instance); } else { // update existing apps findApp.UpdateFromOther(session); } } ListVisibility = Apps.Count > 0 ? Visibility.Visible : Visibility.Hidden; NoAppsPaneVisibility = Apps.Count == 0 ? Visibility.Visible : Visibility.Hidden; if (hasApps != (Apps.Count > 0)) { RaisePropertyChanged("ListVisibility"); RaisePropertyChanged("NoAppsPaneVisibility"); } }
public void Refresh() { bool hasApps = Apps.Count > 0; var titleProvider = ProcessTitleProviderFactoryService.CreateProvider(); var sessions = _audioService.GetAudioSessionGroups().Select(x => new AppItemViewModel(_proxy, x, titleProvider)); List <AppItemViewModel> staleSessionsToRemove = new List <AppItemViewModel>(); // remove stale apps foreach (var app in Apps) { if (!sessions.Where(x => (x.IsSame(app) && (!app.IsDesktop || UserPreferencesService.ShowDesktopApps))).Any()) { staleSessionsToRemove.Add(app); } } foreach (var app in staleSessionsToRemove) { Apps.Remove(app); } // add new apps foreach (var session in sessions) { var findApp = Apps.FirstOrDefault(x => x.IsSame(session)); if (findApp == null) { if (!session.IsDesktop || UserPreferencesService.ShowDesktopApps) { Apps.AddSorted(session, AppItemViewModelComparer.Instance); } } else { // update existing apps findApp.UpdateFromOther(session); } } ListVisibility = Apps.Count > 0 ? Visibility.Visible : Visibility.Hidden; NoAppsPaneVisibility = Apps.Count == 0 ? Visibility.Visible : Visibility.Hidden; if (hasApps != (Apps.Count > 0)) { RaisePropertyChanged("ListVisibility"); RaisePropertyChanged("NoAppsPaneVisibility"); } }