public ArtistDetailsContract GetDetails(int id) { return(HandleQuery(session => { var artist = session.Load(id); var stats = session.Query() .Where(a => a.Id == id) .Select(a => new { CommentCount = a.Comments.Count, FollowCount = a.Users.Count }) .FirstOrDefault(); if (stats == null) { EntityNotFoundException.Throw <Artist>(id); } var contract = new ArtistDetailsContract(artist, LanguagePreference) { CommentCount = stats.CommentCount, FollowCount = stats.FollowCount, SharedStats = GetSharedArtistStats(session, artist), PersonalStats = GetPersonalArtistStats(session, artist) }; if (PermissionContext.LoggedUser != null) { var subscription = session.OfType <ArtistForUser>().Query().FirstOrDefault(s => s.Artist.Id == id && s.User.Id == PermissionContext.LoggedUser.Id); if (subscription != null) { contract.IsAdded = true; contract.EmailNotifications = subscription.EmailNotifications; contract.SiteNotifications = subscription.SiteNotifications; } } var relations = (new ArtistRelationsQuery(session, LanguagePreference)).GetRelations(artist, ArtistRelationsFields.All); contract.LatestAlbums = relations.LatestAlbums; contract.TopAlbums = relations.PopularAlbums; contract.LatestSongs = relations.LatestSongs; contract.TopSongs = relations.PopularSongs; contract.LatestComments = session.OfType <ArtistComment>().Query() .Where(c => c.Artist.Id == id) .OrderByDescending(c => c.Created) .Take(3) .ToArray() .Select(c => new CommentContract(c)).ToArray(); if (artist.Deleted) { var mergeEntry = GetMergeRecord(session, id); contract.MergedTo = (mergeEntry != null ? new ArtistContract(mergeEntry.Target, LanguagePreference) : null); } return contract; })); }
public ArtistDetailsContract GetDetails(int id) { return(HandleQuery(session => { var artist = session.Load(id); var stats = session.Query() .Where(a => a.Id == id) .Select(a => new { CommentCount = a.Comments.Count, }) .FirstOrDefault(); if (stats == null) { EntityNotFoundException.Throw <Artist>(id); } var contract = new ArtistDetailsContract(artist, LanguagePreference) { CommentCount = stats.CommentCount, SharedStats = GetSharedArtistStats(session, artist), PersonalStats = GetPersonalArtistStats(session, artist), AdvancedStats = GetAdvancedStats(session, artist) }; if (PermissionContext.IsLoggedIn) { var subscription = session.OfType <ArtistForUser>() .Query() .FirstOrDefault(s => s.Artist.Id == id && s.User.Id == PermissionContext.LoggedUserId); if (subscription != null) { contract.IsAdded = true; contract.EmailNotifications = subscription.EmailNotifications; contract.SiteNotifications = subscription.SiteNotifications; } } var relations = (new ArtistRelationsQuery(session, LanguagePreference)).GetRelations(artist, ArtistRelationsFields.All); contract.LatestAlbums = relations.LatestAlbums; contract.TopAlbums = relations.PopularAlbums; contract.LatestSongs = relations.LatestSongs; contract.TopSongs = relations.PopularSongs; // If song and album counts are out of date and we know there's more albums/songs than that, update counts. contract.SharedStats.AlbumCount = Math.Max(contract.SharedStats.AlbumCount, contract.LatestAlbums.Length + contract.TopAlbums.Length); contract.SharedStats.SongCount = Math.Max(contract.SharedStats.SongCount, contract.LatestSongs.Length + contract.TopSongs.Length); contract.LatestComments = Comments(session).GetList(id, 3); if (artist.Deleted) { var mergeEntry = GetMergeRecord(session, id); contract.MergedTo = (mergeEntry != null ? new ArtistContract(mergeEntry.Target, LanguagePreference) : null); } return contract; })); }
public ArtistDetailsContract GetArtistDetails(int id) { return(HandleQuery(session => { var contract = new ArtistDetailsContract(session.Load <Artist>(id), PermissionContext.LanguagePreference); if (PermissionContext.LoggedUser != null) { contract.IsAdded = session.Query <ArtistForUser>() .Any(s => s.Artist.Id == id && s.User.Id == PermissionContext.LoggedUser.Id); } contract.CommentCount = session.Query <ArtistComment>().Where(c => c.Artist.Id == id).Count(); contract.LatestAlbums = session.Query <ArtistForAlbum>() .Where(s => !s.Album.Deleted && s.Artist.Id == id && !s.IsSupport) .Select(s => s.Album) .OrderByDescending(s => s.CreateDate) .Take(6).ToArray() .Select(s => new AlbumContract(s, PermissionContext.LanguagePreference)) .ToArray(); contract.LatestSongs = session.Query <ArtistForSong>() .Where(s => !s.Song.Deleted && s.Artist.Id == id && !s.IsSupport) .Select(s => s.Song) .OrderByDescending(s => s.CreateDate) .Take(8).ToArray() .Select(s => new SongContract(s, PermissionContext.LanguagePreference)) .ToArray(); contract.TopAlbums = session.Query <ArtistForAlbum>() .Where(s => !s.Album.Deleted && s.Artist.Id == id && !s.IsSupport && s.Album.RatingAverageInt > 0) .Select(s => s.Album) .OrderByDescending(s => s.RatingAverageInt) .ThenByDescending(s => s.RatingCount) .Take(6).ToArray() .Where(a => contract.LatestAlbums.All(a2 => a.Id != a2.Id)) .Select(s => new AlbumContract(s, PermissionContext.LanguagePreference)) .ToArray(); contract.TopSongs = session.Query <ArtistForSong>() .Where(s => !s.Song.Deleted && s.Artist.Id == id && !s.IsSupport && s.Song.RatingScore > 0) .Select(s => s.Song) .OrderByDescending(s => s.RatingScore) .Take(8).ToArray() .Where(a => contract.LatestSongs.All(a2 => a.Id != a2.Id)) .Select(s => new SongContract(s, PermissionContext.LanguagePreference)) .ToArray(); contract.LatestComments = session.Query <ArtistComment>() .Where(c => c.Artist.Id == id).OrderByDescending(c => c.Created).Take(3) .ToArray() .Select(c => new CommentContract(c)).ToArray(); return contract; })); }
private void AddVoicebankDetails(StringBuilder sb, ArtistDetailsContract artist) { if (artist.ReleaseDate.HasValue) { sb.AppendFormat(" Released {0}.", artist.ReleaseDate.Value.ToShortDateString()); } if (artist.VoiceProvider != null) { sb.AppendFormat(" Voice provider: {0}.", artist.VoiceProvider.Name); } }
private void AddVoicebankDetails(StringBuilder sb, ArtistDetailsContract artist) { if (artist.ReleaseDate.HasValue) { sb.AppendFormat(" Released {0}.", artist.ReleaseDate.Value.ToShortDateString()); } if (artist.VoiceProviders.Any()) { sb.AppendFormat(" Voice provider: {0}.", string.Join(", ", artist.VoiceProviders.Select(a => a.Name))); } }
public ArtistDetailsContract GetDetails(int id, string hostname) { return(HandleQuery(session => { var artist = session.Load(id); var contract = new ArtistDetailsContract(artist, LanguagePreference, PermissionContext, _imageUrlFactory, new EntryTypeTags(session).GetTag(EntryType.Artist, artist.ArtistType)) { CommentCount = Comments(session).GetCount(id), SharedStats = GetSharedArtistStats(session, artist), PersonalStats = GetPersonalArtistStats(session, artist), AdvancedStats = GetAdvancedStats(session, artist) }; if (PermissionContext.IsLoggedIn) { var subscription = session.OfType <ArtistForUser>() .Query() .FirstOrDefault(s => s.Artist.Id == id && s.User.Id == PermissionContext.LoggedUserId); if (subscription != null) { contract.IsAdded = true; contract.EmailNotifications = subscription.EmailNotifications; contract.SiteNotifications = subscription.SiteNotifications; } } var relations = (new ArtistRelationsQuery(session, LanguagePreference, _cache, _imageUrlFactory)).GetRelations(artist, ArtistRelationsFields.All); contract.LatestAlbums = relations.LatestAlbums; contract.TopAlbums = relations.PopularAlbums; contract.LatestSongs = relations.LatestSongs; contract.TopSongs = relations.PopularSongs; contract.LatestEvents = relations.LatestEvents; // If song and album counts are out of date and we know there's more albums/songs than that, update counts. contract.SharedStats.AlbumCount = Math.Max(contract.SharedStats.AlbumCount, contract.LatestAlbums.Length + contract.TopAlbums.Length); contract.SharedStats.SongCount = Math.Max(contract.SharedStats.SongCount, contract.LatestSongs.Length + contract.TopSongs.Length); contract.LatestComments = Comments(session).GetList(id, 3); if (artist.Deleted) { var mergeEntry = GetMergeRecord(session, id); contract.MergedTo = (mergeEntry != null ? new ArtistContract(mergeEntry.Target, LanguagePreference) : null); } new CreateEntryHitQuery().CreateHit(session, artist, hostname, PermissionContext, (a, agent) => new ArtistHit(a, agent)); return contract; })); }
public string GenerateDescription(ArtistDetailsContract artist, string original, TranslateableEnum <ArtistType> artistTypeNames) { var sb = new StringBuilder(original); // Note: if original description is not empty, artist type is added to title instead of description if (string.IsNullOrEmpty(original)) { sb.AppendFormat("{0}.", artistTypeNames[artist.ArtistType]); } AddVoicebankDetails(sb, artist); return(sb.ToString()); }