Example #1
0
 public ShellMenuViewModel(
     LibraryViewModel libraryViewModel,
     //AllTracksFilterViewModel allTracksViewModel,
     //AllTracksViewModel allTracksViewModel,
     PlaybackControlsViewModel playbackControlsViewModel)
 {
     this.LibraryViewModel = libraryViewModel ?? throw new ArgumentNullException(nameof(libraryViewModel));
     //this.AllTracksViewModel = allTracksViewModel ?? throw new ArgumentNullException(nameof(allTracksViewModel));
     this.PlaybackControlsViewModel = playbackControlsViewModel ?? throw new ArgumentNullException(nameof(playbackControlsViewModel));
 }
        public ShellViewModel(
            IAudioPlaybackEngine playbackService,
            //IWriteLibraryService writeLibraryService,
            IReadLibraryService readLibraryService,
            IDialogService dialogService,
            LibraryViewModel libraryViewModel,
            PlaybackControlsViewModel playbackControlsViewModel,
            PlaybackHistoryViewModel playbackHistoryViewModel,
            ShellMenuViewModel shellMenuViewModel)
        {
            this._playbackService = playbackService ?? throw new ArgumentNullException(nameof(playbackService));
            //this._writeLibraryService = writeLibraryService ?? throw new ArgumentNullException(nameof(writeLibraryService));
            this._readLibraryService       = readLibraryService ?? throw new ArgumentNullException(nameof(readLibraryService));
            this._dialogService            = dialogService ?? throw new ArgumentNullException(nameof(dialogService));
            this.LibraryViewModel          = libraryViewModel ?? throw new ArgumentNullException(nameof(libraryViewModel));
            this.PlaybackControlsViewModel = playbackControlsViewModel ?? throw new ArgumentNullException(nameof(playbackControlsViewModel));
            this.PlaybackHistoryViewModel  = playbackHistoryViewModel ?? throw new ArgumentNullException(nameof(playbackHistoryViewModel));
            this.ShellMenuViewModel        = shellMenuViewModel ?? throw new ArgumentNullException(nameof(shellMenuViewModel));

            this._isEnabled_OAPH = Observable
                                   .Return(true)
                                   .ToProperty(this, nameof(this.IsEnabled))
                                   .DisposeWith(this._disposables);

            this._taskbarProgressState_OAPH = Observable.CombineLatest(
                this._playbackService.WhenStatusChanged,
                this._playbackService.WhenDurationChanged,
                this._playbackService.WhenPositionChanged,
                (status, duration, position) =>
            {
                switch (status)
                {
                case PlaybackStatus.Loaded:
                case PlaybackStatus.PlayedToEnd:
                case PlaybackStatus.ManuallyInterrupted:
                case PlaybackStatus.None:
                    return(TaskbarItemProgressState.None);

                case PlaybackStatus.Playing:
                    if (duration.HasValue && position.HasValue)
                    {
                        return(TaskbarItemProgressState.Normal);
                    }
                    return(TaskbarItemProgressState.Indeterminate);

                case PlaybackStatus.Paused:
                    return(TaskbarItemProgressState.Paused);

                case PlaybackStatus.Loading:
                    return(TaskbarItemProgressState.Indeterminate);

                case PlaybackStatus.Exploded:
                    return(TaskbarItemProgressState.Error);

                default:
                    return(TaskbarItemProgressState.None);
                }
            })
                                              .DistinctUntilChanged()
                                              .ToProperty(this, nameof(this.TaskbarProgressState))
                                              .DisposeWith(this._disposables);

            this._taskbarProgressValue_OAPH = Observable.CombineLatest(
                this._playbackService.WhenDurationChanged,
                this._playbackService.WhenPositionChanged,
                (duration, position) =>
            {
                if (duration.HasValue && position.HasValue)
                {
                    return(position.Value.TotalMilliseconds / duration.Value.TotalMilliseconds);
                }

                return(Double.NaN);
            })
                                              .DistinctUntilChanged()
                                              .ToProperty(this, nameof(this.TaskbarProgressValue))
                                              .DisposeWith(this._disposables);

            this._playbackService.WhenTrackChanged
            .Subscribe(track => this.UpdateDisplayName(track))
            .DisposeWith(this._disposables);

            this.ActivateItem(this.LibraryViewModel);
            this.ActivateItem(this.PlaybackControlsViewModel);
            this.ActivateItem(this.PlaybackHistoryViewModel);
            this.ActivateItem(this.ShellMenuViewModel);
        }