CustomTransfer mimicking MountTransfer.cs

This commit is contained in:
Taloth Saldono 2017-12-16 12:38:18 +01:00
parent 5c1491ca06
commit 2f02f0a92d
3 changed files with 64 additions and 15 deletions

View File

@ -1,6 +1,10 @@
using System; using System;
using System.IO;
using System.Linq; using System.Linq;
using FluentValidation.Results; using FluentValidation.Results;
using NLog;
using NzbDrone.Common.Disk;
using NzbDrone.Core.Download;
using NzbDrone.Core.ThingiProvider; using NzbDrone.Core.ThingiProvider;
using NzbDrone.Core.Validation; using NzbDrone.Core.Validation;
@ -25,19 +29,55 @@ namespace NzbDrone.Core.TransferProviders.Providers
public class CustomTransfer : TransferProviderBase<CustomTransferSettings> public class CustomTransfer : TransferProviderBase<CustomTransferSettings>
{ {
public override string Link private readonly Logger _logger;
{ private readonly IDiskProvider _diskProvider;
get { throw new NotImplementedException(); } private readonly IDiskTransferService _transferService;
}
public override string Name public override string Name => "Mount";
public CustomTransfer(IDiskTransferService transferService, IDiskProvider diskProvider, Logger logger)
{ {
get { throw new NotImplementedException(); } _logger = logger;
_diskProvider = diskProvider;
_transferService = transferService;
} }
public override ValidationResult Test() public override ValidationResult Test()
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public override bool IsAvailable(DownloadClientPath item)
{
if (item == null) return false;
var path = ResolvePath(item);
if (path == null)
{
return false;
}
return _diskProvider.FolderExists(path) || _diskProvider.FileExists(path);
}
// TODO: Give MountVirtualDiskProvider the tempPath.
public override IVirtualDiskProvider GetFileSystemWrapper(DownloadClientPath item, string tempPath = null)
{
var path = ResolvePath(item);
if (_diskProvider.FolderExists(path) || _diskProvider.FileExists(path))
{
// Expose a virtual filesystem with only that directory/file in it.
// This allows the caller to delete the directory if desired, but not it's siblings.
return new MountVirtualDiskProvider(_diskProvider, _transferService, Path.GetDirectoryName(path), path);
}
return new EmptyVirtualDiskProvider();
}
protected string ResolvePath(DownloadClientPath path)
{
return ResolvePath(path.Path, Settings.DownloadClientPath, Settings.LocalPath);
}
} }
} }

View File

@ -72,15 +72,7 @@ namespace NzbDrone.Core.TransferProviders.Providers
protected string ResolvePath(DownloadClientPath path) protected string ResolvePath(DownloadClientPath path)
{ {
var remotePath = path.Path; return ResolvePath(path.Path, Settings.DownloadClientPath, Settings.MountPath);
if (new OsPath(Settings.DownloadClientPath).Contains(remotePath))
{
var localPath = new OsPath(Settings.MountPath) + (remotePath - new OsPath(Settings.DownloadClientPath));
return localPath.FullPath;
}
return null;
} }
} }
} }

View File

@ -2,6 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using FluentValidation.Results; using FluentValidation.Results;
using NzbDrone.Common.Disk;
using NzbDrone.Core.Download; using NzbDrone.Core.Download;
using NzbDrone.Core.ThingiProvider; using NzbDrone.Core.ThingiProvider;
@ -21,5 +22,21 @@ namespace NzbDrone.Core.TransferProviders
public abstract bool IsAvailable(DownloadClientPath item); public abstract bool IsAvailable(DownloadClientPath item);
public abstract IVirtualDiskProvider GetFileSystemWrapper(DownloadClientPath item, string tempPath = null); public abstract IVirtualDiskProvider GetFileSystemWrapper(DownloadClientPath item, string tempPath = null);
protected static string ResolvePath(OsPath path, string currentParent, string newParent)
{
var currentParentPath = new OsPath(currentParent);
var newParentPath = new OsPath(newParent);
if (!currentParentPath.Contains(path))
{
return null;
}
var newPath = newParentPath + (path - currentParentPath);
return newPath.FullPath;
}
} }
} }