public VideoPlayer( MediaPlayer mediaPlayer, IScheduler scheduler, HohoemaPlaylist hohoemaPlaylist, PlayerSettings playerSettings ) { _mediaPlayer = mediaPlayer; _scheduler = scheduler; _hohoemaPlaylist = hohoemaPlaylist; _playerSettings = playerSettings; // Playing Video IsPlayWithCache = new ReactiveProperty<bool>(_scheduler, false) .AddTo(_disposables); // Playlist PlayNextCommand = _hohoemaPlaylist.ObserveProperty(x => x.CanGoNext) .ToReactiveCommand(_scheduler) .AddTo(_disposables); PlayNextCommand.CanExecuteChangedAsObservable() .Subscribe(x => Debug.WriteLine("CanPlayNext changed: " + PlayNextCommand.CanExecute())) .AddTo(_disposables); PlayNextCommand.Subscribe(PlayNext) .AddTo(_disposables); PlayPreviousCommand = _hohoemaPlaylist.ObserveProperty(x => x.CanGoBack) .ToReactiveCommand(_scheduler) .AddTo(_disposables); PlayPreviousCommand.Subscribe(PlayPrevious) .AddTo(_disposables); IsShuffleEnabled = _hohoemaPlaylist.ToReactivePropertyAsSynchronized(x => x.IsShuffleEnabled, _scheduler) .AddTo(_disposables); IsReverseEnabled = _hohoemaPlaylist.ToReactivePropertyAsSynchronized(x => x.IsReverseEnable, _scheduler) .AddTo(_disposables); IsCurrentVideoLoopingEnabled = _playerSettings.ToReactivePropertyAsSynchronized(x => x.IsCurrentVideoLoopingEnabled, _scheduler) .AddTo(_disposables); IsCurrentVideoLoopingEnabled.Subscribe(x => { _mediaPlayer.IsLoopingEnabled = x; }) .AddTo(_disposables); _mediaPlayer.PlaybackSession.PositionChanged += PlaybackSession_PositionChanged; }
public PlayerWithPageContainerViewModel(HohoemaApp hohoemaApp, HohoemaPlaylist playlist) { HohoemaPlaylist = playlist; IsFillFloatContent = HohoemaPlaylist .ToReactivePropertyAsSynchronized(x => x.IsPlayerFloatingModeEnable , (x) => !x , (x) => !x ); IsFillFloatContent_DelayedRead = IsFillFloatContent .Delay(TimeSpan.FromMilliseconds(300)) .ToReadOnlyReactiveProperty(); IsVisibleFloatContent = HohoemaPlaylist.ObserveProperty(x => x.IsDisplayPlayer) .ToReactiveProperty(); IsContentDisplayFloating = Observable.CombineLatest( IsFillFloatContent.Select(x => !x), IsVisibleFloatContent ) .Select(x => x.All(y => y)) .ToReactiveProperty(); ContentVM = new ReactiveProperty <ViewModelBase>(); HohoemaPlaylist.OpenPlaylistItem += HohoemaPlaylist_OpenPlaylistItem; IsVisibleFloatContent .Where(x => !x) .Subscribe(x => { ClosePlayer(); }); App.Current.Suspending += Current_Suspending; }