@ -76,50 +76,50 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
{
var seasonNumber = episodeInfo . SeasonNumber ;
result . ExtractedSeasonNumber = seasonNumber ;
// Passing in true will include a few extra regex's
var episodeNumber = episodeInfo . EpisodeNumber ;
result . ExtractedEpisodeNumber = episodeNumber ;
var premiereDate = episodeInfo . IsByDate ?
new DateTime ( episodeInfo . Year . Value , episodeInfo . Month . Value , episodeInfo . Day . Value ) :
( DateTime ? ) null ;
if ( episodeInfo . IsByDate | | ( seasonNumber . HasValue & & episodeNumber . HasValue ) )
{
if ( episodeInfo . IsByDate )
{
_logger . Debug ( "Extracted information from {0}. Series name {1}, Date {2}" , path , seriesName , premiereDate . Value ) ;
}
else
{
_logger . Debug ( "Extracted information from {0}. Series name {1}, Season {2}, Episode {3}" , path , seriesName , seasonNumber , episodeNumber ) ;
}
var endingEpisodeNumber = episodeInfo . EndingEpsiodeNumber ;
result . ExtractedEndingEpisodeNumber = endingEpisodeNumber ;
await OrganizeEpisode ( path ,
seriesName ,
seasonNumber ,
episodeNumber ,
endingEpisodeNumber ,
premiereDate ,
options ,
overwriteExisting ,
result ,
cancellationToken ) . ConfigureAwait ( false ) ;
}
else
{
var msg = string . Format ( "Unable to determine episode number from {0}" , path ) ;
result . Status = FileSortingStatus . Failure ;
result . StatusMessage = msg ;
_logger . Warn ( msg ) ;
}
result . ExtractedSeasonNumber = seasonNumber ;
// Passing in true will include a few extra regex's
var episodeNumber = episodeInfo . EpisodeNumber ;
result . ExtractedEpisodeNumber = episodeNumber ;
var premiereDate = episodeInfo . IsByDate ?
new DateTime ( episodeInfo . Year . Value , episodeInfo . Month . Value , episodeInfo . Day . Value ) :
( DateTime ? ) null ;
if ( episodeInfo . IsByDate | | ( seasonNumber . HasValue & & episodeNumber . HasValue ) )
{
if ( episodeInfo . IsByDate )
{
_logger . Debug ( "Extracted information from {0}. Series name {1}, Date {2}" , path , seriesName , premiereDate . Value ) ;
}
else
{
_logger . Debug ( "Extracted information from {0}. Series name {1}, Season {2}, Episode {3}" , path , seriesName , seasonNumber , episodeNumber ) ;
}
var endingEpisodeNumber = episodeInfo . EndingEpsiodeNumber ;
result . ExtractedEndingEpisodeNumber = endingEpisodeNumber ;
await OrganizeEpisode ( path ,
seriesName ,
seasonNumber ,
episodeNumber ,
endingEpisodeNumber ,
premiereDate ,
options ,
overwriteExisting ,
result ,
cancellationToken ) . ConfigureAwait ( false ) ;
}
else
{
var msg = string . Format ( "Unable to determine episode number from {0}" , path ) ;
result . Status = FileSortingStatus . Failure ;
result . StatusMessage = msg ;
_logger . Warn ( msg ) ;
}
}
else
{
@ -151,32 +151,32 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
var series = ( Series ) _libraryManager . GetItemById ( new Guid ( request . SeriesId ) ) ;
await OrganizeEpisode ( result . OriginalPath ,
series ,
request . SeasonNumber ,
request . EpisodeNumber ,
request . EndingEpisodeNumber ,
null ,
options ,
true ,
result ,
cancellationToken ) . ConfigureAwait ( false ) ;
await OrganizeEpisode ( result . OriginalPath ,
series ,
request . SeasonNumber ,
request . EpisodeNumber ,
request . EndingEpisodeNumber ,
null ,
options ,
true ,
result ,
cancellationToken ) . ConfigureAwait ( false ) ;
await _organizationService . SaveResult ( result , CancellationToken . None ) . ConfigureAwait ( false ) ;
return result ;
}
private Task OrganizeEpisode ( string sourcePath ,
string seriesName ,
int? seasonNumber ,
int? episodeNumber ,
int? endingEpiosdeNumber ,
DateTime ? premiereDate ,
TvFileOrganizationOptions options ,
bool overwriteExisting ,
FileOrganizationResult result ,
CancellationToken cancellationToken )
private Task OrganizeEpisode ( string sourcePath ,
string seriesName ,
int? seasonNumber ,
int? episodeNumber ,
int? endingEpiosdeNumber ,
DateTime ? premiereDate ,
TvFileOrganizationOptions options ,
bool overwriteExisting ,
FileOrganizationResult result ,
CancellationToken cancellationToken )
{
var series = GetMatchingSeries ( seriesName , result ) ;
@ -189,33 +189,42 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
return Task . FromResult ( true ) ;
}
return OrganizeEpisode ( sourcePath ,
series ,
seasonNumber ,
episodeNumber ,
endingEpiosdeNumber ,
premiereDate ,
options ,
overwriteExisting ,
result ,
cancellationToken ) ;
if ( ! series . ProviderIds . Any ( ) )
{
var msg = string . Format ( "Series has not yet been identified: {0}. If you just added the series, please run a library scan or use the identify feature to identify it." , seriesName ) ;
result . Status = FileSortingStatus . Failure ;
result . StatusMessage = msg ;
_logger . Warn ( msg ) ;
return Task . FromResult ( true ) ;
}
return OrganizeEpisode ( sourcePath ,
series ,
seasonNumber ,
episodeNumber ,
endingEpiosdeNumber ,
premiereDate ,
options ,
overwriteExisting ,
result ,
cancellationToken ) ;
}
private async Task OrganizeEpisode ( string sourcePath ,
Series series ,
int? seasonNumber ,
int? episodeNumber ,
int? endingEpiosdeNumber ,
DateTime ? premiereDate ,
TvFileOrganizationOptions options ,
bool overwriteExisting ,
FileOrganizationResult result ,
CancellationToken cancellationToken )
private async Task OrganizeEpisode ( string sourcePath ,
Series series ,
int? seasonNumber ,
int? episodeNumber ,
int? endingEpiosdeNumber ,
DateTime ? premiereDate ,
TvFileOrganizationOptions options ,
bool overwriteExisting ,
FileOrganizationResult result ,
CancellationToken cancellationToken )
{
_logger . Info ( "Sorting file {0} into series {1}" , sourcePath , series . Path ) ;
// Proceed to sort the file
var newPath = await GetNewPath ( sourcePath , series , seasonNumber , episodeNumber , endingEpiosdeNumber , premiereDate , options , cancellationToken ) . ConfigureAwait ( false ) ;
var newPath = await GetNewPath ( sourcePath , series , seasonNumber , episodeNumber , endingEpiosdeNumber , premiereDate , options , cancellationToken ) . ConfigureAwait ( false ) ;
if ( string . IsNullOrEmpty ( newPath ) )
{
@ -324,17 +333,17 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
}
}
private List < string > GetOtherDuplicatePaths ( string targetPath ,
Series series ,
int? seasonNumber ,
int? episodeNumber ,
int? endingEpisodeNumber )
private List < string > GetOtherDuplicatePaths ( string targetPath ,
Series series ,
int? seasonNumber ,
int? episodeNumber ,
int? endingEpisodeNumber )
{
// TODO: Support date-naming?
if ( ! seasonNumber . HasValue | | episodeNumber . HasValue )
{
return new List < string > ( ) ;
}
// TODO: Support date-naming?
if ( ! seasonNumber . HasValue | | episodeNumber . HasValue )
{
return new List < string > ( ) ;
}
var episodePaths = series . GetRecursiveChildren ( )
. OfType < Episode > ( )
@ -464,14 +473,14 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
/// <param name="endingEpisodeNumber">The ending episode number.</param>
/// <param name="options">The options.</param>
/// <returns>System.String.</returns>
private async Task < string > GetNewPath ( string sourcePath ,
Series series ,
int? seasonNumber ,
int? episodeNumber ,
int? endingEpisodeNumber ,
DateTime ? premiereDate ,
TvFileOrganizationOptions options ,
CancellationToken cancellationToken )
private async Task < string > GetNewPath ( string sourcePath ,
Series series ,
int? seasonNumber ,
int? episodeNumber ,
int? endingEpisodeNumber ,
DateTime ? premiereDate ,
TvFileOrganizationOptions options ,
CancellationToken cancellationToken )
{
var episodeInfo = new EpisodeInfo
{
@ -481,7 +490,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
MetadataLanguage = series . GetPreferredMetadataLanguage ( ) ,
ParentIndexNumber = seasonNumber ,
SeriesProviderIds = series . ProviderIds ,
PremiereDate = premiereDate
PremiereDate = premiereDate
} ;
var searchResults = await _providerManager . GetRemoteSearchResults < Episode , EpisodeInfo > ( new RemoteSearchQuery < EpisodeInfo >
@ -491,7 +500,7 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
} , cancellationToken ) . ConfigureAwait ( false ) ;
var episode = searchResults . FirstOrDefault ( ) ;
string episodeName = string . Empty ;
if ( episode = = null )
@ -503,10 +512,10 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
else
{
episodeName = episode . Name ;
}
}
seasonNumber = seasonNumber ? ? episode . ParentIndexNumber ;
episodeNumber = episodeNumber ? ? episode . IndexNumber ;
seasonNumber = seasonNumber ? ? episode . ParentIndexNumber ;
episodeNumber = episodeNumber ? ? episode . IndexNumber ;
var newPath = GetSeasonFolderPath ( series , seasonNumber . Value , options ) ;