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"); } }
internal void ChangeTrayIcon(bool useOldIcon) { UserPreferencesService.UseOldIcon = useOldIcon; if (UserPreferencesService.UseOldIcon) { UpdateTrayIcon(); } else { var defaultDevice = _deviceService.GetAudioDevices().FirstOrDefault(x => x.IsDefault); var noDevice = defaultDevice.Equals(default(EarTrumpetAudioDeviceModel)); var volume = _deviceService.GetAudioDeviceVolume(defaultDevice.Id); UpdateTrayIcon(noDevice, defaultDevice.IsMuted, volume.ToVolumeInt()); } }
public TrayViewModel(EarTrumpetAudioDeviceService deviceService) { var originalIcon = new Icon(Application.GetResourceStream(new Uri("pack://application:,,,/EarTrumpet;component/Tray.ico")).Stream); _icons.Add(IconId.OriginalIcon, originalIcon); try { _icons.Add(IconId.NoDevice, IconService.GetIconFromFile(_trayIconPath, (int)IconId.NoDevice)); _icons.Add(IconId.Muted, IconService.GetIconFromFile(_trayIconPath, (int)IconId.Muted)); _icons.Add(IconId.SpeakerZeroBars, IconService.GetIconFromFile(_trayIconPath, (int)IconId.SpeakerZeroBars)); _icons.Add(IconId.SpeakerOneBar, IconService.GetIconFromFile(_trayIconPath, (int)IconId.SpeakerOneBar)); _icons.Add(IconId.SpeakerTwoBars, IconService.GetIconFromFile(_trayIconPath, (int)IconId.SpeakerTwoBars)); _icons.Add(IconId.SpeakerThreeBars, IconService.GetIconFromFile(_trayIconPath, (int)IconId.SpeakerThreeBars)); } catch { _icons.Clear(); _icons.Add(IconId.NoDevice, originalIcon); _icons.Add(IconId.Muted, originalIcon); _icons.Add(IconId.SpeakerZeroBars, originalIcon); _icons.Add(IconId.SpeakerOneBar, originalIcon); _icons.Add(IconId.SpeakerTwoBars, originalIcon); _icons.Add(IconId.SpeakerThreeBars, originalIcon); _icons.Add(IconId.OriginalIcon, originalIcon); } _deviceService = deviceService; _deviceService.MasterVolumeChanged += DeviceService_MasterVolumeChanged; var defaultDevice = _deviceService.GetAudioDevices().FirstOrDefault(x => x.IsDefault); if (!defaultDevice.Equals(default(EarTrumpetAudioDeviceModel))) { var volume = _deviceService.GetAudioDeviceVolume(defaultDevice.Id); UpdateTrayIcon(false, defaultDevice.IsMuted, volume.ToVolumeInt()); } else { UpdateTrayIcon(true); } }