public HohoemaNotificationService(
     PageManager pageManager,
     HohoemaPlaylist playlist,
     NotificationService notificationService,
     Models.Provider.NicoVideoProvider nicoVideoProvider,
     Models.Provider.MylistProvider mylistProvider,
     Models.Provider.NicoLiveProvider nicoLiveProvider,
     Models.Provider.CommunityProvider communityProvider,
     Models.Provider.UserProvider userProvider
     )
 {
     PageManager         = pageManager;
     Playlist            = playlist;
     NotificationService = notificationService;
     NicoVideoProvider   = nicoVideoProvider;
     MylistProvider      = mylistProvider;
     NicoLiveProvider    = nicoLiveProvider;
     CommunityProvider   = communityProvider;
     UserProvider        = userProvider;
 }
Exemple #2
0
        public HohoemaPlaylist(
            IScheduler scheduler,
            IEventAggregator eventAggregator,
            PlaylistRepository playlistRepository,
            Models.Provider.NicoVideoProvider nicoVideoProvider,
            MylistRepository mylistRepository,
            PlayerSettings playerSettings
            )
        {
            _scheduler             = scheduler;
            _eventAggregator       = eventAggregator;
            _player                = new PlaylistPlayer(this, playerSettings);
            _player.PlayRequested += OnPlayRequested;

            _player.ObserveProperty(x => x.CanGoNext).Subscribe(_ => _scheduler.Schedule(() => RaisePropertyChanged(nameof(CanGoNext)))).AddTo(_disposable);
            _player.ObserveProperty(x => x.CanGoBack).Subscribe(_ => _scheduler.Schedule(() => RaisePropertyChanged(nameof(CanGoBack)))).AddTo(_disposable);
            _player.ObserveProperty(x => x.Current).Subscribe(_ => _scheduler.Schedule(() => RaisePropertyChanged(nameof(CurrentItem)))).AddTo(_disposable);

            _playlistRepository = playlistRepository;
            _nicoVideoProvider  = nicoVideoProvider;
            _mylistRepository   = mylistRepository;
            _playerSettings     = playerSettings;

            /*
             * _ = ResolveItemsAsync(QueuePlaylist)
             *  .ContinueWith(prevTask =>
             *  {
             *      var items = prevTask.Result;
             *      foreach (var item in items)
             *      {
             *          AddQueue(item);
             *      }
             *
             *      QueuePlaylist.CollectionChangedAsObservable()
             *          .Throttle(TimeSpan.FromSeconds(0.25))
             *          .Subscribe(args => PlaylistObservableCollectionChanged(QueuePlaylist, args))
             *          .AddTo(_disposable);
             *  });
             */

            WatchAfterPlaylist = new PlaylistObservableCollection(WatchAfterPlaylistId, WatchAfterPlaylistId.Translate(), _scheduler);
            _ = ResolveItemsAsync(WatchAfterPlaylist)
                .ContinueWith(prevTask =>
            {
                var items = prevTask.Result;
                foreach (var item in items)
                {
                    AddWatchAfterPlaylist(item);
                }

                WatchAfterPlaylist.CollectionChangedAsObservable()
                .Throttle(TimeSpan.FromSeconds(0.25))
                .Subscribe(args => PlaylistObservableCollectionChanged(WatchAfterPlaylist, args))
                .AddTo(_disposable);
            });

            _isShuffleEnabled         = playerSettings.IsShuffleEnable;
            _isReverseEnabled         = playerSettings.IsReverseModeEnable;
            _isPlaylistLoopingEnabled = playerSettings.IsPlaylistLoopingEnabled;


            /*
             * if (newOwner is INotifyCollectionChanged playlistNotifyCollectionChanged)
             * {
             *  _ItemsObservaeDisposer = playlistNotifyCollectionChanged.CollectionChangedAsObservable()
             *      .Subscribe(async _ =>
             *      {
             *          using (var releaser2 = await _PlaylistUpdateLock.LockAsync())
             *          {
             *                  // 再生中アイテムが削除された時のプレイリストの動作
             *
             *                  // 動画プレイヤーには影響を与えないこととする
             *                  // 連続再生動作の継続性が確保できればOK
             *
             *                  SourceItems.Clear();
             *              foreach (var newItem in newOwner.Select(x => new PlaylistItem()
             *              {
             *                  ContentId = x,
             *              }))
             *              {
             *                  SourceItems.Add(newItem);
             *              }
             *
             *              ResetRandmizedItems(SourceItems);
             *
             *              if (PlaylistSettings.IsShuffleEnable)
             *              {
             *                  CurrentIndex = 0;
             *              }
             *              else
             *              {
             *                  CurrentIndex = Current == null ? 0 : SourceItems.IndexOf(Current);
             *              }
             *
             *              RaisePropertyChanged(nameof(CanGoBack));
             *              RaisePropertyChanged(nameof(CanGoNext));
             *          }
             *      });
             * }
             */
        }