예제 #1
0
        private async Task AddItemToPlaylist(ISubsonicModel item)
        {
            if (item.Type == SubsonicModelTypeEnum.Song || item.Type == SubsonicModelTypeEnum.Video)
            {
                var addItemsMessage = new AddItemsMessage { Queue = new List<Client.Common.Models.PlaylistItem>(new[] { await LoadModel(item) }) };
                EventAggregator.Publish(addItemsMessage);
                if (_playNextItem)
                {
                    _playNextItem = false;
                    EventAggregator.Publish(new PlayNextMessage());
                }
            }
            else
            {
                var children = new List<ISubsonicModel>();
                switch (item.Type)
                {
                    case SubsonicModelTypeEnum.Album:
                        {
                            await SubsonicService.GetAlbum(item.Id)
                                                 .WithErrorHandler(this)
                                                 .OnSuccess(result => children.AddRange(result.Songs))
                                                 .Execute();

                        } break;
                    case SubsonicModelTypeEnum.Artist:
                        {
                            await SubsonicService.GetArtist(item.Id)
                                                 .WithErrorHandler(this)
                                                 .OnSuccess(result => children.AddRange(result.Albums))
                                                 .Execute();
                        } break;
                    case SubsonicModelTypeEnum.MusicDirectory:
                        {
                            await SubsonicService.GetMusicDirectory(item.Id)
                                                 .WithErrorHandler(this)
                                                 .OnSuccess(result => children.AddRange(result.Children))
                                                 .Execute();
                        } break;
                    case SubsonicModelTypeEnum.Index:
                        {
                            children.AddRange(((IndexItem)item).Artists);
                        } break;
                }

                foreach (var subsonicModel in children)
                {
                    await AddItemToPlaylist(subsonicModel);
                }
            }
        }
        private async Task AddItemToPlaylist(ISubsonicModel item)
        {
            if (item.Type == SubsonicModelTypeEnum.Song || item.Type == SubsonicModelTypeEnum.Video)
            {
                var playlistItems = new List<PlaylistItem>(new[] { await LoadPlaylistItem(item) });
                var addItemsMessage = new AddItemsMessage { Queue = playlistItems };
                if (_playNextItem)
                {
                    _playNextItem = false;
                    addItemsMessage.StartPlaying = true;
                }

                EventAggregator.Publish(addItemsMessage);
            }
            else
            {
                var children = new List<ISubsonicModel>();
                switch (item.Type)
                {
                    case SubsonicModelTypeEnum.Album:
                        {
                            await
                                SubsonicService.GetAlbum(item.Id)
                                               .WithErrorHandler(ErrorDialogViewModel)
                                               .OnSuccess(result => children.AddRange(result.Songs))
                                               .Execute();
                        }

                        break;
                    case SubsonicModelTypeEnum.Artist:
                        {
                            await
                                SubsonicService.GetArtist(item.Id)
                                               .WithErrorHandler(ErrorDialogViewModel)
                                               .OnSuccess(result => children.AddRange(result.Albums))
                                               .Execute();
                        }

                        break;
                    case SubsonicModelTypeEnum.MusicDirectory:
                        {
                            await
                                SubsonicService.GetMusicDirectory(item.Id)
                                               .WithErrorHandler(ErrorDialogViewModel)
                                               .OnSuccess(result => children.AddRange(result.Children))
                                               .Execute();
                        }

                        break;
                    case SubsonicModelTypeEnum.Index:
                        {
                            children.AddRange(((IndexItem)item).Artists);
                        }

                        break;
                    case SubsonicModelTypeEnum.Folder:
                        {
                            await
                                SubsonicService.GetIndex(item.Id)
                                               .WithErrorHandler(ErrorDialogViewModel)
                                               .OnSuccess(result => children.AddRange(result.Artists))
                                               .Execute();
                        }

                        break;
                }

                foreach (var subsonicModel in children)
                {
                    await AddItemToPlaylist(subsonicModel);
                }
            }
        }
 public void Handle(AddItemsMessage message)
 {
     if (message.Queue.Count == 0) return;
     Items.AddRange(message.Queue);
     if (message.StartPlaying)
     {
         StartPlaybackAction(Items.Count - message.Queue.Count);
     }
 }
 public void Handle(AddItemsMessage message)
 {
     throw new System.NotImplementedException();
 }
 public void Handle(AddItemsMessage message)
 {
 }
 public void Handle(AddItemsMessage message)
 {
     Items.AddRange(message.Queue);
 }