Post Processor Done.

Will send from SAB to NzbDrone.
Changed SabCategory to SabTvCategory (Support for movies later?)
This commit is contained in:
markus101 2011-03-06 14:27:52 -08:00
parent e166cb1b2d
commit 70fd11231d
9 changed files with 124 additions and 26 deletions

View File

@ -34,7 +34,7 @@ namespace NzbDrone.Core.Test
config.Setup(c => c.GetValue("SabUsername", String.Empty, false)).Returns(username); config.Setup(c => c.GetValue("SabUsername", String.Empty, false)).Returns(username);
config.Setup(c => c.GetValue("SabPassword", String.Empty, false)).Returns(password); config.Setup(c => c.GetValue("SabPassword", String.Empty, false)).Returns(password);
config.Setup(c => c.GetValue("SabPriority", String.Empty, false)).Returns(priority); config.Setup(c => c.GetValue("SabPriority", String.Empty, false)).Returns(priority);
config.Setup(c => c.GetValue("SabCategory", String.Empty, false)).Returns(category); config.Setup(c => c.GetValue("SabTvCategory", String.Empty, false)).Returns(category);
var http = new Mock<IHttpProvider>(); var http = new Mock<IHttpProvider>();
http.Setup(s => s.DownloadString("http://192.168.5.55:2222/api?mode=addurl&name=http://www.nzbclub.com/nzb_download.aspx?mid=1950232&priority=0&cat=tv&nzbname=This+is+an+Nzb&apikey=5c770e3197e4fe763423ee7c392c25d1&ma_username=admin&ma_password=pass")).Returns("ok"); http.Setup(s => s.DownloadString("http://192.168.5.55:2222/api?mode=addurl&name=http://www.nzbclub.com/nzb_download.aspx?mid=1950232&priority=0&cat=tv&nzbname=This+is+an+Nzb&apikey=5c770e3197e4fe763423ee7c392c25d1&ma_username=admin&ma_password=pass")).Returns("ok");
@ -67,7 +67,7 @@ namespace NzbDrone.Core.Test
config.Setup(c => c.GetValue("SabUsername", String.Empty, false)).Returns(username); config.Setup(c => c.GetValue("SabUsername", String.Empty, false)).Returns(username);
config.Setup(c => c.GetValue("SabPassword", String.Empty, false)).Returns(password); config.Setup(c => c.GetValue("SabPassword", String.Empty, false)).Returns(password);
config.Setup(c => c.GetValue("SabPriority", String.Empty, false)).Returns(priority); config.Setup(c => c.GetValue("SabPriority", String.Empty, false)).Returns(priority);
config.Setup(c => c.GetValue("SabCategory", String.Empty, false)).Returns(category); config.Setup(c => c.GetValue("SabTvCategory", String.Empty, false)).Returns(category);
var http = new Mock<IHttpProvider>(); var http = new Mock<IHttpProvider>();
http.Setup(s => s.DownloadString("http://192.168.5.55:2222/api?mode=addurl&name=http://www.nzbclub.com/nzb_download.aspx?mid=1950232&priority=0&cat=tv&nzbname=This+is+an+Nzb&apikey=5c770e3197e4fe763423ee7c392c25d1&ma_username=admin&ma_password=pass")).Returns("error"); http.Setup(s => s.DownloadString("http://192.168.5.55:2222/api?mode=addurl&name=http://www.nzbclub.com/nzb_download.aspx?mid=1950232&priority=0&cat=tv&nzbname=This+is+an+Nzb&apikey=5c770e3197e4fe763423ee7c392c25d1&ma_username=admin&ma_password=pass")).Returns("error");

View File

@ -24,7 +24,7 @@ namespace NzbDrone.Core.Providers
public bool AddByUrl(string url, string title) public bool AddByUrl(string url, string title)
{ {
const string mode = "addurl"; const string mode = "addurl";
//string cat = _config.GetValue("SabCategory", String.Empty, true); //string cat = _config.GetValue("SabTvCategory", String.Empty, true);
string cat = "tv"; string cat = "tv";
string priority = _config.GetValue("SabPriority", String.Empty, false); string priority = _config.GetValue("SabPriority", String.Empty, false);
string name = url.Replace("&", "%26"); string name = url.Replace("&", "%26");

View File

@ -10,8 +10,9 @@
<AppDesignerFolder>Properties</AppDesignerFolder> <AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>NzbDrone.PostProcessor</RootNamespace> <RootNamespace>NzbDrone.PostProcessor</RootNamespace>
<AssemblyName>NzbDrone.PostProcessor</AssemblyName> <AssemblyName>NzbDrone.PostProcessor</AssemblyName>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion> <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget> <PlatformTarget>x86</PlatformTarget>
@ -36,11 +37,15 @@
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Program.cs" /> <Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Content Include="PostProcessor.xml" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<Configuration>
<Host>localhost</Host>
<Port>8989</Port>
<ApiKey>Not-An-API-KEY</ApiKey>
</Configuration>

View File

@ -1,13 +1,84 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text; using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace NzbDrone.PostProcessor namespace NzbDrone.PostProcessor
{ {
class Program class Program
{ {
private static string _host = "localhost";
private static int _port = 8989;
private static string _apiKey = String.Empty;
static void Main(string[] args) static void Main(string[] args)
{ {
try
{
if (args.Count() < 5)
{
Console.WriteLine("Did this come from SAB? Missing Arguments..");
return;
}
//Load the ConfigFile
if (!LoadConfig())
return;
string dir = args[0]; //Get dir from first CMD Line Argument
string nzbName = args[2]; //Get nzbName from third CMD Line Argument
string category = args[4]; //Get category from third CMD Line Argument
var hostString = _host + ":" + _port;
var url = String.Format("http://{0}/?apiKey={1}&dir={2}&nzbName={3}&category={4}", hostString, _apiKey, dir, nzbName, category);
var webClient = new WebClient();
webClient.DownloadString(url);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
static bool LoadConfig()
{
var configFile = "PostProcessor.xml";
if (!File.Exists(configFile))
{
Console.WriteLine("Configuration File does not exist, please create");
return false;
}
var xDoc = XDocument.Load(configFile);
var config = (from c in xDoc.Descendants("Configuration") select c).FirstOrDefault();
if (config == null)
{
Console.WriteLine("Invalid Configuration File");
return false;
}
var hostNode = config.Descendants("Host").FirstOrDefault();
var portNode = config.Descendants("Port").FirstOrDefault(); ;
var apiKeyNode = config.Descendants("ApiKey").FirstOrDefault(); ;
if (hostNode == null || portNode == null || apiKeyNode == null)
{
Console.WriteLine("Invalid Configuration File");
return false;
}
_host = hostNode.Value;
Int32.TryParse(portNode.Value, out _port);
_apiKey = apiKeyNode.Value;
return true;
} }
} }
} }

View File

@ -4,6 +4,7 @@ using System.Linq;
using System.Web; using System.Web;
using System.Web.Mvc; using System.Web.Mvc;
using System.Xml.Linq; using System.Xml.Linq;
using NLog;
using NzbDrone.Core; using NzbDrone.Core;
using NzbDrone.Core.Providers; using NzbDrone.Core.Providers;
@ -12,16 +13,31 @@ namespace NzbDrone.Web.Controllers
public class ApiController : Controller public class ApiController : Controller
{ {
private readonly IPostProcessingProvider _postProcessingProvider; private readonly IPostProcessingProvider _postProcessingProvider;
private readonly IConfigProvider _configProvider;
public ApiController(IPostProcessingProvider postProcessingProvider) private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
public ApiController(IPostProcessingProvider postProcessingProvider, IConfigProvider configProvider)
{ {
_postProcessingProvider = postProcessingProvider; _postProcessingProvider = postProcessingProvider;
_configProvider = configProvider;
} }
public ActionResult ProcessEpisode(string dir, string nzbName) public ActionResult ProcessEpisode(string apiKey, string dir, string nzbName, string category)
{ {
_postProcessingProvider.ProcessEpisode(dir, nzbName); if (apiKey != _configProvider.GetValue("ApiKey", String.Empty, true))
return Content("ok"); {
Logger.Warn("API Key from Post Processing Script is Invalid");
return Content("Invalid API Key");
}
if (_configProvider.GetValue("SabTvCategory", String.Empty, true) == category)
{
_postProcessingProvider.ProcessEpisode(dir, nzbName);
return Content("ok");
}
return Content("Category doesn't match what was configured for SAB TV Category...");
} }
} }
} }

View File

@ -60,12 +60,12 @@ namespace NzbDrone.Web.Controllers
ViewData["viewName"] = "Indexers"; ViewData["viewName"] = "Indexers";
return View("Index", new IndexerSettingsModel return View("Index", new IndexerSettingsModel
{ {
NzbMatrixUsername = _configProvider.GetValue("NzbMatrixUsername", String.Empty, false), NzbMatrixUsername = _configProvider.GetValue("NzbMatrixUsername", String.Empty, true),
NzbMatrixApiKey = _configProvider.GetValue("NzbMatrixApiKey", String.Empty, false), NzbMatrixApiKey = _configProvider.GetValue("NzbMatrixApiKey", String.Empty, true),
NzbsOrgUId = _configProvider.GetValue("NzbsOrgUId", String.Empty, false), NzbsOrgUId = _configProvider.GetValue("NzbsOrgUId", String.Empty, true),
NzbsOrgHash = _configProvider.GetValue("NzbsOrgHash", String.Empty, false), NzbsOrgHash = _configProvider.GetValue("NzbsOrgHash", String.Empty, true),
NzbsrusUId = _configProvider.GetValue("NzbsrusUId", String.Empty, false), NzbsrusUId = _configProvider.GetValue("NzbsrusUId", String.Empty, true),
NzbsrusHash = _configProvider.GetValue("NzbsrusHash", String.Empty, false), NzbsrusHash = _configProvider.GetValue("NzbsrusHash", String.Empty, true),
Indexers = _indexerProvider.AllIndexers() Indexers = _indexerProvider.AllIndexers()
}); });
} }
@ -79,12 +79,12 @@ namespace NzbDrone.Web.Controllers
SyncFrequency = Convert.ToInt32(_configProvider.GetValue("SyncFrequency", "15", true)), SyncFrequency = Convert.ToInt32(_configProvider.GetValue("SyncFrequency", "15", true)),
DownloadPropers = Convert.ToBoolean(_configProvider.GetValue("DownloadPropers", "false", true)), DownloadPropers = Convert.ToBoolean(_configProvider.GetValue("DownloadPropers", "false", true)),
Retention = Convert.ToInt32(_configProvider.GetValue("Retention", "500", true)), Retention = Convert.ToInt32(_configProvider.GetValue("Retention", "500", true)),
SabHost = _configProvider.GetValue("SabHost", "localhost", false), SabHost = _configProvider.GetValue("SabHost", "localhost", true),
SabPort = Convert.ToInt32(_configProvider.GetValue("SabPort", "8080", true)), SabPort = Convert.ToInt32(_configProvider.GetValue("SabPort", "8080", true)),
SabApiKey = _configProvider.GetValue("SabApiKey", String.Empty, false), SabApiKey = _configProvider.GetValue("SabApiKey", String.Empty, true),
SabUsername = _configProvider.GetValue("SabUsername", String.Empty, false), SabUsername = _configProvider.GetValue("SabUsername", String.Empty, true),
SabPassword = _configProvider.GetValue("SabPassword", String.Empty, false), SabPassword = _configProvider.GetValue("SabPassword", String.Empty, true),
SabCategory = _configProvider.GetValue("SabCategory", String.Empty, false), SabTvCategory = _configProvider.GetValue("SabTvCategory", String.Empty, true),
SabPriority = (SabnzbdPriorityType)Enum.Parse(typeof(SabnzbdPriorityType), _configProvider.GetValue("SabPriority", "Normal", true)), SabPriority = (SabnzbdPriorityType)Enum.Parse(typeof(SabnzbdPriorityType), _configProvider.GetValue("SabPriority", "Normal", true)),
}; };
@ -221,7 +221,7 @@ namespace NzbDrone.Web.Controllers
_configProvider.SetValue("SabApiKey", data.SabApiKey); _configProvider.SetValue("SabApiKey", data.SabApiKey);
_configProvider.SetValue("SabUsername", data.SabUsername); _configProvider.SetValue("SabUsername", data.SabUsername);
_configProvider.SetValue("SabPassword", data.SabPassword); _configProvider.SetValue("SabPassword", data.SabPassword);
_configProvider.SetValue("SabCategory", data.SabCategory); _configProvider.SetValue("SabTvCategory", data.SabTvCategory);
_configProvider.SetValue("SabPriority", data.SabPriority.ToString()); _configProvider.SetValue("SabPriority", data.SabPriority.ToString());
return Content(_settingsSaved); return Content(_settingsSaved);

View File

@ -84,8 +84,8 @@ namespace NzbDrone.Web.Models
[DataType(DataType.Text)] [DataType(DataType.Text)]
[DisplayFormat(ConvertEmptyStringToNull = false)] [DisplayFormat(ConvertEmptyStringToNull = false)]
[DisplayName("SABnzbd Category")] [DisplayName("SABnzbd TV Category")]
public String SabCategory public String SabTvCategory
{ {
get; get;
set; set;

View File

@ -117,10 +117,10 @@
<div class="config-section"> <div class="config-section">
<div class="config-group"> <div class="config-group">
<div class="config-title"><%= Html.LabelFor(m => m.SabCategory)%></div> <div class="config-title"><%= Html.LabelFor(m => m.SabTvCategory)%></div>
<div class="config-value"><%= Html.TextBoxFor(m => m.SabCategory)%></div> <div class="config-value"><%= Html.TextBoxFor(m => m.SabTvCategory)%></div>
</div> </div>
<div class="config-validation"><%= Html.ValidationMessageFor(m => m.SabCategory)%></div> <div class="config-validation"><%= Html.ValidationMessageFor(m => m.SabTvCategory)%></div>
</div> </div>
<div class="config-section"> <div class="config-section">
@ -128,7 +128,7 @@
<div class="config-title"><%= Html.LabelFor(m => m.SabPriority) %></div> <div class="config-title"><%= Html.LabelFor(m => m.SabPriority) %></div>
<div class="config-value"><%= Html.DropDownListFor(m => m.SabPriority, Model.PrioritySelectList) %></div> <div class="config-value"><%= Html.DropDownListFor(m => m.SabPriority, Model.PrioritySelectList) %></div>
</div> </div>
<div class="config-validation"><%= Html.ValidationMessageFor(m => m.SabCategory)%></div> <div class="config-validation"><%= Html.ValidationMessageFor(m => m.SabTvCategory)%></div>
</div> </div>
</fieldset> </fieldset>