Exemple #1
0
        public async Task<EditablePlaylistViewModel> GetEditablePlaylistAsync(PlaylistViewModel playlistViewModel)
        {
            // Assume new playlist
            var editablePlaylist = new EditablePlaylistViewModel(
                await this.GetUniquePlaylistNameAsync(ResourceUtils.GetString("Language_New_Playlist")),
                PlaylistType.Static
                );

            // Not a new playlist
            if (playlistViewModel != null)
            {
                editablePlaylist.Path = playlistViewModel.Path;
                editablePlaylist.PlaylistName = playlistViewModel.Name;
                editablePlaylist.Type = playlistViewModel.Type;

                if (playlistViewModel.Type.Equals(PlaylistType.Smart))
                {
                    await Task.Run(() =>
                    {
                        var decoder = new SmartPlaylistDecoder();
                        DecodeSmartPlaylistResult result = decoder.DecodePlaylist(playlistViewModel.Path);

                        editablePlaylist.Limit = new SmartPlaylistLimitViewModel(result.Limit.Type, result.Limit.Value);
                        editablePlaylist.Limit.IsEnabled = result.Limit.Value > 0;
                        editablePlaylist.SelectedLimitType = editablePlaylist.LimitTypes.Where(x => x.Type.Equals(result.Limit.Type)).FirstOrDefault();
                        editablePlaylist.MatchAnyRule = result.Match.Equals(SmartPlaylistDecoder.MatchAny) ? true : false;

                        var ruleViewModels = new ObservableCollection<SmartPlaylistRuleViewModel>();

                        foreach (SmartPlaylistRule rule in result.Rules)
                        {
                            var ruleViewModel = new SmartPlaylistRuleViewModel();
                            ruleViewModel.SelectedField = ruleViewModel.Fields.Where(x => x.Name.Equals(rule.Field)).FirstOrDefault();

                            // If a invalid field was provided in the xml file, just take the first field.
                            if (ruleViewModel.SelectedField == null)
                            {
                                ruleViewModel.SelectedField = ruleViewModel.Fields.First();
                            }

                            ruleViewModel.SelectedOperator = ruleViewModel.Operators.Where(x => x.Name.Equals(rule.Operator)).FirstOrDefault();

                            // If a invalid operator was provided in the xml file, just take the first operator.
                            if (ruleViewModel.SelectedOperator == null)
                            {
                                ruleViewModel.SelectedOperator = ruleViewModel.Operators.First();
                            }

                            ruleViewModel.Value = rule.Value;

                            ruleViewModels.Add(ruleViewModel);
                        }

                        editablePlaylist.Rules = ruleViewModels;
                    });
                }
            }

            return editablePlaylist;
        }
 private void RemoveRule(SmartPlaylistRuleViewModel rule)
 {
     this.editablePlaylist.RemoveRule(rule);
 }