コード例 #1
0
        private async void ResetItems()
        {
            var newOwner = Playlist;

            using (var releaser = await _PlaylistUpdateLock.LockAsync())
            {
                PlayedItems.Clear();
                _ItemsObservaeDisposer?.Dispose();
                _ItemsObservaeDisposer = null;

                ResetRandmizedItems(SourceItems);
                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,
                                Owner = newOwner,
                                Type = PlaylistItemType.Video,
                            }))
                            {
                                SourceItems.Add(newItem);
                            }

                            ResetRandmizedItems(SourceItems);

                            if (PlaylistSettings.IsShuffleEnable)
                            {
                                CurrentIndex = 0;
                            }
                            else
                            {
                                CurrentIndex = Current == null ? 0 : SourceItems.IndexOf(Current);
                            }

                            RaisePropertyChanged(nameof(CanGoBack));
                            RaisePropertyChanged(nameof(CanGoNext));
                        }
                    });
                }

                RaisePropertyChanged(nameof(CanGoBack));
                RaisePropertyChanged(nameof(CanGoNext));
            }
        }
コード例 #2
0
ファイル: HohoemaPlaylist.cs プロジェクト: TaoziDB/Hohoema
        internal async void ResetItems(IPlayableList newOwner)
        {
            using (var releaser = await _PlaylistUpdateLock.LockAsync())
            {
                PlayedItems.Clear();
                ResetRandmizedItems();
                _ItemsObservaeDisposer?.Dispose();
                _ItemsObservaeDisposer = null;

                Playlist = newOwner;

                if (Playlist != null)
                {
                    _ItemsObservaeDisposer = Playlist.PlaylistItems.CollectionChangedAsObservable()
                                             .Subscribe(async x =>
                    {
                        using (var releaser2 = await _PlaylistUpdateLock.LockAsync())
                        {
                            // 再生中アイテムが削除された時のプレイリストの動作

                            // 動画プレイヤーには影響を与えないこととする
                            // 連続再生動作の継続性が確保できればOK

                            ResetRandmizedItems();

                            if (PlaylistSettings.IsShuffleEnable)
                            {
                                CurrentIndex = 0;
                            }
                            else
                            {
                                CurrentIndex = Current == null ? 0 : SourceItems.IndexOf(Current);
                            }

                            RaisePropertyChanged(nameof(CanGoBack));
                            RaisePropertyChanged(nameof(CanGoNext));
                        }
                    });
                }

                RaisePropertyChanged(nameof(CanGoBack));
                RaisePropertyChanged(nameof(CanGoNext));
            }
        }