private Artist[] GetMainArtists(Album album, IEnumerable <IArtistWithSupport> creditableArtists)
        {
            if (album.ArtistString.Default == ArtistHelper.VariousArtists)
            {
                return(null);
            }

            return(ArtistHelper.GetProducers(creditableArtists, AlbumHelper.IsAnimation(album.DiscType)).Select(a => a.Artist).ToArray());
        }
        private Artist[] GetMainArtists(Album album, IEnumerable <IArtistLinkWithRoles> creditableArtists)
        {
            if (album.IsVariousArtists)
            {
                return(null);
            }

            return(ArtistHelper.GetProducers(creditableArtists, AlbumHelper.GetContentFocus(album.DiscType)).Select(a => a.Artist).ToArray());
        }
Esempio n. 3
0
        private Artist[] GetMainArtists(Album album, IList <IArtistWithSupport> creditableArtists)
        {
            // "Various artists" albums will be treated as collaboration albums where only the circle/label is searched.
            if (album.ArtistString.Default == ArtistHelper.VariousArtists)
            {
                var circles = creditableArtists.Where(a => a.Artist != null && ArtistHelper.GetCategories(a).HasFlag(ArtistCategories.Circle)).Select(a => a.Artist).ToArray();

                // No circles found, try labels
                if (!circles.Any())
                {
                    circles = creditableArtists.Where(a => a.Artist != null && ArtistHelper.GetCategories(a).HasFlag(ArtistCategories.Label)).Select(a => a.Artist).ToArray();
                }

                return(circles);
            }

            return(ArtistHelper.GetProducers(creditableArtists, AlbumHelper.IsAnimation(album.DiscType)).Select(a => a.Artist).ToArray());
        }
Esempio n. 4
0
 public virtual void UpdateArtistString()
 {
     ArtistString = ArtistHelper.GetArtistString(Artists, AlbumHelper.IsAnimation(DiscType));
 }
Esempio n. 5
0
        private string GetFieldValue(string fieldName, SongInAlbum track, ContentLanguagePreference languagePreference)
        {
            var album = track.Album;

            switch (fieldName.ToLowerInvariant())
            {
            // Album title
            case "album":
                return(album.Names.SortNames[languagePreference]);

            // Artists for album
            case "albumartist":
                return(album.ArtistString[languagePreference]);

            case "album artist":                     // foobar style
                return(album.ArtistString[languagePreference]);

            case "albummaincircle":
                var circle = ArtistHelper.GetMainCircle(album.Artists.ToArray(), AlbumHelper.IsAnimation(album.DiscType));
                return(circle != null ? circle.TranslatedName[languagePreference] : GetAlbumMainProducersStr(album, languagePreference));

            // Artists for song, both producers and vocalists
            case "artist":
                return(track.Song != null ? track.Song.ArtistString[languagePreference] : string.Empty);

            case "track artist":                     // foobar style
                return(track.Song != null ? track.Song.ArtistString[languagePreference] : string.Empty);

            case "catalognum":
                return(album.OriginalRelease != null ? album.OriginalRelease.CatNum : string.Empty);

            case "disccount":
                return((album.Songs.Any() ? album.Songs.Max(s => s.DiscNumber) : 0).ToString());

            // Disc number
            case "discnumber":
                return(track.DiscNumber.ToString());

            // List of vocalists, separated by comma, with "feat." in the beginning if there are any vocalists, otherwise empty.
            case "featvocalists":
                var vocalistStr = GetVocalistStr(track, languagePreference);
                return(vocalistStr.Any() ? " feat. " + vocalistStr : string.Empty);

            case "genres":
                return(string.Join(", ", SongHelper.GetGenreTags(track).Select(t => t.NameWithSpaces)));

            // List of producers
            case "producers":
                return(GetProducerStr(track, languagePreference));

            // Album release date
            case "releasedate":
                return(track.Album.OriginalReleaseDate.ToString());

            case "releaseyear":
                return(track.Album.OriginalReleaseDate.Year.ToString());

            case "releaseevent":
                return(album.OriginalReleaseEventName);

            // Song title
            case "title":
                return(track.Song != null ? track.Song.Names.SortNames[languagePreference] : track.Name);

            case "totaltrackcount":
                return(album.Songs.Count().ToString());

            // Track number
            case "track":
                return(track.TrackNumber.ToString());

            case "tracknumber":                     // foobar style
                return(track.TrackNumber.ToString());

            // List of vocalists, separated by comma.
            case "vocalists":
                return(GetVocalistStr(track, languagePreference));

            default:
                return(string.Empty);
            }
        }
Esempio n. 6
0
        private string GetAlbumMainProducersStr(Album album, ContentLanguagePreference languagePreference)
        {
            bool isAnimation = AlbumHelper.IsAnimation(album.DiscType);

            return(ArtistHelper.GetArtistString(ArtistHelper.GetProducers(album.Artists.Where(a => !a.IsSupport), isAnimation), isAnimation)[languagePreference]);
        }
Esempio n. 7
0
        public AlbumDetails(AlbumDetailsContract contract, IUserPermissionContext permissionContext)
        {
            ParamIs.NotNull(() => contract);

            AdditionalNames            = contract.AdditionalNames;
            ArtistString               = contract.ArtistString;
            CanEdit                    = EntryPermissionManager.CanEdit(permissionContext, contract);
            CanEditPersonalDescription = contract.CanEditPersonalDescription;
            CanRemoveTagUsages         = contract.CanRemoveTagUsages;
            CommentCount               = contract.CommentCount;
            CreateDate                 = contract.CreateDate;
            Description                = contract.Description;
            Deleted                    = contract.Deleted;
            DiscType                   = contract.DiscType;
            Draft                     = contract.Status == EntryStatus.Draft;
            Hits                      = contract.Hits;
            Id                        = contract.Id;
            LatestComments            = contract.LatestComments;
            LatestReview              = contract.Stats.LatestReview;
            LatestReviewRatingScore   = contract.Stats.LatestReviewRatingScore;
            MergedTo                  = contract.MergedTo;
            Name                      = contract.Name;
            OwnedBy                   = contract.Stats.OwnedCount;
            PersonalDescriptionText   = contract.PersonalDescriptionText;
            PersonalDescriptionAuthor = contract.PersonalDescriptionAuthor;
            Pictures                  = contract.Pictures;
            PVs                       = contract.PVs;
            RatingAverage             = contract.RatingAverage;
            RatingCount               = contract.RatingCount;
            ReviewCount               = contract.Stats.ReviewCount;
            Status                    = contract.Status;
            Tags                      = contract.Tags;
            TotalLength               = contract.TotalLength;
            UserHasAlbum              = contract.AlbumForUser != null;
            Version                   = contract.Version;
            WebLinks                  = contract.WebLinks;
            WishlistedBy              = contract.Stats.WishlistCount;
            mime                      = contract.CoverPictureMime;

            var songsByDiscs = contract.Songs.GroupBy(s => s.DiscNumber);

            Discs =
                (from songsByDisc in songsByDiscs
                 let dn = songsByDisc.Key
                          select new AlbumDisc(dn, songsByDisc, contract.Discs.ContainsKey(dn) ? contract.Discs[dn] : null))
                .ToArray();

            if (contract.AlbumForUser != null)
            {
                AlbumMediaType      = contract.AlbumForUser.MediaType;
                AlbumPurchaseStatus = contract.AlbumForUser.PurchaseStatus;
                CollectionRating    = contract.AlbumForUser.Rating;
            }

            if (contract.OriginalRelease != null)
            {
                CatNum          = contract.OriginalRelease.CatNum;
                ReleaseEvent    = contract.OriginalRelease.ReleaseEvent;
                ReleaseDate     = contract.OriginalRelease.ReleaseDate;
                FullReleaseDate = ReleaseDate.Year.HasValue && ReleaseDate.Month.HasValue && ReleaseDate.Day.HasValue ? (DateTime?)new DateTime(ReleaseDate.Year.Value, ReleaseDate.Month.Value, ReleaseDate.Day.Value) : null;
            }

            var artists = contract.ArtistLinks;

            ContentFocus = AlbumHelper.GetContentFocus(DiscType);

            Bands        = artists.Where(a => a.Categories.HasFlag(ArtistCategories.Band)).ToArray();
            Circles      = artists.Where(a => a.Categories.HasFlag(ArtistCategories.Circle)).ToArray();
            Illustrators = ContentFocus == ContentFocus.Illustration ? artists.Where(a => a.Categories.HasFlag(ArtistCategories.Illustrator)).ToArray() : null;
            Labels       = artists.Where(a => a.Categories.HasFlag(ArtistCategories.Label)).ToArray();
            Producers    = artists.Where(a => a.Categories.HasFlag(ArtistCategories.Producer)).ToArray();
            Vocalists    = artists.Where(a => a.Categories.HasFlag(ArtistCategories.Vocalist)).ToArray();
            Subject      = artists.Where(a => a.Categories.HasFlag(ArtistCategories.Subject)).ToArray();
            OtherArtists = artists.Where(a => a.Categories.HasFlag(ArtistCategories.Other) ||
                                         a.Categories.HasFlag(ArtistCategories.Animator) ||
                                         (ContentFocus != ContentFocus.Illustration && a.Categories.HasFlag(ArtistCategories.Illustrator))).ToArray();

            PrimaryPV = PVHelper.PrimaryPV(PVs);
        }
Esempio n. 8
0
        protected override string GetFieldValue(string fieldName, SongInAlbum track, ContentLanguagePreference languagePreference)
        {
            var album = track.Album;

            switch (fieldName)
            {
            // Album title
            case "album":
                return(album.Names.SortNames[languagePreference]);

            case "albumid":
                return(album.Id.ToString());

            // Artists for album
            case "albumartist":
                return(album.ArtistString[languagePreference]);

            case "album artist":                     // foobar style
                return(album.ArtistString[languagePreference]);

            case "albummaincircle":
                var circle = ArtistHelper.GetMainCircle(album.Artists.ToArray(), AlbumHelper.GetContentFocus(album.DiscType));
                return(circle != null ? circle.TranslatedName[languagePreference] : GetAlbumMainProducersStr(album, languagePreference));

            case "catalognum":
                return(album.OriginalRelease != null ? album.OriginalRelease.CatNum : string.Empty);

            case "disccount":
                return((album.Songs.Any() ? album.Songs.Max(s => s.DiscNumber) : 0).ToString());

            // Disc number
            case "discnumber":
                return(track.DiscNumber.ToString());

            case "genres":
                return(string.Join(", ", SongHelper.GetGenreTags(track).Select(t => t.Names.SortNames[languagePreference])));

            // Album release date
            case "releasedate":
                return(track.Album.OriginalReleaseDate.ToString());

            case "releaseyear":
                return(track.Album.OriginalReleaseDate.Year.ToString());

            case "releaseevent":
                return(album.OriginalReleaseEvent?.TranslatedName[languagePreference]);

            // Song title
            case "title":
                return(track.Song != null ? track.Song.Names.SortNames[languagePreference] : track.Name);

            case "totaltrackcount":
                return(album.Songs.Count().ToString());

            // Track number
            case "track":
                return(track.TrackNumber.ToString());

            case "tracknumber":                     // foobar style
                return(track.TrackNumber.ToString());

            default:
                return(GetFieldValue(fieldName, (ISongLink)track, languagePreference));
            }
        }
Esempio n. 9
0
        private string GetAlbumMainProducersStr(Album album, ContentLanguagePreference languagePreference)
        {
            var focus = AlbumHelper.GetContentFocus(album.DiscType);

            return(ArtistHelper.GetArtistString(ArtistHelper.GetProducers(album.Artists.Where(a => !a.IsSupport), focus), focus)[languagePreference]);
        }
Esempio n. 10
0
 public virtual void UpdateArtistString()
 {
     ArtistString = ArtistHelper.GetArtistString(Artists, AlbumHelper.GetContentFocus(DiscType));
 }