Fixed: Only apply remote path mappings for completed items in Qbit

(cherry picked from commit 583eb52ddc01b608ab6cb17e863a8830c17b7b75)
pull/2948/head
bakerboy448 1 year ago committed by Bogdan
parent 1f37c5387b
commit 05b64406a4

@ -137,7 +137,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
{
Mocker.GetMock<IQBittorrentProxy>()
.Setup(s => s.GetTorrentProperties(torrent.Hash.ToLower(), It.IsAny<QBittorrentSettings>()))
.Returns(new QBittorrentTorrentProperties { SavePath = torrent.SavePath });
.Returns(new QBittorrentTorrentProperties { ContentPath = torrent.ContentPath, SavePath = torrent.SavePath });
Mocker.GetMock<IQBittorrentProxy>()
.Setup(s => s.GetTorrentFiles(torrent.Hash.ToLower(), It.IsAny<QBittorrentSettings>()))
@ -405,7 +405,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
Size = 1000,
Progress = 0.7,
Eta = 8640000,
State = "stalledDL",
State = "pausedUP",
Label = "",
SavePath = @"C:\Torrents".AsOsAgnostic(),
ContentPath = @"C:\Torrents\Droned.S01.12".AsOsAgnostic()

@ -304,19 +304,6 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
break;
}
if (version >= new Version("2.6.1"))
{
if (torrent.ContentPath != torrent.SavePath)
{
item.OutputPath = _remotePathMappingService.RemapRemoteToLocal(Settings.Host, new OsPath(torrent.ContentPath));
}
else if (item.Status == DownloadItemStatus.Completed)
{
item.Status = DownloadItemStatus.Warning;
item.Message = "Unable to Import. Path matches client base download directory, it's possible 'Keep top-level folder' is disabled for this torrent or 'Torrent Content Layout' is NOT set to 'Original' or 'Create Subfolder'?";
}
}
queueItems.Add(item);
}
@ -330,9 +317,22 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
public override DownloadClientItem GetImportItem(DownloadClientItem item, DownloadClientItem previousImportAttempt)
{
// On API version >= 2.6.1 this is already set correctly
if (!item.OutputPath.IsEmpty)
var properties = Proxy.GetTorrentProperties(item.DownloadId.ToLower(), Settings);
var savePath = new OsPath(properties.SavePath);
var version = Proxy.GetApiVersion(Settings);
if (version >= new Version("2.6.1"))
{
if (properties.ContentPath != savePath.ToString())
{
item.OutputPath = _remotePathMappingService.RemapRemoteToLocal(Settings.Host, new OsPath(properties.ContentPath));
}
else
{
item.Status = DownloadItemStatus.Warning;
item.Message = "Unable to Import. Path matches client base download directory, it's possible 'Keep top-level folder' is disabled for this torrent or 'Torrent Content Layout' is NOT set to 'Original' or 'Create Subfolder'?";
}
return item;
}
@ -343,11 +343,6 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
return item;
}
var properties = Proxy.GetTorrentProperties(item.DownloadId.ToLower(), Settings);
var savePath = new OsPath(properties.SavePath);
var result = item.Clone();
// get the first subdirectory - QBittorrent returns `/` path separators even on windows...
var relativePath = new OsPath(files[0].Name);
while (!relativePath.Directory.IsEmpty)
@ -356,10 +351,9 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
}
var outputPath = savePath + relativePath.FileName;
item.OutputPath = _remotePathMappingService.RemapRemoteToLocal(Settings.Host, outputPath);
result.OutputPath = _remotePathMappingService.RemapRemoteToLocal(Settings.Host, outputPath);
return result;
return item;
}
public override DownloadClientInfo GetStatus()

@ -48,6 +48,9 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
[JsonProperty(PropertyName = "seeding_time")]
public long SeedingTime { get; set; } // Torrent seeding time (in seconds)
[JsonProperty(PropertyName = "content_path")]
public string ContentPath { get; set; } // Torrent save path
}
public class QBittorrentTorrentFile

Loading…
Cancel
Save