2015-07-19 00:27:41 +00:00
|
|
|
|
using Autofac;
|
2015-07-19 13:22:50 +00:00
|
|
|
|
using Jackett.Indexers;
|
2015-07-19 00:27:41 +00:00
|
|
|
|
using Jackett.Models;
|
2015-07-19 17:37:08 +00:00
|
|
|
|
using Jackett.Utils;
|
2015-07-19 00:59:30 +00:00
|
|
|
|
using Newtonsoft.Json.Linq;
|
2015-07-19 00:27:41 +00:00
|
|
|
|
using NLog;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
|
|
|
|
namespace Jackett.Services
|
|
|
|
|
{
|
|
|
|
|
public interface IIndexerManagerService
|
|
|
|
|
{
|
2015-07-19 18:25:47 +00:00
|
|
|
|
Task TestIndexer(string name);
|
2015-07-19 00:27:41 +00:00
|
|
|
|
void DeleteIndexer(string name);
|
2015-07-19 13:22:50 +00:00
|
|
|
|
IIndexer GetIndexer(string name);
|
|
|
|
|
IEnumerable<IIndexer> GetAllIndexers();
|
|
|
|
|
void SaveConfig(IIndexer indexer, JToken obj);
|
|
|
|
|
void InitIndexers();
|
2015-07-19 00:27:41 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class IndexerManagerService : IIndexerManagerService
|
|
|
|
|
{
|
|
|
|
|
private IContainer container;
|
|
|
|
|
private IConfigurationService configService;
|
|
|
|
|
private Logger logger;
|
2015-07-19 17:18:54 +00:00
|
|
|
|
private Dictionary<string, IIndexer> indexers = new Dictionary<string, IIndexer>();
|
2015-07-19 00:27:41 +00:00
|
|
|
|
|
|
|
|
|
public IndexerManagerService(IContainer c, IConfigurationService config, Logger l)
|
|
|
|
|
{
|
|
|
|
|
container = c;
|
|
|
|
|
configService = config;
|
|
|
|
|
logger = l;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-19 13:22:50 +00:00
|
|
|
|
public void InitIndexers()
|
2015-07-19 00:27:41 +00:00
|
|
|
|
{
|
2015-07-19 17:18:54 +00:00
|
|
|
|
foreach (var idx in container.Resolve<IEnumerable<IIndexer>>().OrderBy(_ => _.DisplayName))
|
2015-07-19 13:22:50 +00:00
|
|
|
|
{
|
2015-07-19 19:28:08 +00:00
|
|
|
|
indexers.Add(idx.ID, idx);
|
2015-07-19 17:18:54 +00:00
|
|
|
|
var configFilePath = GetIndexerConfigFilePath(idx);
|
2015-07-19 13:22:50 +00:00
|
|
|
|
if (File.Exists(configFilePath))
|
|
|
|
|
{
|
|
|
|
|
var jsonString = JObject.Parse(File.ReadAllText(configFilePath));
|
2015-07-19 17:18:54 +00:00
|
|
|
|
idx.LoadFromSavedConfiguration(jsonString);
|
2015-07-19 13:22:50 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2015-07-19 00:27:41 +00:00
|
|
|
|
}
|
|
|
|
|
|
2015-07-19 13:22:50 +00:00
|
|
|
|
public IIndexer GetIndexer(string name)
|
2015-07-19 00:27:41 +00:00
|
|
|
|
{
|
2015-07-22 22:06:46 +00:00
|
|
|
|
if (indexers.ContainsKey(name))
|
2015-07-19 17:18:54 +00:00
|
|
|
|
{
|
2015-07-22 22:06:46 +00:00
|
|
|
|
return indexers[name];
|
2015-07-19 17:18:54 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
2015-07-19 13:22:50 +00:00
|
|
|
|
{
|
|
|
|
|
logger.Error("Request for unknown indexer: " + name);
|
|
|
|
|
throw new Exception("Unknown indexer: " + name);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public IEnumerable<IIndexer> GetAllIndexers()
|
|
|
|
|
{
|
2015-07-19 17:18:54 +00:00
|
|
|
|
return indexers.Values;
|
2015-07-19 00:27:41 +00:00
|
|
|
|
}
|
|
|
|
|
|
2015-07-19 18:25:47 +00:00
|
|
|
|
public async Task TestIndexer(string name)
|
2015-07-19 00:27:41 +00:00
|
|
|
|
{
|
|
|
|
|
var indexer = GetIndexer(name);
|
|
|
|
|
var browseQuery = new TorznabQuery();
|
|
|
|
|
var results = await indexer.PerformQuery(browseQuery);
|
|
|
|
|
logger.Debug(string.Format("Found {0} releases from {1}", results.Length, indexer.DisplayName));
|
|
|
|
|
if (results.Length == 0)
|
|
|
|
|
throw new Exception("Found no results while trying to browse this tracker");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void DeleteIndexer(string name)
|
|
|
|
|
{
|
|
|
|
|
var indexer = GetIndexer(name);
|
2015-07-19 17:18:54 +00:00
|
|
|
|
var configPath = GetIndexerConfigFilePath(indexer);
|
2015-07-19 00:27:41 +00:00
|
|
|
|
File.Delete(configPath);
|
2015-07-19 19:38:41 +00:00
|
|
|
|
indexers[name] = container.ResolveNamed<IIndexer>(indexer.ID);
|
2015-07-19 00:27:41 +00:00
|
|
|
|
}
|
|
|
|
|
|
2015-07-19 13:22:50 +00:00
|
|
|
|
private string GetIndexerConfigFilePath(IIndexer indexer)
|
2015-07-19 00:27:41 +00:00
|
|
|
|
{
|
2015-07-19 19:28:08 +00:00
|
|
|
|
return Path.Combine(configService.GetIndexerConfigDir(), indexer.ID + ".json");
|
2015-07-19 00:27:41 +00:00
|
|
|
|
}
|
2015-07-19 00:59:30 +00:00
|
|
|
|
|
2015-07-19 13:22:50 +00:00
|
|
|
|
public void SaveConfig(IIndexer indexer, JToken obj)
|
2015-07-19 00:59:30 +00:00
|
|
|
|
{
|
|
|
|
|
var configFilePath = GetIndexerConfigFilePath(indexer);
|
|
|
|
|
if (!Directory.Exists(configService.GetIndexerConfigDir()))
|
|
|
|
|
Directory.CreateDirectory(configService.GetIndexerConfigDir());
|
|
|
|
|
File.WriteAllText(configFilePath, obj.ToString());
|
|
|
|
|
}
|
2015-07-19 00:27:41 +00:00
|
|
|
|
}
|
|
|
|
|
}
|