예제 #1
0
        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;
            }));
        }
예제 #2
0
        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;
            }));
        }
예제 #3
0
        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;
            }));
        }
예제 #4
0
        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)));
            }
        }
예제 #6
0
        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;
            }));
        }
예제 #7
0
        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());
        }