Ejemplo n.º 1
0
        internal async void PlayStarted(PlaylistItem item)
        {
            if (item == null)
            {
                throw new Exception();
            }

            using (var releaser = await _PlaylistUpdateLock.LockAsync())
            {
                // 新たにプレイリストが指定された場合に
                // 連続再生をセットアップする
                if (item.Owner != null)
                {
                    if (item.Owner != Playlist)
                    {
                        Playlist = item.Owner;
                    }
                }

                // GoNext/GoBack内でCurrentが既に変更済みの場合はスキップ
                // Playlist外から直接PlaylistItemが変更された場合にのみ
                // 現在再生位置の更新を行う
                if (Current != item)
                {
                    Current = item;
                    if (SourceItems != null)
                    {
                        CurrentIndex = PlaylistSettings.IsShuffleEnable ? 0 : SourceItems.IndexOf(Current);
                    }
                    else
                    {
                        CurrentIndex = 0;
                    }

                    // ランダム再生かつ先頭の再生を行う場合は
                    // ランダムアイテムの先頭が現在再生中アイテムになるように
                    // ランダムアイテムリストを修正する
                    // この修正によって、シャッフル再生が先頭しか再生されない問題を回避できる
                    if (CurrentIndex == 0 && PlaylistSettings.IsShuffleEnable)
                    {
                        if (RandamizedItems.FirstOrDefault() != Current)
                        {
                            RandamizedItems.Remove(Current);
                            RandamizedItems.Insert(0, Current);
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        internal async void PlayStarted(PlaylistItem item)
        {
            if (item == null)
            {
                throw new Exception();
            }

            using (var releaser = await _PlaylistUpdateLock.LockAsync())
            {
                // 新たにプレイリストが指定された場合に
                // 連続再生をセットアップする
                if (item.Owner != null)
                {
                    if (item.Owner != Playlist)
                    {
                        Playlist = item.Owner;
                    }
                }

                SourceItems.Clear();
                foreach (var newItem in Playlist.Select(x => new PlaylistItem()
                {
                    ContentId = x,
                    Owner = Playlist,
                    Type = PlaylistItemType.Video,
                }))
                {
                    SourceItems.Add(newItem);
                }

                RaisePropertyChanged(nameof(CanGoBack));
                RaisePropertyChanged(nameof(CanGoNext));
                //                Current = SourceItems.First(x => item.ContentId == x.ContentId);

                // GoNext/GoBack内でCurrentが既に変更済みの場合はスキップ
                // Playlist外から直接PlaylistItemが変更された場合にのみ
                // 現在再生位置の更新を行う
                if (Current != item)
                {
                    Current = item;
                    if (SourceItems != null)
                    {
                        CurrentIndex = PlaylistSettings.IsShuffleEnable ? 0 : SourceItems.IndexOf(Current);
                    }
                    else
                    {
                        CurrentIndex = 0;
                    }

                    // ランダム再生かつ先頭の再生を行う場合は
                    // ランダムアイテムの先頭が現在再生中アイテムになるように
                    // ランダムアイテムリストを修正する
                    // この修正によって、シャッフル再生が先頭しか再生されない問題を回避できる
                    if (CurrentIndex == 0 && PlaylistSettings.IsShuffleEnable)
                    {
                        if (RandamizedItems.FirstOrDefault() != Current)
                        {
                            RandamizedItems.Remove(Current);
                            RandamizedItems.Insert(0, Current);
                        }
                    }
                }
            }
        }