Beispiel #1
0
        /// <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;
            }
        }
Beispiel #2
0
        /// <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;
                }
            }));
        }
Beispiel #3
0
 /// <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();
     }
 }
Beispiel #4
0
		/// <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;
			}
		}
Beispiel #5
0
        /// <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;
            }
        }
Beispiel #6
0
        /// <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;
                }
            }));
        }
Beispiel #7
0
 /// <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();
 }
Beispiel #8
0
 /// <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();
 }
Beispiel #9
0
 /// <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;
     }
 }
Beispiel #10
0
        /// <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;
                }
            }));
        }