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