From 0f5e18492c04392f3dd645312050eea5cd112d92 Mon Sep 17 00:00:00 2001 From: kaso17 Date: Sun, 30 Oct 2016 19:34:48 +0100 Subject: [PATCH] Load definitions from multiple directories --- src/Jackett/Services/ConfigurationService.cs | 20 ++++++++++++++++--- src/Jackett/Services/IndexerManagerService.cs | 4 ++++ src/Jackett/Services/ServerService.cs | 5 ++++- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/Jackett/Services/ConfigurationService.cs b/src/Jackett/Services/ConfigurationService.cs index 93138db90..e216f0f95 100644 --- a/src/Jackett/Services/ConfigurationService.cs +++ b/src/Jackett/Services/ConfigurationService.cs @@ -25,7 +25,7 @@ namespace Jackett.Services T GetConfig(); void SaveConfig(T config); string ApplicationFolder(); - string GetCardigannDefinitionsFolder(); + List GetCardigannDefinitionsFolders(); void CreateOrMigrateSettings(); void PerformMigration(); } @@ -198,8 +198,21 @@ namespace Jackett.Services return dir; } - public string GetCardigannDefinitionsFolder() + public List GetCardigannDefinitionsFolders() { + List dirs = new List(); + + if (System.Environment.OSVersion.Platform == PlatformID.Unix) + { + dirs.Add(Path.Combine(Environment.GetEnvironmentVariable("HOME"), ".config/cardigann/definitions/")); + dirs.Add("/etc/xdg/cardigan/definitions/"); + } + else + { + dirs.Add(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "cardigann\\definitions\\")); + dirs.Add(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "cardigann\\definitions\\")); + } + // If we are debugging we can use the non copied definitions. string dir = Path.Combine(ApplicationFolder(), "Definitions"); ; @@ -211,7 +224,8 @@ namespace Jackett.Services dir = sourcePath; } #endif - return dir; + dirs.Add(dir); + return dirs; } public string GetVersion() diff --git a/src/Jackett/Services/IndexerManagerService.cs b/src/Jackett/Services/IndexerManagerService.cs index e980b4c00..2232cd0d9 100644 --- a/src/Jackett/Services/IndexerManagerService.cs +++ b/src/Jackett/Services/IndexerManagerService.cs @@ -76,10 +76,14 @@ namespace Jackett.Services try { + if (!Directory.Exists(path)) + return; + DirectoryInfo d = new DirectoryInfo(path); foreach (var file in d.GetFiles("*.yml")) { + logger.Info("Loading Cardigann definition " + file.FullName); string DefinitionString = File.ReadAllText(file.FullName); CardigannIndexer idx = new CardigannIndexer(this, container.Resolve(), logger, container.Resolve(), DefinitionString); if (indexers.ContainsKey(idx.ID)) diff --git a/src/Jackett/Services/ServerService.cs b/src/Jackett/Services/ServerService.cs index 52e4dd8be..86f1def81 100644 --- a/src/Jackett/Services/ServerService.cs +++ b/src/Jackett/Services/ServerService.cs @@ -150,7 +150,10 @@ namespace Jackett.Services CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US"); // Load indexers indexerService.InitIndexers(); - indexerService.InitCardigannIndexers(configService.GetCardigannDefinitionsFolder()); + foreach(string dir in configService.GetCardigannDefinitionsFolders()) + { + indexerService.InitCardigannIndexers(dir); + } client.Init(); }