예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
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(); });
        }
예제 #4
0
        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);
        }