コード例 #1
0
 private void ShowEditCriteriaPlaylistTab(CriteriaPlaylist playlist)
 {
     _returnToTab = SelectedTab;
     _editCriteriaPlaylistViewModel.Edit(playlist);
     _editCriteriaPlaylistViewModel.IsVisible = true;
     SetSelectedTab(_editCriteriaPlaylistViewModel);
 }
コード例 #2
0
 private void OnFavourite(CriteriaPlaylist playlist)
 {
     playlist.Favourite = !playlist.Favourite;
     _repository.Save(playlist);
     Update();
     _parent.OnFavouritePlaylistsUpdated();
 }
コード例 #3
0
        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);
        }
コード例 #4
0
        protected override bool CustomSave()
        {
            _playlist = CreatePlaylist(_playlist);

            _repository.Save(_playlist);

            return(true);
        }
コード例 #5
0
 private void OnDelete(CriteriaPlaylist playlist)
 {
     _parent.Remove(playlist);
     if (playlist.Favourite)
     {
         _parent.OnFavouritePlaylistsUpdated();
     }
 }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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);
        }
コード例 #10
0
        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;
        }
コード例 #11
0
 public EditCriteriaPlaylistMessage(CriteriaPlaylist playlist)
 {
     Playlist = playlist;
 }
コード例 #12
0
 private void OnPlay(CriteriaPlaylist playlist)
 {
     _playRequestHandler.PlayPlaylist(playlist.Title, _playlistService.GetTracks(playlist), SortType.Random);
 }
コード例 #13
0
 private void OnEdit(CriteriaPlaylist playlist)
 {
     _messenger.Send(new EditCriteriaPlaylistMessage(playlist));
 }
コード例 #14
0
        private void OnAddNewPlaylist()
        {
            var newPlaylist = new CriteriaPlaylist(0, "New Playlist", false);

            _messenger.Send(new EditCriteriaPlaylistMessage(newPlaylist));
        }
コード例 #15
0
 public void Delete(CriteriaPlaylist playlist)
 {
     _repository.Delete(playlist);
 }
コード例 #16
0
 public void Save(CriteriaPlaylist playlist)
 {
     _repository.Save(playlist);
 }