You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Lidarr/src/NzbDrone.Core/Music/Model/Album.cs

112 lines
4.0 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json.Serialization;
using Equ;
using NzbDrone.Common.Extensions;
using NzbDrone.Core.Datastore;
namespace NzbDrone.Core.Music
{
public class Album : Entity<Album>
{
public Album()
{
OldForeignAlbumIds = new List<string>();
Overview = string.Empty;
Images = new List<MediaCover.MediaCover>();
Links = new List<Links>();
Genres = new List<string>();
SecondaryTypes = new List<SecondaryAlbumType>();
Ratings = new Ratings();
Artist = new Artist();
AddOptions = new AddAlbumOptions();
}
// These correspond to columns in the Albums table
// These are metadata entries
public int ArtistMetadataId { get; set; }
public string ForeignAlbumId { get; set; }
public List<string> OldForeignAlbumIds { get; set; }
public string Title { get; set; }
public string Overview { get; set; }
public string Disambiguation { get; set; }
public DateTime? ReleaseDate { get; set; }
public List<MediaCover.MediaCover> Images { get; set; }
public List<Links> Links { get; set; }
public List<string> Genres { get; set; }
public string AlbumType { get; set; }
public List<SecondaryAlbumType> SecondaryTypes { get; set; }
public Ratings Ratings { get; set; }
// These are Lidarr generated/config
public string CleanTitle { get; set; }
public int ProfileId { get; set; }
public bool Monitored { get; set; }
public bool AnyReleaseOk { get; set; }
public DateTime? LastInfoSync { get; set; }
public DateTime Added { get; set; }
[MemberwiseEqualityIgnore]
public AddAlbumOptions AddOptions { get; set; }
// These are dynamically queried from other tables
[MemberwiseEqualityIgnore]
public LazyLoaded<ArtistMetadata> ArtistMetadata { get; set; }
[MemberwiseEqualityIgnore]
public LazyLoaded<List<AlbumRelease>> AlbumReleases { get; set; }
[MemberwiseEqualityIgnore]
public LazyLoaded<Artist> Artist { get; set; }
// compatibility properties with old version of Album
[MemberwiseEqualityIgnore]
[JsonIgnore]
public int ArtistId
{
get { return Artist?.Value?.Id ?? 0; } set { Artist.Value.Id = value; }
}
public override string ToString()
{
return string.Format("[{0}][{1}]", ForeignAlbumId, Title.NullSafe());
}
public override void UseMetadataFrom(Album other)
{
ForeignAlbumId = other.ForeignAlbumId;
OldForeignAlbumIds = other.OldForeignAlbumIds;
Title = other.Title;
Overview = other.Overview.IsNullOrWhiteSpace() ? Overview : other.Overview;
Disambiguation = other.Disambiguation;
ReleaseDate = other.ReleaseDate;
Images = other.Images.Any() ? other.Images : Images;
Links = other.Links;
Genres = other.Genres;
AlbumType = other.AlbumType;
SecondaryTypes = other.SecondaryTypes;
Ratings = other.Ratings;
CleanTitle = other.CleanTitle;
}
public override void UseDbFieldsFrom(Album other)
{
Id = other.Id;
ArtistMetadataId = other.ArtistMetadataId;
ProfileId = other.ProfileId;
Monitored = other.Monitored;
AnyReleaseOk = other.AnyReleaseOk;
LastInfoSync = other.LastInfoSync;
Added = other.Added;
AddOptions = other.AddOptions;
}
public override void ApplyChanges(Album other)
{
ForeignAlbumId = other.ForeignAlbumId;
ProfileId = other.ProfileId;
AddOptions = other.AddOptions;
Monitored = other.Monitored;
AnyReleaseOk = other.AnyReleaseOk;
}
}
}