public TrackStatusViewModel(DiscChanger discChanger, LibraryManager libraryManager) { this.WhenAnyValue(x => x.SeekPosition) .Skip(1) .Subscribe(x => { discChanger.Seek(TimeSpan.FromSeconds(SeekPosition * Duration.TotalSeconds)); }); this.WhenAnyValue(x => x.Status) .Throttle(TimeSpan.FromSeconds(2)) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(_ => { Status = ""; }); Model = discChanger; Model.WhenAnyValue(x => x.CurrentTrack) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(x => LoadTrack(x)); Model.WhenAnyValue(x => x.CurrentTrackPosition) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(x => UpdateCurrentPlayTime(x)); Model.WhenAnyValue(x => x.CurrentSpectrumData) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(x => InFFTData = x); Observable.FromEventPattern <string>(libraryManager, nameof(libraryManager.StatusChanged)) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(x => Status = x.EventArgs); }
public VolumeControlViewModel(DiscChanger discChanger) { this.discChanger = discChanger; discChanger.WhenAnyValue(x => x.CurrentTrack) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(_ => { if (IsMuted) { discChanger.Volume = 0; } else { discChanger.Volume = Volume; } }); this.WhenAnyValue(x => x.Volume, x => x.IsMuted) .Where(x => !x.Item2) .Subscribe(x => discChanger.Volume = x.Item1); this.WhenAnyValue(x => x.IsMuted) .Where(x => x) .Subscribe(_ => discChanger.Volume = 0); }
public DiscChangerViewModel(DiscChanger discChanger) { _discChanger = discChanger; _isPaused = _discChanger.WhenAnyValue(x => x.IsPaused) .ToProperty(this, nameof(IsPaused)); PlayCommand = ReactiveCommand.CreateFromTask(async() => { await _discChanger.Play(); }); ForwardCommand = ReactiveCommand.CreateFromTask(async() => { await _discChanger.Forward(); }); BackCommand = ReactiveCommand.CreateFromTask(async() => { await _discChanger.Back(); }); }
public DiscChangerViewModel(DiscChanger discChanger) { _discChanger = discChanger; _isPlaying = _discChanger.WhenAnyValue(x => x.IsPlaying) .ToProperty(this, nameof(IsPlaying)); PlayCommand = ReactiveCommand.Create(() => { if (_discChanger.IsPlaying) { _discChanger.Pause(); } else { _discChanger.Play(); } }); ForwardCommand = ReactiveCommand.Create(_discChanger.Forward); BackCommand = ReactiveCommand.Create(_discChanger.Back); }