@ -43,13 +43,6 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
_providerManager = providerManager ;
}
public Task < FileOrganizationResult > OrganizeEpisodeFile ( string path , CancellationToken cancellationToken )
{
var options = _config . GetAutoOrganizeOptions ( ) ;
return OrganizeEpisodeFile ( path , options , false , cancellationToken ) ;
}
public async Task < FileOrganizationResult > OrganizeEpisodeFile ( string path , AutoOrganizeOptions options , bool overwriteExisting , CancellationToken cancellationToken )
{
_logger . Info ( "Sorting file {0}" , path ) ;
@ -63,6 +56,8 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
FileSize = new FileInfo ( path ) . Length
} ;
try
{
if ( _libraryMonitor . IsPathLocked ( path ) )
{
result . Status = FileSortingStatus . Failure ;
@ -148,6 +143,12 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
}
await _organizationService . SaveResult ( result , CancellationToken . None ) . ConfigureAwait ( false ) ;
}
catch ( Exception ex )
{
result . Status = FileSortingStatus . Failure ;
result . StatusMessage = ex . Message ;
}
return result ;
}
@ -156,6 +157,8 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
{
var result = _organizationService . GetResult ( request . ResultId ) ;
try
{
Series series = null ;
if ( request . NewSeriesProviderIds . Count > 0 )
@ -207,6 +210,12 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
cancellationToken ) . ConfigureAwait ( false ) ;
await _organizationService . SaveResult ( result , CancellationToken . None ) . ConfigureAwait ( false ) ;
}
catch ( Exception ex )
{
result . Status = FileSortingStatus . Failure ;
result . StatusMessage = ex . Message ;
}
return result ;
}
@ -263,16 +272,15 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
var originalExtractedSeriesString = result . ExtractedName ;
try
{
// Proceed to sort the file
var newPath = await GetNewPath ( sourcePath , series , seasonNumber , episodeNumber , endingEpiosdeNumber , premiereDate , options . TvOptions , cancellationToken ) . ConfigureAwait ( false ) ;
if ( string . IsNullOrEmpty ( newPath ) )
{
var msg = string . Format ( "Unable to sort {0} because target path could not be determined." , sourcePath ) ;
result . Status = FileSortingStatus . Failure ;
result . StatusMessage = msg ;
_logger . Warn ( msg ) ;
return ;
throw new Exception ( msg ) ;
}
_logger . Info ( "Sorting file {0} to new path {1}" , sourcePath , newPath ) ;
@ -347,6 +355,14 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
}
}
}
}
catch ( Exception ex )
{
result . Status = FileSortingStatus . Failure ;
result . StatusMessage = ex . Message ;
_logger . Warn ( ex . Message ) ;
return ;
}
if ( rememberCorrection )
{
@ -505,7 +521,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
}
catch ( Exception ex )
{
var errorMsg = string . Format ( "Failed to move file from {0} to {1} ", result . OriginalPath , result . TargetPath ) ;
var errorMsg = string . Format ( "Failed to move file from {0} to {1} : {2} ", result . OriginalPath , result . TargetPath , ex . Message ) ;
result . Status = FileSortingStatus . Failure ;
result . StatusMessage = errorMsg ;
@ -616,7 +632,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
{
var msg = string . Format ( "No provider metadata found for {0} season {1} episode {2}" , series . Name , seasonNumber , episodeNumber ) ;
_logger . Warn ( msg ) ;
return null ;
throw new Exception ( msg ) ;
}
var episodeName = episode . Name ;
@ -715,6 +731,11 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
var pattern = endingEpisodeNumber . HasValue ? options . MultiEpisodeNamePattern : options . EpisodeNamePattern ;
if ( string . IsNullOrWhiteSpace ( pattern ) )
{
throw new Exception ( "GetEpisodeFileName: Configured episode name pattern is empty!" ) ;
}
var result = pattern . Replace ( "%sn" , seriesName )
. Replace ( "%s.n" , seriesName . Replace ( " " , "." ) )
. Replace ( "%s_n" , seriesName . Replace ( " " , "_" ) )
@ -759,8 +780,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
// There may be cases where reducing the title length may still not be sufficient to
// stay below maxLength
var msg = string . Format ( "Unable to generate an episode file name shorter than {0} characters to constrain to the max path limit" , maxLength ) ;
_logger . Warn ( msg ) ;
return string . Empty ;
throw new Exception ( msg ) ;
}
return result ;