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