diff --git a/src/NzbDrone.Core.Test/Download/DownloadClientTests/QBittorrentTests/QBittorrentFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadClientTests/QBittorrentTests/QBittorrentFixture.cs index 972844318..328a40a9f 100644 --- a/src/NzbDrone.Core.Test/Download/DownloadClientTests/QBittorrentTests/QBittorrentFixture.cs +++ b/src/NzbDrone.Core.Test/Download/DownloadClientTests/QBittorrentTests/QBittorrentFixture.cs @@ -137,7 +137,7 @@ protected virtual void GivenTorrents(List torrents) { Mocker.GetMock() .Setup(s => s.GetTorrentProperties(torrent.Hash.ToLower(), It.IsAny())) - .Returns(new QBittorrentTorrentProperties { SavePath = torrent.SavePath }); + .Returns(new QBittorrentTorrentProperties { ContentPath = torrent.ContentPath, SavePath = torrent.SavePath }); Mocker.GetMock() .Setup(s => s.GetTorrentFiles(torrent.Hash.ToLower(), It.IsAny())) @@ -425,7 +425,7 @@ public void api_261_should_use_content_path() Size = 1000, Progress = 0.7, Eta = 8640000, - State = "stalledDL", + State = "pausedUP", Label = "", SavePath = @"C:\Torrents".AsOsAgnostic(), ContentPath = @"C:\Torrents\Droned.S01.12".AsOsAgnostic() diff --git a/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrent.cs b/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrent.cs index c098ae01d..aae0a7a83 100644 --- a/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrent.cs +++ b/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrent.cs @@ -302,19 +302,6 @@ public override IEnumerable GetItems() 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); } @@ -328,9 +315,22 @@ public override void RemoveItem(DownloadClientItem item, bool deleteData) 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; } @@ -341,11 +341,6 @@ public override DownloadClientItem GetImportItem(DownloadClientItem item, Downlo 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) @@ -354,10 +349,9 @@ public override DownloadClientItem GetImportItem(DownloadClientItem item, Downlo } 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() diff --git a/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentTorrent.cs b/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentTorrent.cs index 92e6c7e02..ec5349680 100644 --- a/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentTorrent.cs +++ b/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentTorrent.cs @@ -48,6 +48,9 @@ public class QBittorrentTorrentProperties [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