Exemplo n.º 1
0
        public ActionResult Artist(string name)
        {
            var artist = _library.Library.Artists.Single(a => a.Name == name);
            var model  = new LibraryArtistViewModel(
                artist,
                Url.Action(nameof(PlayArtist), new { name = artist.Name }),
                a => Url.Action(nameof(PlayAlbum), new { artist = artist.Name, title = a.Title, releaseType = a.ReleaseType }),
                a => Url.Action(nameof(Album), new { artist = artist.Name, title = a.Title, releaseType = a.ReleaseType }));

            return(PartialView("_Artist", model));
        }
Exemplo n.º 2
0
        public LibraryViewModel(Common.Singletons.Library library, ILibrarySortingService librarySortingService, IPlayRequestHandler playRequestHandler,
                                LibraryArtistViewModel artistViewModel, LibraryTracksViewModel tracksViewModel)
            : base(TabType.Library, IconType.Book, Resources.TabTitleLibrary)
        {
            _library = library;
            _librarySortingService = librarySortingService;
            _playRequestHandler    = playRequestHandler;

            Artists         = new List <Artist>();
            ArtistViewModel = artistViewModel;
            TracksViewModel = tracksViewModel;
            ArtistTypeAlbum = true;

            ShuffleArtistCommand = new RelayCommand <Artist>(OnShuffleArtist);

            _library.Updated += OnLibraryUpdated;
        }
Exemplo n.º 3
0
        public async Task <IDictionary <char, List <LibraryArtistViewModel> > > GetAllArtistsAsync()
        {
            List <LibraryArtistViewModel> artists = new List <LibraryArtistViewModel>();

            await using NpgsqlConnection connection = new NpgsqlConnection(_databaseOptions.ConnectionString);
            await connection.OpenAsync();

            await using NpgsqlCommand command = new NpgsqlCommand("select a.id, a.first_name, a.last_name, \"as\".name as primary_slug, a.has_image, count(l.title) as number_of_lyrics from artists a inner join artist_slugs \"as\" on \"as\".artist_id = a.id left join lyrics l on l.artist_id = a.id where a.is_approved = true and a.is_deleted = false and \"as\".is_primary = true and l.is_approved = true and l.is_deleted = false group by a.id, \"as\".name order by a.first_name asc;", connection);

            await using NpgsqlDataReader reader = await command.ExecuteReaderAsync();

            while (await reader.ReadAsync())
            {
                LibraryArtistViewModel artist = new LibraryArtistViewModel();
                int    artistId       = Convert.ToInt32(reader[0]);
                string firstName      = Convert.ToString(reader[1]);
                string lastName       = Convert.ToString(reader[2]);
                string fullName       = _textInfo.ToTitleCase($"{firstName} {lastName}").Trim();
                string primarySlug    = Convert.ToString(reader[3]);
                bool   hasImage       = Convert.ToBoolean(reader[4]);
                int    numberOfLyrics = Convert.ToInt32(reader[5]);

                string imageUrl = ImageUrlBuilder
                                  .BuildImageUrl(hasImage, artistId, ImageSize.Small);

                string imageAlternateText = ImageUrlBuilder
                                            .GetImageAlternateText(hasImage, primarySlug);

                artist.FirstName          = firstName;
                artist.LastName           = lastName;
                artist.FullName           = fullName;
                artist.PrimarySlug        = primarySlug;
                artist.ImageUrl           = imageUrl;
                artist.ImageAlternateText = imageAlternateText;
                artist.NumberOfLyrics     = numberOfLyrics;

                artists.Add(artist);
            }

            IDictionary <char, List <LibraryArtistViewModel> > dictionary = BuildDictionary(artists);

            return(dictionary);
        }