private void ShowEditCriteriaPlaylistTab(CriteriaPlaylist playlist) { _returnToTab = SelectedTab; _editCriteriaPlaylistViewModel.Edit(playlist); _editCriteriaPlaylistViewModel.IsVisible = true; SetSelectedTab(_editCriteriaPlaylistViewModel); }
private void OnFavourite(CriteriaPlaylist playlist) { playlist.Favourite = !playlist.Favourite; _repository.Save(playlist); Update(); _parent.OnFavouritePlaylistsUpdated(); }
private CriteriaPlaylist CreateCriteriaPlaylist(XElement playlistXml) { var id = int.Parse(playlistXml.Attribute(PlaylistId).Value); var title = playlistXml.Attribute(PlaylistTitle).Value; var favourite = playlistXml.Attribute(PlaylistIsFavourite)?.Value == TrueValue; var playlist = new CriteriaPlaylist(id, title, favourite); var orderByProperty = playlistXml.Attribute(PlaylistOrderBy).Value; playlist.OrderByProperty = string.IsNullOrEmpty(orderByProperty) ? (PropertyName?)null : (PropertyName)Enum.Parse(typeof(PropertyName), orderByProperty); playlist.OrderByDescending = playlistXml.Attribute(PlaylistOrderByDescending).Value == TrueValue; var maxTracks = playlistXml.Attribute(PlaylistMaxTracks).Value; playlist.MaxTracks = string.IsNullOrEmpty(maxTracks) ? (int?)null : int.Parse(maxTracks); playlist.CriteriaGroups = new List <CriteriaGroup>(); foreach (var criteriaGroupXml in playlistXml.Element(PlaylistCriteriaGroups).Elements(PlaylistCriteriaGroup)) { var criteriaGroup = new CriteriaGroup(); foreach (var criteriaXml in criteriaGroupXml.Element(PlaylistArtistCriteria).Elements(PlaylistCriteria)) { criteriaGroup.ArtistCriteria.Add(GetArtistCriteria(criteriaXml)); } foreach (var criteriaXml in criteriaGroupXml.Element(PlaylistAlbumCriteria).Elements(PlaylistCriteria)) { criteriaGroup.AlbumCriteria.Add(GetAlbumCriteria(criteriaXml)); } foreach (var criteriaXml in criteriaGroupXml.Element(PlaylistDiscCriteria).Elements(PlaylistCriteria)) { criteriaGroup.DiscCriteria.Add(GetDiscCriteria(criteriaXml)); } foreach (var criteriaXml in criteriaGroupXml.Element(PlaylistTrackCriteria).Elements(PlaylistCriteria)) { criteriaGroup.TrackCriteria.Add(GetTrackCriteria(criteriaXml)); } if (criteriaGroup.TrackCriteria.Any() || criteriaGroup.DiscCriteria.Any() || criteriaGroup.AlbumCriteria.Any() || criteriaGroup.ArtistCriteria.Any()) { playlist.CriteriaGroups.Add(criteriaGroup); } } return(playlist); }
protected override bool CustomSave() { _playlist = CreatePlaylist(_playlist); _repository.Save(_playlist); return(true); }
private void OnDelete(CriteriaPlaylist playlist) { _parent.Remove(playlist); if (playlist.Favourite) { _parent.OnFavouritePlaylistsUpdated(); } }
public void Save(CriteriaPlaylist playlist) { var xml = _xmlProvider.Get() ?? CreateXmlDocument(); var criteriaPlaylistsXml = xml.Root.Element(PlaylistsCriteria); XElement playlistXml; if (playlist.Id == 0) { var playlists = criteriaPlaylistsXml.Elements(PropertyNames.Playlist); var maxId = playlists.Any() ? playlists.Max(pl => Convert.ToInt16(pl.Attribute(PlaylistId).Value)) : 0; playlist.Id = maxId + 1; playlistXml = new XElement(PropertyNames.Playlist); criteriaPlaylistsXml.Add(playlistXml); } else { playlistXml = criteriaPlaylistsXml .Elements(PropertyNames.Playlist) .Single(pl => pl.Attribute(PlaylistId).Value == playlist.Id.ToString()); } playlistXml.RemoveAll(); playlistXml.Add(new XAttribute(PlaylistId, playlist.Id)); playlistXml.Add(new XAttribute(PlaylistTitle, playlist.Title)); playlistXml.Add(new XAttribute(PlaylistIsFavourite, playlist.Favourite ? TrueValue : FalseValue)); playlistXml.Add(new XAttribute(PlaylistOrderBy, playlist.OrderByProperty?.ToString() ?? "")); playlistXml.Add(new XAttribute(PlaylistOrderByDescending, playlist.OrderByDescending ? TrueValue : FalseValue)); playlistXml.Add(new XAttribute(PlaylistMaxTracks, playlist.MaxTracks?.ToString() ?? "")); var criteriaGroupsXml = new XElement(PlaylistCriteriaGroups); playlistXml.Add(criteriaGroupsXml); foreach (var criteriaGroup in playlist.CriteriaGroups) { var criteriaGroupXml = new XElement(PlaylistCriteriaGroup); criteriaGroupXml.Add(GetCriteriaXml(criteriaGroup.ArtistCriteria, PlaylistArtistCriteria)); criteriaGroupXml.Add(GetCriteriaXml(criteriaGroup.AlbumCriteria, PlaylistAlbumCriteria)); criteriaGroupXml.Add(GetCriteriaXml(criteriaGroup.DiscCriteria, PlaylistDiscCriteria)); criteriaGroupXml.Add(GetCriteriaXml(criteriaGroup.TrackCriteria, PlaylistTrackCriteria)); criteriaGroupsXml.Add(criteriaGroupXml); } _xmlProvider.Save(xml); }
public void Delete(CriteriaPlaylist playlist) { var xml = _xmlProvider.Get(); var criteriaPlaylistsXml = xml.Root.Element(PlaylistsCriteria); var playlistXml = criteriaPlaylistsXml .Elements(PropertyNames.Playlist) .Single(pl => pl.Attribute(PlaylistId).Value == playlist.Id.ToString()); playlistXml.Remove(); _xmlProvider.Save(xml); }
public void Remove(CriteriaPlaylist playlist) { var confirmation = new ConfirmationViewModel(_messenger, "Delete Playlist Confirmation", $"Are you sure you want to delete {playlist.Title}?", ConfirmationType.YesNo); _messenger.Send(new ShowDialogMessage(confirmation)); if (!confirmation.Result) { return; } _repository.Delete(playlist); OnShow(null); }
private CriteriaPlaylist CreatePlaylist(CriteriaPlaylist playlist = null) { if (playlist == null) { playlist = new CriteriaPlaylist(0, "", false); } playlist.Title = PlaylistTitle; playlist.OrderByProperty = OrderByProperty; playlist.OrderByDescending = OrderByDescending; playlist.MaxTracks = MaxTracks; playlist.CriteriaGroups.Clear(); foreach (var group in Criteria.Where(g => g.Criteria.Any())) { var criteriaGroup = new CriteriaGroup(); foreach (var criteria in group.Criteria.Where(g => g.PropertyName != null)) { switch (criteria.PropertyOwner) { case PropertyOwner.Track: criteriaGroup.TrackCriteria.Add(_trackCriteriaService.GetTrackCriteria(criteria.PropertyName.Value, criteria.CriteriaType.Value, criteria.ValueString)); break; case PropertyOwner.Disc: criteriaGroup.DiscCriteria.Add(_trackCriteriaService.GetDiscCriteria(criteria.PropertyName.Value, criteria.CriteriaType.Value, criteria.ValueString)); break; case PropertyOwner.Album: criteriaGroup.AlbumCriteria.Add(_trackCriteriaService.GetAlbumCriteria(criteria.PropertyName.Value, criteria.CriteriaType.Value, criteria.ValueString)); break; case PropertyOwner.Artist: criteriaGroup.ArtistCriteria.Add(_trackCriteriaService.GetArtistCriteria(criteria.PropertyName.Value, criteria.CriteriaType.Value, criteria.ValueString)); break; default: throw new InvalidOperationException("Invalid property owner"); } } playlist.CriteriaGroups.Add(criteriaGroup); } return(playlist); }
public void Edit(CriteriaPlaylist playlist) { _playlist = playlist; _tags = new Lazy <List <string> >(() => _library.Artists.SelectMany(a => a.Tracks).SelectMany(t => t.Tags).Distinct().OrderBy(g => g).ToList()); _groupings = new Lazy <List <string> >(() => _library.Artists.Select(a => a.Grouping).Distinct().OrderBy(g => g).ToList()); _countries = new Lazy <List <string> >(() => _library.Artists.Select(a => a.City.Country).Distinct().OrderBy(g => g).ToList()); _states = new Lazy <List <string> >(() => _library.Artists.Select(a => a.City.State).Distinct().OrderBy(g => g).ToList()); _cities = new Lazy <List <string> >(() => _library.Artists.Select(a => a.City.Name).Distinct().OrderBy(g => g).ToList()); Set(nameof(PlaylistTitle), ref _playlistTitle, _playlist.Title); Set(nameof(OrderByProperty), ref _orderByProperty, _playlist.OrderByProperty); Set(nameof(OrderByDescending), ref _orderByDescending, _playlist.OrderByDescending); Set(nameof(MaxTracks), ref _maxTracks, _playlist.MaxTracks); Criteria = new ObservableCollection <CriteriaGroupViewModel>(); foreach (var cg in playlist.CriteriaGroups) { Criteria.Add(new CriteriaGroupViewModel(cg.TrackCriteria.OfType <Criteria>() .Concat(cg.DiscCriteria) .Concat(cg.AlbumCriteria) .Concat(cg.ArtistCriteria) .Select(c => new CriteriaViewModel(c)) .ToList())); } OnPreviewResults(false); if (!Criteria.Any()) { Criteria.Add(new CriteriaGroupViewModel(new List <CriteriaViewModel> { new CriteriaViewModel() })); } Criteria.Last().IsLastGroup = true; }
public EditCriteriaPlaylistMessage(CriteriaPlaylist playlist) { Playlist = playlist; }
private void OnPlay(CriteriaPlaylist playlist) { _playRequestHandler.PlayPlaylist(playlist.Title, _playlistService.GetTracks(playlist), SortType.Random); }
private void OnEdit(CriteriaPlaylist playlist) { _messenger.Send(new EditCriteriaPlaylistMessage(playlist)); }
private void OnAddNewPlaylist() { var newPlaylist = new CriteriaPlaylist(0, "New Playlist", false); _messenger.Send(new EditCriteriaPlaylistMessage(newPlaylist)); }
public void Delete(CriteriaPlaylist playlist) { _repository.Delete(playlist); }
public void Save(CriteriaPlaylist playlist) { _repository.Save(playlist); }