mirror of
https://github.com/lidarr/lidarr.git
synced 2025-08-23 06:45:19 -07:00
SABnzbd 2.0 API compatibility (#1339)
* Fixed: Sabnzbd 2.0 api compatibility. closes #1775 * fixed sab tests. * Fixed: Sabnzbd error when tv sorting enabled for all categories.
This commit is contained in:
parent
3403ddf993
commit
cb596488f2
8 changed files with 202 additions and 48 deletions
|
@ -23,6 +23,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.SabnzbdTests
|
||||||
private SabnzbdHistory _failed;
|
private SabnzbdHistory _failed;
|
||||||
private SabnzbdHistory _completed;
|
private SabnzbdHistory _completed;
|
||||||
private SabnzbdConfig _config;
|
private SabnzbdConfig _config;
|
||||||
|
private SabnzbdFullStatus _fullStatus;
|
||||||
|
|
||||||
[SetUp]
|
[SetUp]
|
||||||
public void Setup()
|
public void Setup()
|
||||||
|
@ -65,7 +66,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.SabnzbdTests
|
||||||
{
|
{
|
||||||
Status = SabnzbdDownloadStatus.Failed,
|
Status = SabnzbdDownloadStatus.Failed,
|
||||||
Size = 1000,
|
Size = 1000,
|
||||||
Category = "tv",
|
Category = "tv",
|
||||||
Id = "sabnzbd_nzb12345",
|
Id = "sabnzbd_nzb12345",
|
||||||
Title = "Droned.1998.1080p.WEB-DL-DRONE"
|
Title = "Droned.1998.1080p.WEB-DL-DRONE"
|
||||||
}
|
}
|
||||||
|
@ -80,7 +81,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.SabnzbdTests
|
||||||
{
|
{
|
||||||
Status = SabnzbdDownloadStatus.Completed,
|
Status = SabnzbdDownloadStatus.Completed,
|
||||||
Size = 1000,
|
Size = 1000,
|
||||||
Category = "tv",
|
Category = "tv",
|
||||||
Id = "sabnzbd_nzb12345",
|
Id = "sabnzbd_nzb12345",
|
||||||
Title = "Droned.1998.1080p.WEB-DL-DRONE",
|
Title = "Droned.1998.1080p.WEB-DL-DRONE",
|
||||||
Storage = "/remote/mount/vv/Droned.1998.1080p.WEB-DL-DRONE"
|
Storage = "/remote/mount/vv/Droned.1998.1080p.WEB-DL-DRONE"
|
||||||
|
@ -100,9 +101,29 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.SabnzbdTests
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Mocker.GetMock<ISabnzbdProxy>()
|
||||||
|
.Setup(v => v.GetVersion(It.IsAny<SabnzbdSettings>()))
|
||||||
|
.Returns("1.2.3");
|
||||||
|
|
||||||
Mocker.GetMock<ISabnzbdProxy>()
|
Mocker.GetMock<ISabnzbdProxy>()
|
||||||
.Setup(s => s.GetConfig(It.IsAny<SabnzbdSettings>()))
|
.Setup(s => s.GetConfig(It.IsAny<SabnzbdSettings>()))
|
||||||
.Returns(_config);
|
.Returns(_config);
|
||||||
|
|
||||||
|
_fullStatus = new SabnzbdFullStatus
|
||||||
|
{
|
||||||
|
CompleteDir = @"Y:\nzbget\root\complete".AsOsAgnostic()
|
||||||
|
};
|
||||||
|
|
||||||
|
Mocker.GetMock<ISabnzbdProxy>()
|
||||||
|
.Setup(s => s.GetFullStatus(It.IsAny<SabnzbdSettings>()))
|
||||||
|
.Returns(_fullStatus);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void GivenVersion(string version)
|
||||||
|
{
|
||||||
|
Mocker.GetMock<ISabnzbdProxy>()
|
||||||
|
.Setup(s => s.GetVersion(It.IsAny<SabnzbdSettings>()))
|
||||||
|
.Returns(version);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void GivenFailedDownload()
|
protected void GivenFailedDownload()
|
||||||
|
@ -166,7 +187,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.SabnzbdTests
|
||||||
|
|
||||||
GivenQueue(_queued);
|
GivenQueue(_queued);
|
||||||
GivenHistory(null);
|
GivenHistory(null);
|
||||||
|
|
||||||
var result = Subject.GetItems().Single();
|
var result = Subject.GetItems().Single();
|
||||||
|
|
||||||
VerifyQueued(result);
|
VerifyQueued(result);
|
||||||
|
@ -387,23 +408,46 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.SabnzbdTests
|
||||||
result.OutputPath.Should().Be(@"C:\sorted\somewhere\asdfasdf\asdfasdf.mkv".AsOsAgnostic());
|
result.OutputPath.Should().Be(@"C:\sorted\somewhere\asdfasdf\asdfasdf.mkv".AsOsAgnostic());
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestCase(@"Y:\nzbget\root", @"completed\downloads", @"vv", @"Y:\nzbget\root\completed\downloads\vv")]
|
[TestCase(@"Y:\nzbget\root", @"completed\downloads", @"vv", @"Y:\nzbget\root\completed\downloads", @"Y:\nzbget\root\completed\downloads\vv")]
|
||||||
[TestCase(@"Y:\nzbget\root", @"completed", @"vv", @"Y:\nzbget\root\completed\vv")]
|
[TestCase(@"Y:\nzbget\root", @"completed", @"vv", @"Y:\nzbget\root\completed", @"Y:\nzbget\root\completed\vv")]
|
||||||
[TestCase(@"/nzbget/root", @"completed/downloads", @"vv", @"/nzbget/root/completed/downloads/vv")]
|
[TestCase(@"/nzbget/root", @"completed/downloads", @"vv", @"/nzbget/root/completed/downloads", @"/nzbget/root/completed/downloads/vv")]
|
||||||
[TestCase(@"/nzbget/root", @"completed", @"vv", @"/nzbget/root/completed/vv")]
|
[TestCase(@"/nzbget/root", @"completed", @"vv", @"/nzbget/root/completed", @"/nzbget/root/completed/vv")]
|
||||||
public void should_return_status_with_outputdir(string rootFolder, string completeDir, string categoryDir, string expectedDir)
|
public void should_return_status_with_outputdir_for_version_lt_2(string rootFolder, string completeDir, string categoryDir, string fullCompleteDir, string fullCategoryDir)
|
||||||
{
|
{
|
||||||
|
_fullStatus.CompleteDir = null;
|
||||||
_queued.DefaultRootFolder = rootFolder;
|
_queued.DefaultRootFolder = rootFolder;
|
||||||
_config.Misc.complete_dir = completeDir;
|
_config.Misc.complete_dir = completeDir;
|
||||||
_config.Categories.First().Dir = categoryDir;
|
_config.Categories.First().Dir = categoryDir;
|
||||||
|
|
||||||
|
GivenVersion("1.2.1");
|
||||||
GivenQueue(null);
|
GivenQueue(null);
|
||||||
|
|
||||||
var result = Subject.GetStatus();
|
var result = Subject.GetStatus();
|
||||||
|
|
||||||
result.IsLocalhost.Should().BeTrue();
|
result.IsLocalhost.Should().BeTrue();
|
||||||
result.OutputRootFolders.Should().NotBeNull();
|
result.OutputRootFolders.Should().NotBeNull();
|
||||||
result.OutputRootFolders.First().Should().Be(expectedDir);
|
result.OutputRootFolders.First().Should().Be(fullCategoryDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase(@"Y:\nzbget\root", @"completed\downloads", @"vv", @"Y:\nzbget\root\completed\downloads", @"Y:\nzbget\root\completed\downloads\vv")]
|
||||||
|
[TestCase(@"Y:\nzbget\root", @"completed", @"vv", @"Y:\nzbget\root\completed", @"Y:\nzbget\root\completed\vv")]
|
||||||
|
[TestCase(@"/nzbget/root", @"completed/downloads", @"vv", @"/nzbget/root/completed/downloads", @"/nzbget/root/completed/downloads/vv")]
|
||||||
|
[TestCase(@"/nzbget/root", @"completed", @"vv", @"/nzbget/root/completed", @"/nzbget/root/completed/vv")]
|
||||||
|
public void should_return_status_with_outputdir_for_version_gte_2(string rootFolder, string completeDir, string categoryDir, string fullCompleteDir, string fullCategoryDir)
|
||||||
|
{
|
||||||
|
_fullStatus.CompleteDir = fullCompleteDir;
|
||||||
|
_queued.DefaultRootFolder = null;
|
||||||
|
_config.Misc.complete_dir = completeDir;
|
||||||
|
_config.Categories.First().Dir = categoryDir;
|
||||||
|
|
||||||
|
GivenVersion("2.0.0beta1");
|
||||||
|
GivenQueue(null);
|
||||||
|
|
||||||
|
var result = Subject.GetStatus();
|
||||||
|
|
||||||
|
result.IsLocalhost.Should().BeTrue();
|
||||||
|
result.OutputRootFolders.Should().NotBeNull();
|
||||||
|
result.OutputRootFolders.First().Should().Be(fullCategoryDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -451,5 +495,73 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.SabnzbdTests
|
||||||
result.IsValid.Should().BeTrue();
|
result.IsValid.Should().BeTrue();
|
||||||
result.HasWarnings.Should().BeTrue();
|
result.HasWarnings.Should().BeTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_test_success_if_tv_sorting_disabled()
|
||||||
|
{
|
||||||
|
_config.Misc.enable_tv_sorting = false;
|
||||||
|
_config.Misc.tv_categories = null;
|
||||||
|
|
||||||
|
var result = new NzbDroneValidationResult(Subject.Test());
|
||||||
|
|
||||||
|
result.IsValid.Should().BeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_test_failed_if_tv_sorting_null()
|
||||||
|
{
|
||||||
|
_config.Misc.enable_tv_sorting = true;
|
||||||
|
_config.Misc.tv_categories = null;
|
||||||
|
|
||||||
|
var result = new NzbDroneValidationResult(Subject.Test());
|
||||||
|
|
||||||
|
result.IsValid.Should().BeFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_test_failed_if_tv_sorting_empty()
|
||||||
|
{
|
||||||
|
_config.Misc.enable_tv_sorting = true;
|
||||||
|
_config.Misc.tv_categories = new string[0];
|
||||||
|
|
||||||
|
var result = new NzbDroneValidationResult(Subject.Test());
|
||||||
|
|
||||||
|
result.IsValid.Should().BeFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_test_success_if_tv_sorting_contains_different_category()
|
||||||
|
{
|
||||||
|
_config.Misc.enable_tv_sorting = true;
|
||||||
|
_config.Misc.tv_categories = new[] { "tv-custom" };
|
||||||
|
|
||||||
|
var result = new NzbDroneValidationResult(Subject.Test());
|
||||||
|
|
||||||
|
result.IsValid.Should().BeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_test_failed_if_tv_sorting_contains_category()
|
||||||
|
{
|
||||||
|
_config.Misc.enable_tv_sorting = true;
|
||||||
|
_config.Misc.tv_categories = new[] { "tv" };
|
||||||
|
|
||||||
|
var result = new NzbDroneValidationResult(Subject.Test());
|
||||||
|
|
||||||
|
result.IsValid.Should().BeFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_test_failed_if_tv_sorting_default_category()
|
||||||
|
{
|
||||||
|
Subject.Definition.Settings.As<SabnzbdSettings>().TvCategory = null;
|
||||||
|
|
||||||
|
_config.Misc.enable_tv_sorting = true;
|
||||||
|
_config.Misc.tv_categories = new[] { "Default" };
|
||||||
|
|
||||||
|
var result = new NzbDroneValidationResult(Subject.Test());
|
||||||
|
|
||||||
|
result.IsValid.Should().BeFalse();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
namespace NzbDrone.Core.Download.Clients.Sabnzbd.Responses
|
||||||
|
{
|
||||||
|
public class SabnzbdFullStatusResponse
|
||||||
|
{
|
||||||
|
public SabnzbdFullStatus Status { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -225,10 +225,18 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
||||||
|
|
||||||
if (!completeDir.IsRooted)
|
if (!completeDir.IsRooted)
|
||||||
{
|
{
|
||||||
var queue = _proxy.GetQueue(0, 1, Settings);
|
if (HasVersion(2, 0))
|
||||||
var defaultRootFolder = new OsPath(queue.DefaultRootFolder);
|
{
|
||||||
|
var status = _proxy.GetFullStatus(Settings);
|
||||||
|
completeDir = new OsPath(status.CompleteDir);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var queue = _proxy.GetQueue(0, 1, Settings);
|
||||||
|
var defaultRootFolder = new OsPath(queue.DefaultRootFolder);
|
||||||
|
|
||||||
completeDir = defaultRootFolder + completeDir;
|
completeDir = defaultRootFolder + completeDir;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var category in config.Categories)
|
foreach (var category in config.Categories)
|
||||||
|
@ -448,50 +456,47 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (config.Misc.enable_tv_sorting && ContainsCategory(config.Misc.tv_categories, Settings.TvCategory))
|
||||||
if (config.Misc.enable_tv_sorting)
|
|
||||||
{
|
{
|
||||||
if (!config.Misc.tv_categories.Any<string>() ||
|
return new NzbDroneValidationFailure("TvCategory", "Disable TV Sorting")
|
||||||
config.Misc.tv_categories.Contains(Settings.TvCategory) ||
|
|
||||||
(Settings.TvCategory.IsNullOrWhiteSpace() && config.Misc.tv_categories.Contains("Default")))
|
|
||||||
{
|
{
|
||||||
return new NzbDroneValidationFailure("TvCategory", "Disable TV Sorting")
|
InfoLink = string.Format("http://{0}:{1}/sabnzbd/config/sorting/", Settings.Host, Settings.Port),
|
||||||
{
|
DetailedDescription = "You must disable Sabnzbd TV Sorting for the category Radarr uses to prevent import issues. Go to Sabnzbd to fix it."
|
||||||
InfoLink = string.Format("http://{0}:{1}/sabnzbd/config/sorting/", Settings.Host, Settings.Port),
|
};
|
||||||
DetailedDescription = "You must disable Sabnzbd TV Sorting for the category Radarr uses to prevent import issues. Go to Sabnzbd to fix it."
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
if (config.Misc.enable_movie_sorting && ContainsCategory(config.Misc.movie_categories, Settings.TvCategory))
|
||||||
if (config.Misc.enable_movie_sorting)
|
|
||||||
{
|
{
|
||||||
if (!config.Misc.movie_categories.Any<string>() ||
|
return new NzbDroneValidationFailure("TvCategory", "Disable Movie Sorting")
|
||||||
config.Misc.movie_categories.Contains(Settings.TvCategory) ||
|
|
||||||
(Settings.TvCategory.IsNullOrWhiteSpace() && config.Misc.movie_categories.Contains("Default")))
|
|
||||||
{
|
{
|
||||||
return new NzbDroneValidationFailure("TvCategory", "Disable Movie Sorting")
|
InfoLink = string.Format("http://{0}:{1}/sabnzbd/config/sorting/", Settings.Host, Settings.Port),
|
||||||
{
|
DetailedDescription = "You must disable Sabnzbd Movie Sorting for the category Radarr uses to prevent import issues. Go to Sabnzbd to fix it."
|
||||||
InfoLink = string.Format("http://{0}:{1}/sabnzbd/config/sorting/", Settings.Host, Settings.Port),
|
};
|
||||||
DetailedDescription = "You must disable Sabnzbd Movie Sorting for the category Radarr uses to prevent import issues. Go to Sabnzbd to fix it."
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
if (config.Misc.enable_date_sorting && ContainsCategory(config.Misc.date_categories, Settings.TvCategory))
|
||||||
if (config.Misc.enable_date_sorting)
|
|
||||||
{
|
{
|
||||||
if (!config.Misc.date_categories.Any<string>() ||
|
return new NzbDroneValidationFailure("TvCategory", "Disable Date Sorting")
|
||||||
config.Misc.date_categories.Contains(Settings.TvCategory) ||
|
|
||||||
(Settings.TvCategory.IsNullOrWhiteSpace() && config.Misc.date_categories.Contains("Default")))
|
|
||||||
{
|
{
|
||||||
return new NzbDroneValidationFailure("TvCategory", "Disable Date Sorting")
|
InfoLink = string.Format("http://{0}:{1}/sabnzbd/config/sorting/", Settings.Host, Settings.Port),
|
||||||
{
|
DetailedDescription = "You must disable Sabnzbd Date Sorting for the category Radarr uses to prevent import issues. Go to Sabnzbd to fix it."
|
||||||
InfoLink = string.Format("http://{0}:{1}/sabnzbd/config/sorting/", Settings.Host, Settings.Port),
|
};
|
||||||
DetailedDescription = "You must disable Sabnzbd Date Sorting for the category Radarr uses to prevent import issues. Go to Sabnzbd to fix it."
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool ContainsCategory(IEnumerable<string> categories, string category)
|
||||||
|
{
|
||||||
|
if (categories == null || categories.Empty())
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (category.IsNullOrWhiteSpace())
|
||||||
|
{
|
||||||
|
category = "Default";
|
||||||
|
}
|
||||||
|
|
||||||
|
return categories.Contains(category);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
||||||
|
{
|
||||||
|
public class SabnzbdFullStatus
|
||||||
|
{
|
||||||
|
// Added in Sabnzbd 2.0.0, my_home was previously in &mode=queue.
|
||||||
|
// This is the already resolved completedir path.
|
||||||
|
[JsonProperty(PropertyName = "completedir")]
|
||||||
|
public string CompleteDir { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -15,6 +15,7 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
||||||
void RemoveFrom(string source, string id,bool deleteData, SabnzbdSettings settings);
|
void RemoveFrom(string source, string id,bool deleteData, SabnzbdSettings settings);
|
||||||
string GetVersion(SabnzbdSettings settings);
|
string GetVersion(SabnzbdSettings settings);
|
||||||
SabnzbdConfig GetConfig(SabnzbdSettings settings);
|
SabnzbdConfig GetConfig(SabnzbdSettings settings);
|
||||||
|
SabnzbdFullStatus GetFullStatus(SabnzbdSettings settings);
|
||||||
SabnzbdQueue GetQueue(int start, int limit, SabnzbdSettings settings);
|
SabnzbdQueue GetQueue(int start, int limit, SabnzbdSettings settings);
|
||||||
SabnzbdHistory GetHistory(int start, int limit, string category, SabnzbdSettings settings);
|
SabnzbdHistory GetHistory(int start, int limit, string category, SabnzbdSettings settings);
|
||||||
string RetryDownload(string id, SabnzbdSettings settings);
|
string RetryDownload(string id, SabnzbdSettings settings);
|
||||||
|
@ -37,7 +38,7 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
||||||
|
|
||||||
request.AddQueryParam("cat", category);
|
request.AddQueryParam("cat", category);
|
||||||
request.AddQueryParam("priority", priority);
|
request.AddQueryParam("priority", priority);
|
||||||
|
|
||||||
request.AddFormUpload("name", filename, nzbData, "application/x-nzb");
|
request.AddFormUpload("name", filename, nzbData, "application/x-nzb");
|
||||||
|
|
||||||
SabnzbdAddResponse response;
|
SabnzbdAddResponse response;
|
||||||
|
@ -84,6 +85,16 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
||||||
return response.Config;
|
return response.Config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SabnzbdFullStatus GetFullStatus(SabnzbdSettings settings)
|
||||||
|
{
|
||||||
|
var request = BuildRequest("fullstatus", settings);
|
||||||
|
request.AddQueryParam("skip_dashboard", "1");
|
||||||
|
|
||||||
|
var response = Json.Deserialize<SabnzbdFullStatusResponse>(ProcessRequest(request, settings));
|
||||||
|
|
||||||
|
return response.Status;
|
||||||
|
}
|
||||||
|
|
||||||
public SabnzbdQueue GetQueue(int start, int limit, SabnzbdSettings settings)
|
public SabnzbdQueue GetQueue(int start, int limit, SabnzbdSettings settings)
|
||||||
{
|
{
|
||||||
var request = BuildRequest("queue", settings);
|
var request = BuildRequest("queue", settings);
|
||||||
|
|
|
@ -5,6 +5,7 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
||||||
{
|
{
|
||||||
public class SabnzbdQueue
|
public class SabnzbdQueue
|
||||||
{
|
{
|
||||||
|
// Removed in Sabnzbd 2.0.0, see mode=fullstatus instead.
|
||||||
[JsonProperty(PropertyName = "my_home")]
|
[JsonProperty(PropertyName = "my_home")]
|
||||||
public string DefaultRootFolder { get; set; }
|
public string DefaultRootFolder { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -111,7 +111,7 @@ namespace NzbDrone.Core.Download
|
||||||
public ValidationResult Test()
|
public ValidationResult Test()
|
||||||
{
|
{
|
||||||
var failures = new List<ValidationFailure>();
|
var failures = new List<ValidationFailure>();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Test(failures);
|
Test(failures);
|
||||||
|
|
|
@ -506,6 +506,7 @@
|
||||||
<Compile Include="Download\Clients\Sabnzbd\JsonConverters\SabnzbdPriorityTypeConverter.cs" />
|
<Compile Include="Download\Clients\Sabnzbd\JsonConverters\SabnzbdPriorityTypeConverter.cs" />
|
||||||
<Compile Include="Download\Clients\Sabnzbd\JsonConverters\SabnzbdStringArrayConverter.cs" />
|
<Compile Include="Download\Clients\Sabnzbd\JsonConverters\SabnzbdStringArrayConverter.cs" />
|
||||||
<Compile Include="Download\Clients\Sabnzbd\JsonConverters\SabnzbdQueueTimeConverter.cs" />
|
<Compile Include="Download\Clients\Sabnzbd\JsonConverters\SabnzbdQueueTimeConverter.cs" />
|
||||||
|
<Compile Include="Download\Clients\Sabnzbd\Responses\SabnzbdFullStatusResponse.cs" />
|
||||||
<Compile Include="Download\Clients\Sabnzbd\Responses\SabnzbdRetryResponse.cs" />
|
<Compile Include="Download\Clients\Sabnzbd\Responses\SabnzbdRetryResponse.cs" />
|
||||||
<Compile Include="Download\Clients\Sabnzbd\Responses\SabnzbdAddResponse.cs" />
|
<Compile Include="Download\Clients\Sabnzbd\Responses\SabnzbdAddResponse.cs" />
|
||||||
<Compile Include="Download\Clients\Sabnzbd\Responses\SabnzbdCategoryResponse.cs" />
|
<Compile Include="Download\Clients\Sabnzbd\Responses\SabnzbdCategoryResponse.cs" />
|
||||||
|
@ -514,6 +515,7 @@
|
||||||
<Compile Include="Download\Clients\Sabnzbd\Sabnzbd.cs" />
|
<Compile Include="Download\Clients\Sabnzbd\Sabnzbd.cs" />
|
||||||
<Compile Include="Download\Clients\Sabnzbd\SabnzbdCategory.cs" />
|
<Compile Include="Download\Clients\Sabnzbd\SabnzbdCategory.cs" />
|
||||||
<Compile Include="Download\Clients\Sabnzbd\SabnzbdDownloadStatus.cs" />
|
<Compile Include="Download\Clients\Sabnzbd\SabnzbdDownloadStatus.cs" />
|
||||||
|
<Compile Include="Download\Clients\Sabnzbd\SabnzbdFullStatus.cs" />
|
||||||
<Compile Include="Download\Clients\Sabnzbd\SabnzbdHistory.cs" />
|
<Compile Include="Download\Clients\Sabnzbd\SabnzbdHistory.cs" />
|
||||||
<Compile Include="Download\Clients\Sabnzbd\SabnzbdHistoryItem.cs" />
|
<Compile Include="Download\Clients\Sabnzbd\SabnzbdHistoryItem.cs" />
|
||||||
<Compile Include="Download\Clients\Sabnzbd\SabnzbdJsonError.cs" />
|
<Compile Include="Download\Clients\Sabnzbd\SabnzbdJsonError.cs" />
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue