|
|
|
@ -2,6 +2,7 @@
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text.RegularExpressions;
|
|
|
|
|
using NLog;
|
|
|
|
|
using Ninject;
|
|
|
|
|
using NzbDrone.Core.Model;
|
|
|
|
@ -21,6 +22,8 @@ namespace NzbDrone.Core.Providers
|
|
|
|
|
private readonly EpisodeProvider _episodeProvider;
|
|
|
|
|
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
|
|
|
|
|
|
|
|
|
private static readonly Regex StatusRegex = new Regex(@"^_[\w_]*_", RegexOptions.Compiled);
|
|
|
|
|
|
|
|
|
|
private static readonly List<PostDownloadInfoModel> InfoList = new List<PostDownloadInfoModel>();
|
|
|
|
|
|
|
|
|
|
[Inject]
|
|
|
|
@ -69,6 +72,8 @@ namespace NzbDrone.Core.Providers
|
|
|
|
|
|
|
|
|
|
var folderStatus = GetPostDownloadStatusForFolder(subfolderInfo.Name);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (folderStatus == PostDownloadStatusType.Unpacking)
|
|
|
|
|
{
|
|
|
|
|
ProcessFailedOrUnpackingDownload(subfolderInfo, PostDownloadStatusType.Unpacking);
|
|
|
|
@ -86,8 +91,7 @@ namespace NzbDrone.Core.Providers
|
|
|
|
|
if (folderStatus != PostDownloadStatusType.NoError)
|
|
|
|
|
{
|
|
|
|
|
//Retry processing on the download
|
|
|
|
|
ReProcessDownload(new PostDownloadInfoModel{ Name = subfolderInfo.FullName, Status = folderStatus });
|
|
|
|
|
|
|
|
|
|
ReProcessDownload(new PostDownloadInfoModel { Name = subfolderInfo.FullName, Status = folderStatus });
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -131,7 +135,7 @@ namespace NzbDrone.Core.Providers
|
|
|
|
|
if (importedFiles.Count == 0)
|
|
|
|
|
{
|
|
|
|
|
Logger.Warn("Unable to Import new download [{0}], unable to parse episode file(s).", subfolderInfo.FullName);
|
|
|
|
|
_diskProvider.MoveDirectory(subfolderInfo.FullName,
|
|
|
|
|
_diskProvider.MoveDirectory(subfolderInfo.FullName,
|
|
|
|
|
GetNewFolderNameWithPostDownloadStatus(subfolderInfo, PostDownloadStatusType.ParseError));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -165,7 +169,7 @@ namespace NzbDrone.Core.Providers
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Remove the error prefix before processing
|
|
|
|
|
var parseResult = Parser.ParseTitle(directoryInfo.Name.Substring(GetPrefixLength(postDownloadStatus)));
|
|
|
|
|
var parseResult = Parser.ParseTitle(RemoveStatusFromFolderName(directoryInfo.Name));
|
|
|
|
|
|
|
|
|
|
parseResult.Series = _seriesProvider.FindSeries(parseResult.CleanTitle);
|
|
|
|
|
|
|
|
|
@ -215,25 +219,6 @@ namespace NzbDrone.Core.Providers
|
|
|
|
|
ProcessDownload(directoryInfo);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public int GetPrefixLength(PostDownloadStatusType postDownloadStatus)
|
|
|
|
|
{
|
|
|
|
|
//_UNPACK_ & _FAILED_ have a length of 8
|
|
|
|
|
if (postDownloadStatus == PostDownloadStatusType.Unpacking || postDownloadStatus == PostDownloadStatusType.Failed)
|
|
|
|
|
return 8;
|
|
|
|
|
|
|
|
|
|
if (postDownloadStatus == PostDownloadStatusType.Unknown)
|
|
|
|
|
return 10;
|
|
|
|
|
|
|
|
|
|
if (postDownloadStatus == PostDownloadStatusType.Processed)
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
if (postDownloadStatus == PostDownloadStatusType.NoError)
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
//Return the 11 (_NzbDrone_) + trailing underscore + postDownloadStatus length
|
|
|
|
|
return 11 + postDownloadStatus.ToString().Length;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Add(PostDownloadInfoModel model)
|
|
|
|
|
{
|
|
|
|
|
InfoList.Add(model);
|
|
|
|
@ -278,7 +263,7 @@ namespace NzbDrone.Core.Providers
|
|
|
|
|
var error = String.Format("_NzbDrone_{0}_", postDownloadStatus.ToString());
|
|
|
|
|
|
|
|
|
|
if (existingError != PostDownloadStatusType.NoError)
|
|
|
|
|
newFolderName = directoryInfo.Name.Substring(GetPrefixLength(existingError));
|
|
|
|
|
newFolderName = RemoveStatusFromFolderName(directoryInfo.Name);
|
|
|
|
|
|
|
|
|
|
if (postDownloadStatus == PostDownloadStatusType.Unknown)
|
|
|
|
|
error = "_NzbDrone_";
|
|
|
|
@ -294,5 +279,10 @@ namespace NzbDrone.Core.Providers
|
|
|
|
|
|
|
|
|
|
return Path.Combine(parent, newName);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static string RemoveStatusFromFolderName(string folderName)
|
|
|
|
|
{
|
|
|
|
|
return StatusRegex.Replace(folderName, string.Empty);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|