using System ;
using System.Collections.Generic ;
using MediaBrowser.Controller.Extensions ;
using MediaBrowser.Model.Serialization ;
using Microsoft.Extensions.Logging ;
namespace MediaBrowser.Controller.Entities
{
/// <summary>
/// Class Studio
/// </summary>
public class Studio : BaseItem , IItemByName
{
public override List < string > GetUserDataKeys ( )
{
var list = base . GetUserDataKeys ( ) ;
list . Insert ( 0 , GetType ( ) . Name + "-" + ( Name ? ? string . Empty ) . RemoveDiacritics ( ) ) ;
return list ;
}
public override string CreatePresentationUniqueKey ( )
{
return GetUserDataKeys ( ) [ 0 ] ;
}
/// <summary>
/// Returns the folder containing the item.
/// If the item is a folder, it returns the folder itself
/// </summary>
/// <value>The containing folder path.</value>
[IgnoreDataMember]
public override string ContainingFolderPath
{
get
{
return Path ;
}
}
[IgnoreDataMember]
public override bool IsDisplayedAsFolder
{
get
{
return true ;
}
}
[IgnoreDataMember]
public override bool SupportsAncestors
{
get
{
return false ;
}
}
public override double GetDefaultPrimaryImageAspectRatio ( )
{
double value = 16 ;
value / = 9 ;
return value ;
}
public override bool CanDelete ( )
{
return false ;
}
public override bool IsSaveLocalMetadataEnabled ( )
{
return true ;
}
public IList < BaseItem > GetTaggedItems ( InternalItemsQuery query )
{
query . StudioIds = new [ ] { Id } ;
return LibraryManager . GetItemList ( query ) ;
}
[IgnoreDataMember]
public override bool SupportsPeople
{
get
{
return false ;
}
}
public static string GetPath ( string name )
{
return GetPath ( name , true ) ;
}
public static string GetPath ( string name , bool normalizeName )
{
// Trim the period at the end because windows will have a hard time with that
var validName = normalizeName ?
FileSystem . GetValidFilename ( name ) . Trim ( ) . TrimEnd ( '.' ) :
name ;
return System . IO . Path . Combine ( ConfigurationManager . ApplicationPaths . StudioPath , validName ) ;
}
private string GetRebasedPath ( )
{
return GetPath ( System . IO . Path . GetFileName ( Path ) , false ) ;
}
public override bool RequiresRefresh ( )
{
var newPath = GetRebasedPath ( ) ;
if ( ! string . Equals ( Path , newPath , StringComparison . Ordinal ) )
{
Logger . LogDebug ( "{0} path has changed from {1} to {2}" , GetType ( ) . Name , Path , newPath ) ;
return true ;
}
return base . RequiresRefresh ( ) ;
}
/// <summary>
/// This is called before any metadata refresh and returns true or false indicating if changes were made
/// </summary>
public override bool BeforeMetadataRefresh ( bool replaceAllMetdata )
{
var hasChanges = base . BeforeMetadataRefresh ( replaceAllMetdata ) ;
var newPath = GetRebasedPath ( ) ;
if ( ! string . Equals ( Path , newPath , StringComparison . Ordinal ) )
{
Path = newPath ;
hasChanges = true ;
}
return hasChanges ;
}
}
}