/// <summary> /// Invoked when a property of the settings manager is changed /// </summary> /// <param name="sender">The sender of the event</param> /// <param name="e">The event data</param> private static void SettingsManager_PropertyChanged(object sender, PropertyChangedWithValuesEventArgs e) { if (!Linked || Identity == null) return; // create query string switch (e.PropertyName) { case "Volume": if (SynchronizeConfiguration) PushConfigUpdate("volume", Convert.ToString(SettingsManager.Volume)); break; case "Repeat": if (SynchronizeConfiguration) PushConfigUpdate("repeat", SettingsManager.Repeat.ToString()); break; case "Shuffle": if (SynchronizeConfiguration) PushConfigUpdate("shuffle", SettingsManager.Shuffle ? "Random" : "Off"); break; case "MediaState": if (SynchronizeConfiguration) PushConfigUpdate("media_state", SettingsManager.MediaState == MediaState.Playing ? "Playing" : "Paused"); if (SettingsManager.MediaState == MediaState.Stopped) currentListen = null; if (SettingsManager.CurrentTrack != null) { string path = SettingsManager.CurrentTrack.Path; if (listenQueue.ContainsKey(path)) { // listen has been submitted but no reply yet listenQueue[path] = new Tuple<bool, DateTime>(false, listenQueue[path].Item2); } else { if (SettingsManager.MediaState == MediaState.Playing) { if (idOfCurrentListen <= 0) { // no listen submitted yet stampOfCurrentListen = DateTime.Now; StartListen(); } else { // update listen to reflect new exepcted end time double pos = MediaManager.Position; double len = MediaManager.Length; DateTime expectedEnd = DateTime.UtcNow.AddSeconds(len - pos); UpdateListen(expectedEnd); } } else if (idOfCurrentListen > 0) { // paused DateTime stamp = stampOfCurrentListen.Value; TimeSpan diff = DateTime.Now - stamp; if (diff.TotalSeconds >= minimumListenTime) UpdateListen(DateTime.Now); else DeleteListen(idOfCurrentListen); } } } else if (SettingsManager.CurrentTrack != null) { string path = SettingsManager.CurrentTrack.Path; if (listenQueue.ContainsKey(path)) { // listen has been submitted but no reply yet DateTime stamp = listenQueue[path].Item2; TimeSpan diff = DateTime.Now - stamp; if (diff.TotalSeconds < minimumListenTime) listenQueue[path] = new Tuple<bool, DateTime>(true, stamp); } else { if (idOfCurrentListen <= 0) return; // update listen to reflect exepcted end time UpdateListen(DateTime.UtcNow); } } break; case "CurrentTrack": if (SynchronizeConfiguration) PushConfigUpdate("current_track", TrackToJSON(SettingsManager.CurrentTrack)); break; case "SyncPlaylists": SyncPlaylists(); break; case "SyncConfig": SyncConfig(); break; default: return; } }
/// <summary> /// Invoked when a property of the settings manager changes /// </summary> /// <param name="sender">The sender of the event</param> /// <param name="e">The event data</param> private void SettingsManager_PropertyChanged(object sender, PropertyChangedWithValuesEventArgs e) { Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate() { switch (e.PropertyName) { case "SourceListConfig": SourceList.Config = SettingsManager.SourceListConfig; break; case "MinimizeToTray": Console.WriteLine("M2T changed to: " + SettingsManager.MinimizeToTray); PrefMin2Tray.IsChecked = SettingsManager.MinimizeToTray; break; case "ShowOSD": PrefOSD.IsChecked = SettingsManager.ShowOSD; break; case "OpenAddPolicy": OpenFileAddDescriptionConverter aconv = new OpenFileAddDescriptionConverter(); string apolicy = (string)aconv.Convert(SettingsManager.OpenAddPolicy, null, null, null); foreach (ComboBoxItem cbi in AddPolicyCombo.Items) { if ((string)cbi.Content == apolicy) { AddPolicyCombo.SelectedItem = cbi; break; } } break; case "OpenPlayPolicy": OpenFilePlayDescriptionConverter pconv = new OpenFilePlayDescriptionConverter(); string ppolicy = (string)pconv.Convert(SettingsManager.OpenPlayPolicy, null, null, null); foreach (ComboBoxItem cbi in PlayPolicyCombo.Items) { if ((string)cbi.Content == ppolicy) { PlayPolicyCombo.SelectedItem = cbi; break; } } break; case "SearchPolicy": SearchPolicyDescriptionConverter sconv = new SearchPolicyDescriptionConverter(); string spolicy = (string)sconv.Convert(SettingsManager.SearchPolicy, null, null, null); foreach (ComboBoxItem cbi in SearchPolicyCombo.Items) { if ((string)cbi.Content == spolicy) { SearchPolicyCombo.SelectedItem = cbi; break; } } break; case "UpgradePolicy": UpgradePolicyDescriptionConverter uconv = new UpgradePolicyDescriptionConverter(); string upolicy = (string)uconv.Convert(SettingsManager.UpgradePolicy, null, null, null); foreach (ComboBoxItem cbi in UpgradePolicyCombo.Items) { if ((string)cbi.Content == upolicy) { UpgradePolicyCombo.SelectedItem = cbi; break; } } break; } })); }
/// <summary> /// Invoked when a property of SettingsManager changes. /// </summary> /// <param name="sender">The sender of the event</param> /// <param name="e">The event data</param> private void SettingsManager_PropertyChanged(object sender, PropertyChangedWithValuesEventArgs e) { if (e.PropertyName == "CurrentEqualizerProfile") { Refresh(); } }
/// <summary> /// Invoked when a property of the settings manager changes /// </summary> /// <param name="sender">The sender of the event</param> /// <param name="e">The event data</param> private static void SettingsManager_PropertyChanged(object sender, PropertyChangedWithValuesEventArgs e) { switch (e.PropertyName) { case "Sources": ScanSources(); break; } }
/// <summary> /// Invoked when a property of the settings manager is changed /// </summary> /// <param name="sender">The sender of the event</param> /// <param name="e">The event data</param> private static void SettingsManager_PropertyChanged(object sender, PropertyChangedWithValuesEventArgs e) { switch (e.PropertyName) { case "Seek": if (ignoreSeekChange) break; if (Double.IsNaN(SettingsManager.Seek)) return; if ((double)e.NewValue - (double)e.OldValue > 0) trackWasSkipped = true; if (YouTubeManager.IsYouTube(SettingsManager.CurrentTrack)) { if (YouTubeManager.HasFlash) { bool playing = SettingsManager.MediaState == MediaState.Playing; double pos = (SettingsManager.Seek / 10.0) * Length; InvokeScript("seekTo", new object[] { pos }); // this will change media state to playing if (!playing) InvokeScript("pause"); } } else { if (stream == 0) return; double per = SettingsManager.Seek / 10.0; long pos = (long)(per * Bass.BASS_ChannelGetLength(stream)); Bass.BASS_ChannelSetPosition(stream, pos); } break; case "Volume": if (YouTubeManager.IsYouTube(SettingsManager.CurrentTrack)) { if (YouTubeManager.HasFlash) InvokeScript("setVolume", new object[] { SettingsManager.Volume }); } else { if (stream == 0) return; Bass.BASS_ChannelSetAttribute(stream, BASSAttribute.BASS_ATTRIB_VOL, (float)SettingsManager.Volume / 100); } break; case "YouTubeQuality": InvokeScript("setQuality", new object[] { SettingsManager.YouTubeQuality }); break; case "CurrentTrack": TrackData t = (TrackData)e.OldValue; if (t != null) { TrackData sourceTrack = GetSourceTrack(t); sourceTrack.IsActive = false; } t = SettingsManager.CurrentTrack; if (t != null) { TrackData sourceTrack = GetSourceTrack(t); sourceTrack.IsActive = true; } break; case "HistoryIndex": TrackData oldTrack = null; TrackData newTrack = null; int oldIndex = (int)e.OldValue - 1; int newIndex = (int)e.NewValue - 1; if (oldIndex >= SettingsManager.HistoryTracks.Count) oldIndex = SettingsManager.HistoryTracks.Count - 1; else if (oldIndex == SettingsManager.HistoryTracks.Count - 1 && newIndex == SettingsManager.HistoryTracks.Count) oldIndex = SettingsManager.HistoryTracks.Count - 2; if (newIndex >= SettingsManager.HistoryTracks.Count) newIndex = SettingsManager.HistoryTracks.Count - 1; if (SettingsManager.HistoryTracks.Count > oldIndex && oldIndex >= 0) oldTrack = SettingsManager.HistoryTracks[oldIndex]; if (SettingsManager.HistoryTracks.Count > newIndex && newIndex >= 0) newTrack = SettingsManager.HistoryTracks[newIndex]; if (oldTrack != null) oldTrack.IsActive = false; if (newTrack != null) newTrack.IsActive = true; break; case "MediaState": switch (SettingsManager.MediaState) { case MediaState.Paused: case MediaState.Stopped: // keep the ticker on if a youtube track is loaded (need it to see buffer size changes) if (GetType(SettingsManager.CurrentTrack) != TrackType.YouTube) StopTicker(); break; case MediaState.Playing: // don't waste CPU cycles with ticker if streaming radio if (GetType(SettingsManager.CurrentTrack) != TrackType.WebRadio) StartTicker(); break; case MediaState.Ended: if (SettingsManager.PauseWhenSongEnds) { Pause(); SettingsManager.Seek = 0; Next(false, false); } else Next(false, true); break; } break; case "CurrentEqualizerProfile": RefreshFX(); break; } }
/// <summary> /// Invoked when a property of the settings manager changes /// </summary> /// <param name="sender">The sender of the event</param> /// <param name="e">The event data</param> private void SettingsManager_PropertyChanged(object sender, PropertyChangedWithValuesEventArgs e) { Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate() { switch (e.PropertyName) { case "Seek": UpdateInfo(); break; case "BufferSize": SongProgress.SecondValue = SettingsManager.BufferSize * (SongProgress.Maximum / 10.0); break; case "Volume": VolumeSlide.Value = SettingsManager.Volume; break; case "Shuffle": UpdateShuffle(); break; case "Repeat": UpdateRepeat(); break; case "CurrentTrack": UpdateInfo(); ClearBookmarks(); if (SettingsManager.CurrentTrack != null) { TrackData libraryTrack = MediaManager.GetLibrarySourceTrack(SettingsManager.CurrentTrack); if (libraryTrack.Bookmarks != null) foreach (double b in libraryTrack.Bookmarks) AddBookmark(b); } break; case "MediaState": switch (SettingsManager.MediaState) { case MediaState.Playing: PausePlayButton.Style = (Style)FindResource("PauseButtonStyle"); break; case MediaState.Paused: case MediaState.Stopped: PausePlayButton.Style = (Style)FindResource("PlayButtonStyle"); break; } break; } })); }
/// <summary> /// Invoked when the property of the Settings manager changes. /// </summary> /// <param name="sender">The sender of the event</param> /// <param name="e">The event data</param> private static void SettingsManager_PropertyChanged(object sender, PropertyChangedWithValuesEventArgs e) { if (e.PropertyName == "MediaState") RefreshSleepPrevention(); }
/// <summary> /// Invoked when the property of the Service manager changes. /// </summary> /// <param name="sender">The sender of the event</param> /// <param name="e">The event data</param> private static void ServiceManager_PropertyChanged(object sender, PropertyChangedWithValuesEventArgs e) { if (e.PropertyName == "Linked" || e.PropertyName == "Synchronize") RefreshSleepPrevention(); }
/// <summary> /// Invoked when a property of the settings manager changes /// </summary> /// <param name="sender">The sender of the event</param> /// <param name="e">The event data</param> private static void SettingsManager_PropertyChanged(object sender, PropertyChangedWithValuesEventArgs e) { switch (e.PropertyName) { case "UpgradePolicy": if (SettingsManager.UpgradePolicy == UpgradePolicy.Manual) Stop(); else { Start(); Probe(null); } break; } }
/// <summary> /// Invoked when a property changes in the service manager. /// </summary> /// <param name="sender">The sender of the event</param> /// <param name="e">The event data</param> private void ServiceManager_PropertyChanged(object sender, PropertyChangedWithValuesEventArgs e) { Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate() { switch (e.PropertyName) { case "DeviceName": DeviceName.Edited -= DeviceName_Edited; DeviceName.Text = e.NewValue as string; DeviceNameLoading.Visibility = Visibility.Collapsed; DeviceName.Visibility = Visibility.Visible; DeviceName.Edited += DeviceName_Edited; break; case "UserName": UserName.Text = e.NewValue as string; UserNameLoading.Visibility = Visibility.Collapsed; UserName.Visibility = Visibility.Visible; break; case "Linked": U.L(LogLevel.Debug, "CONTROL", "Detected change in service link state"); linkingCloud = false; RefreshServiceGUI(); break; case "Links": U.L(LogLevel.Debug, "CONTROL", "Detected change in links to third parties"); RefreshLinks(); CloudBrowserIsLoading = false; break; case "Synchronize": RefreshSyncGUI(); break; case "Connected": Connected.Visibility = ServiceManager.Connected ? Visibility.Visible : Visibility.Collapsed; Disconnected.Visibility = ServiceManager.Connected ? Visibility.Collapsed : Visibility.Visible; if (ServiceManager.Connected) Connect(); break; } })); }