2011-11-13 20:51:15 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
2012-05-11 17:26:56 +00:00
|
|
|
|
using System.Net;
|
2011-11-13 20:51:15 +00:00
|
|
|
|
using Ninject;
|
|
|
|
|
using NLog;
|
|
|
|
|
using NzbDrone.Core.Providers.Indexer;
|
|
|
|
|
using NzbDrone.Core.Repository;
|
|
|
|
|
using PetaPoco;
|
|
|
|
|
|
|
|
|
|
namespace NzbDrone.Core.Providers
|
|
|
|
|
{
|
|
|
|
|
public class NewznabProvider
|
|
|
|
|
{
|
|
|
|
|
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
|
|
|
|
private readonly IDatabase _database;
|
|
|
|
|
|
|
|
|
|
[Inject]
|
|
|
|
|
public NewznabProvider(IDatabase database)
|
|
|
|
|
{
|
|
|
|
|
_database = database;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public NewznabProvider()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public virtual List<NewznabDefinition> Enabled()
|
|
|
|
|
{
|
|
|
|
|
return _database.Fetch<NewznabDefinition>("WHERE Enable = 1");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public virtual List<NewznabDefinition> All()
|
|
|
|
|
{
|
|
|
|
|
return _database.Fetch<NewznabDefinition>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public virtual int Save(NewznabDefinition definition)
|
|
|
|
|
{
|
2011-11-15 23:11:17 +00:00
|
|
|
|
//Cleanup the URL if it is not null or whitespace
|
|
|
|
|
if (!String.IsNullOrWhiteSpace(definition.Url))
|
|
|
|
|
definition.Url = (new Uri(definition.Url).ParentUriString());
|
2011-11-13 20:51:15 +00:00
|
|
|
|
|
|
|
|
|
if (definition.Id == 0)
|
|
|
|
|
{
|
|
|
|
|
Logger.Debug("Adding Newznab definitions for {0}", definition.Name);
|
|
|
|
|
return Convert.ToInt32(_database.Insert(definition));
|
|
|
|
|
}
|
|
|
|
|
|
2012-02-01 01:37:36 +00:00
|
|
|
|
Logger.Debug("Updating Newznab definitions for {0}", definition.Name);
|
|
|
|
|
return _database.Update(definition);
|
2011-11-13 20:51:15 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public virtual void SaveAll(IEnumerable<NewznabDefinition> definitions)
|
|
|
|
|
{
|
|
|
|
|
var definitionsList = definitions.ToList();
|
|
|
|
|
|
|
|
|
|
//Cleanup the URL for each definition
|
2012-05-11 17:26:56 +00:00
|
|
|
|
foreach(var newznabDefinition in definitionsList)
|
|
|
|
|
{
|
|
|
|
|
CheckHostname(newznabDefinition.Url);
|
|
|
|
|
newznabDefinition.Url = new Uri(newznabDefinition.Url).ParentUriString();
|
|
|
|
|
}
|
2011-11-13 20:51:15 +00:00
|
|
|
|
|
|
|
|
|
_database.UpdateMany(definitionsList);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public virtual void InitializeNewznabIndexers(IList<NewznabDefinition> indexers)
|
|
|
|
|
{
|
2012-02-13 07:28:01 +00:00
|
|
|
|
Logger.Debug("Initializing Newznab indexers. Count {0}", indexers.Count);
|
2011-11-13 20:51:15 +00:00
|
|
|
|
|
|
|
|
|
var currentIndexers = All();
|
|
|
|
|
|
|
|
|
|
foreach (var feedProvider in indexers)
|
|
|
|
|
{
|
|
|
|
|
NewznabDefinition indexerLocal = feedProvider;
|
2012-05-04 15:30:30 +00:00
|
|
|
|
var currentIndexer = currentIndexers
|
2012-05-04 16:26:25 +00:00
|
|
|
|
.FirstOrDefault(c => new Uri(c.Url.ToLower()).Host == new Uri(indexerLocal.Url.ToLower()).Host);
|
2012-05-04 15:30:30 +00:00
|
|
|
|
|
|
|
|
|
if (currentIndexer == null)
|
2011-11-13 20:51:15 +00:00
|
|
|
|
{
|
|
|
|
|
var settings = new NewznabDefinition
|
|
|
|
|
{
|
|
|
|
|
Enable = false,
|
|
|
|
|
Name = indexerLocal.Name,
|
|
|
|
|
Url = indexerLocal.Url,
|
2012-05-04 15:30:30 +00:00
|
|
|
|
ApiKey = indexerLocal.ApiKey,
|
|
|
|
|
BuiltIn = true
|
2011-11-13 20:51:15 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Save(settings);
|
|
|
|
|
}
|
2012-05-04 15:30:30 +00:00
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
currentIndexer.BuiltIn = true;
|
|
|
|
|
Save(currentIndexer);
|
|
|
|
|
}
|
2011-11-13 20:51:15 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public virtual void Delete(int id)
|
|
|
|
|
{
|
|
|
|
|
_database.Delete<NewznabDefinition>(id);
|
|
|
|
|
}
|
2012-05-11 17:26:56 +00:00
|
|
|
|
|
|
|
|
|
public virtual void CheckHostname(string url)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
var uri = new Uri(url);
|
|
|
|
|
var hostname = uri.DnsSafeHost;
|
|
|
|
|
|
|
|
|
|
Dns.GetHostEntry(hostname);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
Logger.Error("Invalid address {0}, please correct the site URL.", url);
|
|
|
|
|
throw;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
2011-11-13 20:51:15 +00:00
|
|
|
|
}
|
|
|
|
|
}
|