@ -4,6 +4,7 @@ using System.Globalization;
using System.IO ;
using System.Linq ;
using System.Text ;
using System.Text.Json.Serialization ;
using System.Threading ;
using System.Threading.Tasks ;
using MediaBrowser.Common.Extensions ;
@ -25,7 +26,6 @@ using MediaBrowser.Model.Library;
using MediaBrowser.Model.LiveTv ;
using MediaBrowser.Model.MediaInfo ;
using MediaBrowser.Model.Providers ;
using MediaBrowser.Model.Serialization ;
using MediaBrowser.Model.Users ;
using Microsoft.Extensions.Logging ;
@ -40,7 +40,7 @@ namespace MediaBrowser.Controller.Entities
/// The supported image extensions
/// </summary>
public static readonly string [ ] SupportedImageExtensions
= new [ ] { ".png" , ".jpg" , ".jpeg" , ".tbn" , ".gif" } ;
= new [ ] { ".png" , ".jpg" , ".jpeg" , ".tbn" , ".gif" } ;
private static readonly List < string > _supportedExtensions = new List < string > ( SupportedImageExtensions )
{
@ -98,62 +98,62 @@ namespace MediaBrowser.Controller.Entities
SampleFolderName
} ;
[ IgnoreDataMember ]
[ Json Ignore]
public Guid [ ] ThemeSongIds { get ; set ; }
[ IgnoreDataMember ]
[ Json Ignore]
public Guid [ ] ThemeVideoIds { get ; set ; }
[ IgnoreDataMember ]
[ Json Ignore]
public string PreferredMetadataCountryCode { get ; set ; }
[ IgnoreDataMember ]
[ Json Ignore]
public string PreferredMetadataLanguage { get ; set ; }
public long? Size { get ; set ; }
public string Container { get ; set ; }
[ IgnoreDataMember ]
[ Json Ignore]
public string Tagline { get ; set ; }
[ IgnoreDataMember ]
[ Json Ignore]
public virtual ItemImageInfo [ ] ImageInfos { get ; set ; }
[ IgnoreDataMember ]
[ Json Ignore]
public bool IsVirtualItem { get ; set ; }
/// <summary>
/// Gets or sets the album.
/// </summary>
/// <value>The album.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public string Album { get ; set ; }
/// <summary>
/// Gets or sets the channel identifier.
/// </summary>
/// <value>The channel identifier.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public Guid ChannelId { get ; set ; }
[ IgnoreDataMember ]
[ Json Ignore]
public virtual bool SupportsAddingToPlaylist = > false ;
[ IgnoreDataMember ]
[ Json Ignore]
public virtual bool AlwaysScanInternalMetadataPath = > false ;
/// <summary>
/// Gets a value indicating whether this instance is in mixed folder.
/// </summary>
/// <value><c>true</c> if this instance is in mixed folder; otherwise, <c>false</c>.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public bool IsInMixedFolder { get ; set ; }
[ IgnoreDataMember ]
[ Json Ignore]
public virtual bool SupportsPlayedStatus = > false ;
[ IgnoreDataMember ]
[ Json Ignore]
public virtual bool SupportsPositionTicksResume = > false ;
[ IgnoreDataMember ]
[ Json Ignore]
public virtual bool SupportsRemoteImageDownloading = > true ;
private string _name ;
@ -161,7 +161,7 @@ namespace MediaBrowser.Controller.Entities
/// Gets or sets the name.
/// </summary>
/// <value>The name.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public virtual string Name
{
get = > _name ;
@ -174,35 +174,35 @@ namespace MediaBrowser.Controller.Entities
}
}
[ IgnoreDataMember ]
[ Json Ignore]
public bool IsUnaired = > PremiereDate . HasValue & & PremiereDate . Value . ToLocalTime ( ) . Date > = DateTime . Now . Date ;
[ IgnoreDataMember ]
[ Json Ignore]
public int? TotalBitrate { get ; set ; }
[ IgnoreDataMember ]
[ Json Ignore]
public ExtraType ? ExtraType { get ; set ; }
[ IgnoreDataMember ]
[ Json Ignore]
public bool IsThemeMedia = > ExtraType . HasValue & & ( ExtraType . Value = = Model . Entities . ExtraType . ThemeSong | | ExtraType . Value = = Model . Entities . ExtraType . ThemeVideo ) ;
[ IgnoreDataMember ]
[ Json Ignore]
public string OriginalTitle { get ; set ; }
/// <summary>
/// Gets or sets the id.
/// </summary>
/// <value>The id.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public Guid Id { get ; set ; }
[ IgnoreDataMember ]
[ Json Ignore]
public Guid OwnerId { get ; set ; }
/// <summary>
/// Gets or sets the audio.
/// </summary>
/// <value>The audio.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public ProgramAudio ? Audio { get ; set ; }
/// <summary>
@ -210,7 +210,7 @@ namespace MediaBrowser.Controller.Entities
/// Default is based on the type for everything except actual generic folders.
/// </summary>
/// <value>The display prefs id.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public virtual Guid DisplayPreferencesId
{
get
@ -224,10 +224,10 @@ namespace MediaBrowser.Controller.Entities
/// Gets or sets the path.
/// </summary>
/// <value>The path.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public virtual string Path { get ; set ; }
[ IgnoreDataMember ]
[ Json Ignore]
public virtual SourceType SourceType
{
get
@ -245,7 +245,7 @@ namespace MediaBrowser.Controller.Entities
/// Returns the folder containing the item.
/// If the item is a folder, it returns the folder itself
/// </summary>
[ IgnoreDataMember ]
[ Json Ignore]
public virtual string ContainingFolderPath
{
get
@ -263,26 +263,26 @@ namespace MediaBrowser.Controller.Entities
/// Gets or sets the name of the service.
/// </summary>
/// <value>The name of the service.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public string ServiceName { get ; set ; }
/// <summary>
/// If this content came from an external service, the id of the content on that service
/// </summary>
[ IgnoreDataMember ]
[ Json Ignore]
public string ExternalId { get ; set ; }
[ IgnoreDataMember ]
[ Json Ignore]
public string ExternalSeriesId { get ; set ; }
/// <summary>
/// Gets or sets the etag.
/// </summary>
/// <value>The etag.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public string ExternalEtag { get ; set ; }
[ IgnoreDataMember ]
[ Json Ignore]
public virtual bool IsHidden = > false ;
public BaseItem GetOwner ( )
@ -295,7 +295,7 @@ namespace MediaBrowser.Controller.Entities
/// Gets or sets the type of the location.
/// </summary>
/// <value>The type of the location.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public virtual LocationType LocationType
{
get
@ -320,7 +320,7 @@ namespace MediaBrowser.Controller.Entities
}
}
[ IgnoreDataMember ]
[ Json Ignore]
public MediaProtocol ? PathProtocol
{
get
@ -343,13 +343,13 @@ namespace MediaBrowser.Controller.Entities
return current . HasValue & & current . Value = = protocol ;
}
[ IgnoreDataMember ]
[ Json Ignore]
public bool IsFileProtocol = > IsPathProtocol ( MediaProtocol . File ) ;
[ IgnoreDataMember ]
[ Json Ignore]
public bool HasPathProtocol = > PathProtocol . HasValue ;
[ IgnoreDataMember ]
[ Json Ignore]
public virtual bool SupportsLocalMetadata
{
get
@ -363,7 +363,7 @@ namespace MediaBrowser.Controller.Entities
}
}
[ IgnoreDataMember ]
[ Json Ignore]
public virtual string FileNameWithoutExtension
{
get
@ -377,7 +377,7 @@ namespace MediaBrowser.Controller.Entities
}
}
[ IgnoreDataMember ]
[ Json Ignore]
public virtual bool EnableAlphaNumericSorting = > true ;
private List < Tuple < StringBuilder , bool > > GetSortChunks ( string s1 )
@ -418,7 +418,7 @@ namespace MediaBrowser.Controller.Entities
/// This is just a helper for convenience
/// </summary>
/// <value>The primary image path.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public string PrimaryImagePath = > this . GetImagePath ( ImageType . Primary ) ;
public bool IsMetadataFetcherEnabled ( LibraryOptions libraryOptions , string name )
@ -544,20 +544,20 @@ namespace MediaBrowser.Controller.Entities
/// Gets or sets the date created.
/// </summary>
/// <value>The date created.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public DateTime DateCreated { get ; set ; }
/// <summary>
/// Gets or sets the date modified.
/// </summary>
/// <value>The date modified.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public DateTime DateModified { get ; set ; }
[ IgnoreDataMember ]
[ Json Ignore]
public DateTime DateLastSaved { get ; set ; }
[ IgnoreDataMember ]
[ Json Ignore]
public DateTime DateLastRefreshed { get ; set ; }
/// <summary>
@ -583,24 +583,24 @@ namespace MediaBrowser.Controller.Entities
return Name ;
}
[ IgnoreDataMember ]
[ Json Ignore]
public bool IsLocked { get ; set ; }
/// <summary>
/// Gets or sets the locked fields.
/// </summary>
/// <value>The locked fields.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public MetadataFields [ ] LockedFields { get ; set ; }
/// <summary>
/// Gets the type of the media.
/// </summary>
/// <value>The type of the media.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public virtual string MediaType = > null ;
[ IgnoreDataMember ]
[ Json Ignore]
public virtual string [ ] PhysicalLocations
{
get
@ -619,7 +619,7 @@ namespace MediaBrowser.Controller.Entities
/// Gets or sets the name of the forced sort.
/// </summary>
/// <value>The name of the forced sort.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public string ForcedSortName
{
get = > _forcedSortName ;
@ -631,7 +631,7 @@ namespace MediaBrowser.Controller.Entities
/// Gets the name of the sort.
/// </summary>
/// <value>The name of the sort.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public string SortName
{
get
@ -744,7 +744,7 @@ namespace MediaBrowser.Controller.Entities
return builder . ToString ( ) . RemoveDiacritics ( ) ;
}
[ IgnoreDataMember ]
[ Json Ignore]
public bool EnableMediaSourceDisplay
{
get
@ -758,14 +758,14 @@ namespace MediaBrowser.Controller.Entities
}
}
[ IgnoreDataMember ]
[ Json Ignore]
public Guid ParentId { get ; set ; }
/// <summary>
/// Gets or sets the parent.
/// </summary>
/// <value>The parent.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public Folder Parent
{
get = > GetParent ( ) as Folder ;
@ -822,7 +822,7 @@ namespace MediaBrowser.Controller.Entities
return null ;
}
[ IgnoreDataMember ]
[ Json Ignore]
public virtual Guid DisplayParentId
{
get
@ -832,7 +832,7 @@ namespace MediaBrowser.Controller.Entities
}
}
[ IgnoreDataMember ]
[ Json Ignore]
public BaseItem DisplayParent
{
get
@ -850,97 +850,97 @@ namespace MediaBrowser.Controller.Entities
/// When the item first debuted. For movies this could be premiere date, episodes would be first aired
/// </summary>
/// <value>The premiere date.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public DateTime ? PremiereDate { get ; set ; }
/// <summary>
/// Gets or sets the end date.
/// </summary>
/// <value>The end date.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public DateTime ? EndDate { get ; set ; }
/// <summary>
/// Gets or sets the official rating.
/// </summary>
/// <value>The official rating.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public string OfficialRating { get ; set ; }
[ IgnoreDataMember ]
[ Json Ignore]
public int InheritedParentalRatingValue { get ; set ; }
/// <summary>
/// Gets or sets the critic rating.
/// </summary>
/// <value>The critic rating.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public float? CriticRating { get ; set ; }
/// <summary>
/// Gets or sets the custom rating.
/// </summary>
/// <value>The custom rating.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public string CustomRating { get ; set ; }
/// <summary>
/// Gets or sets the overview.
/// </summary>
/// <value>The overview.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public string Overview { get ; set ; }
/// <summary>
/// Gets or sets the studios.
/// </summary>
/// <value>The studios.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public string [ ] Studios { get ; set ; }
/// <summary>
/// Gets or sets the genres.
/// </summary>
/// <value>The genres.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public string [ ] Genres { get ; set ; }
/// <summary>
/// Gets or sets the tags.
/// </summary>
/// <value>The tags.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public string [ ] Tags { get ; set ; }
[ IgnoreDataMember ]
[ Json Ignore]
public string [ ] ProductionLocations { get ; set ; }
/// <summary>
/// Gets or sets the home page URL.
/// </summary>
/// <value>The home page URL.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public string HomePageUrl { get ; set ; }
/// <summary>
/// Gets or sets the community rating.
/// </summary>
/// <value>The community rating.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public float? CommunityRating { get ; set ; }
/// <summary>
/// Gets or sets the run time ticks.
/// </summary>
/// <value>The run time ticks.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public long? RunTimeTicks { get ; set ; }
/// <summary>
/// Gets or sets the production year.
/// </summary>
/// <value>The production year.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public int? ProductionYear { get ; set ; }
/// <summary>
@ -948,20 +948,20 @@ namespace MediaBrowser.Controller.Entities
/// This could be episode number, album track number, etc.
/// </summary>
/// <value>The index number.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public int? IndexNumber { get ; set ; }
/// <summary>
/// For an episode this could be the season number, or for a song this could be the disc number.
/// </summary>
/// <value>The parent index number.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public int? ParentIndexNumber { get ; set ; }
[ IgnoreDataMember ]
[ Json Ignore]
public virtual bool HasLocalAlternateVersions = > false ;
[ IgnoreDataMember ]
[ Json Ignore]
public string OfficialRatingForComparison
{
get
@ -982,7 +982,7 @@ namespace MediaBrowser.Controller.Entities
}
}
[ IgnoreDataMember ]
[ Json Ignore]
public string CustomRatingForComparison
{
get
@ -1407,13 +1407,13 @@ namespace MediaBrowser.Controller.Entities
}
}
[ IgnoreDataMember ]
[ Json Ignore]
protected virtual bool SupportsOwnedItems = > ! ParentId . Equals ( Guid . Empty ) & & IsFileProtocol ;
[ IgnoreDataMember ]
[ Json Ignore]
public virtual bool SupportsPeople = > false ;
[ IgnoreDataMember ]
[ Json Ignore]
public virtual bool SupportsThemeMedia = > false ;
/// <summary>
@ -1613,10 +1613,10 @@ namespace MediaBrowser.Controller.Entities
/// Gets or sets the provider ids.
/// </summary>
/// <value>The provider ids.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public Dictionary < string , string > ProviderIds { get ; set ; }
[ IgnoreDataMember ]
[ Json Ignore]
public virtual Folder LatestItemsIndexContainer = > null ;
public virtual double GetDefaultPrimaryImageAspectRatio ( )
@ -1629,7 +1629,7 @@ namespace MediaBrowser.Controller.Entities
return Id . ToString ( "N" , CultureInfo . InvariantCulture ) ;
}
[ IgnoreDataMember ]
[ Json Ignore]
public string PresentationUniqueKey { get ; set ; }
public string GetPresentationUniqueKey ( )
@ -1934,7 +1934,7 @@ namespace MediaBrowser.Controller.Entities
return IsVisibleStandaloneInternal ( user , true ) ;
}
[ IgnoreDataMember ]
[ Json Ignore]
public virtual bool SupportsInheritedParentImages = > false ;
protected bool IsVisibleStandaloneInternal ( User user , bool checkFolders )
@ -1977,10 +1977,10 @@ namespace MediaBrowser.Controller.Entities
/// Gets a value indicating whether this instance is folder.
/// </summary>
/// <value><c>true</c> if this instance is folder; otherwise, <c>false</c>.</value>
[ IgnoreDataMember ]
[ Json Ignore]
public virtual bool IsFolder = > false ;
[ IgnoreDataMember ]
[ Json Ignore]
public virtual bool IsDisplayedAsFolder = > false ;
public virtual string GetClientTypeName ( )
@ -2066,7 +2066,7 @@ namespace MediaBrowser.Controller.Entities
return null ;
}
[ IgnoreDataMember ]
[ Json Ignore]
public virtual bool EnableRememberingTrackSelections = > true ;
/// <summary>
@ -2776,7 +2776,7 @@ namespace MediaBrowser.Controller.Entities
return null ;
}
[ IgnoreDataMember ]
[ Json Ignore]
public virtual bool IsTopParent
{
get
@ -2804,10 +2804,10 @@ namespace MediaBrowser.Controller.Entities
}
}
[ IgnoreDataMember ]
[ Json Ignore]
public virtual bool SupportsAncestors = > true ;
[ IgnoreDataMember ]
[ Json Ignore]
public virtual bool StopRefreshIfLocalMetadataFound = > true ;
public virtual IEnumerable < Guid > GetIdsForAncestorQuery ( )