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)); } }
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)); } }