You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Readarr/NzbDrone.Core/Providers/NewznabProvider.cs

103 lines
3.2 KiB

using System;
using System.Collections.Generic;
using System.Linq;
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)
{
//Cleanup the URL if it is not null or whitespace
if (!String.IsNullOrWhiteSpace(definition.Url))
definition.Url = (new Uri(definition.Url).ParentUriString());
if (definition.Id == 0)
{
Logger.Debug("Adding Newznab definitions for {0}", definition.Name);
return Convert.ToInt32(_database.Insert(definition));
}
Logger.Debug("Updating Newznab definitions for {0}", definition.Name);
return _database.Update(definition);
}
public virtual void SaveAll(IEnumerable<NewznabDefinition> definitions)
{
var definitionsList = definitions.ToList();
//Cleanup the URL for each definition
definitionsList.ForEach(p => p.Url = (new Uri(p.Url).ParentUriString()));
_database.UpdateMany(definitionsList);
}
public virtual void InitializeNewznabIndexers(IList<NewznabDefinition> indexers)
{
Logger.Debug("Initializing Newznab indexers. Count {0}", indexers.Count);
var currentIndexers = All();
foreach (var feedProvider in indexers)
{
NewznabDefinition indexerLocal = feedProvider;
var currentIndexer = currentIndexers
.FirstOrDefault(c => new Uri(c.Url.ToLower()).Host == new Uri(indexerLocal.Url.ToLower()).Host);
if (currentIndexer == null)
{
var settings = new NewznabDefinition
{
Enable = false,
Name = indexerLocal.Name,
Url = indexerLocal.Url,
ApiKey = indexerLocal.ApiKey,
BuiltIn = true
};
Save(settings);
}
else
{
currentIndexer.BuiltIn = true;
Save(currentIndexer);
}
}
}
public virtual void Delete(int id)
{
_database.Delete<NewznabDefinition>(id);
}
}
}