diff --git a/Tranga/Migrate.cs b/Tranga/Migrate.cs deleted file mode 100644 index 02b4988..0000000 --- a/Tranga/Migrate.cs +++ /dev/null @@ -1,33 +0,0 @@ -using Newtonsoft.Json; -using Tranga.TrangaTasks; - -namespace Tranga; - -public static class Migrate -{ - private static readonly ushort CurrentVersion = 16; - public static void Files(TrangaSettings settings) - { - settings.version ??= 15; - switch (settings.version) - { - case 15: - RemoveUpdateLibraryTask(settings); - break; - } - - settings.version = CurrentVersion; - settings.ExportSettings(); - } - - private static void RemoveUpdateLibraryTask(TrangaSettings settings) - { - if (!File.Exists(settings.tasksFilePath)) - return; - - string tasksJsonString = File.ReadAllText(settings.tasksFilePath); - HashSet tasks = JsonConvert.DeserializeObject>(tasksJsonString, new JsonSerializerSettings { Converters = { new TrangaTask.TrangaTaskJsonConverter() } })!; - tasks.RemoveWhere(t => t.task == TrangaTask.Task.UpdateLibraries); - File.WriteAllText(settings.tasksFilePath, JsonConvert.SerializeObject(tasks)); - } -} \ No newline at end of file diff --git a/Tranga/Migrator.cs b/Tranga/Migrator.cs new file mode 100644 index 0000000..3ebbf96 --- /dev/null +++ b/Tranga/Migrator.cs @@ -0,0 +1,79 @@ +using System.Text.Json.Nodes; +using Newtonsoft.Json; +using Tranga.LibraryManagers; +using Tranga.NotificationManagers; +using Tranga.TrangaTasks; + +namespace Tranga; + +public static class Migrator +{ + private static readonly ushort CurrentVersion = 17; + public static void Migrate(string settingsFilePath) + { + if (!File.Exists(settingsFilePath)) + return; + JsonNode settingsNode = JsonNode.Parse(File.ReadAllText(settingsFilePath))!; + ushort version = settingsNode["version"]!.GetValue(); + switch (version) + { + case 15: + MoveToCommonObjects(settingsFilePath); + TrangaSettings.SettingsJsonObject sjo = JsonConvert.DeserializeObject(File.ReadAllText(settingsFilePath))!; + RemoveUpdateLibraryTask(sjo.ts!); + break; + case 16: + MoveToCommonObjects(settingsFilePath); + break; + } + TrangaSettings.SettingsJsonObject sjo2 = JsonConvert.DeserializeObject(File.ReadAllText(settingsFilePath))!; + sjo2.ts!.version = CurrentVersion; + sjo2.ts!.ExportSettings(); + } + + private static void RemoveUpdateLibraryTask(TrangaSettings settings) + { + if (!File.Exists(settings.tasksFilePath)) + return; + + string tasksJsonString = File.ReadAllText(settings.tasksFilePath); + HashSet tasks = JsonConvert.DeserializeObject>(tasksJsonString, new JsonSerializerSettings { Converters = { new TrangaTask.TrangaTaskJsonConverter() } })!; + tasks.RemoveWhere(t => t.task == TrangaTask.Task.UpdateLibraries); + File.WriteAllText(settings.tasksFilePath, JsonConvert.SerializeObject(tasks)); + } + + public static void MoveToCommonObjects(string settingsFilePath) + { + if (!File.Exists(settingsFilePath)) + return; + + JsonNode node = JsonNode.Parse(File.ReadAllText(settingsFilePath))!; + TrangaSettings settings = new( + node["downloadLocation"]!.GetValue(), + node["workingDirectory"]!.GetValue()); + JsonArray libraryManagers = node["libraryManagers"]!.AsArray(); + JsonNode? komgaNode = libraryManagers.FirstOrDefault(lm => lm["libraryType"].GetValue() == LibraryManager.LibraryType.Komga); + JsonNode? kavitaNode = libraryManagers.FirstOrDefault(lm => lm["libraryType"].GetValue() == LibraryManager.LibraryType.Kavita); + HashSet lms = new(); + if (komgaNode is not null) + lms.Add(new Komga(komgaNode["baseUrl"]!.GetValue(), komgaNode["auth"]!.GetValue(), null)); + if (kavitaNode is not null) + lms.Add(new Kavita(kavitaNode["baseUrl"]!.GetValue(), kavitaNode["auth"]!.GetValue(), null)); + + JsonArray notificationManagers = node["libraryManagers"]!.AsArray(); + JsonNode? gotifyNode = notificationManagers.FirstOrDefault(nm => + nm["notificationManagerType"].GetValue() == NotificationManager.NotificationManagerType.Gotify); + JsonNode? lunaSeaNode = notificationManagers.FirstOrDefault(nm => + nm["notificationManagerType"].GetValue() == NotificationManager.NotificationManagerType.LunaSea); + HashSet nms = new(); + if (gotifyNode is not null) + nms.Add(new Gotify(gotifyNode["endpoint"]!.GetValue(), gotifyNode["appToken"]!.GetValue())); + if (lunaSeaNode is not null) + nms.Add(new LunaSea(lunaSeaNode["id"]!.GetValue())); + + CommonObjects co = new (lms, nms, null, settingsFilePath); + + TrangaSettings.SettingsJsonObject sjo = new(settings, co); + File.WriteAllText(settingsFilePath, JsonConvert.SerializeObject(sjo)); + } +} \ No newline at end of file diff --git a/Tranga/TaskManager.cs b/Tranga/TaskManager.cs index 3ab8ba2..04f4afa 100644 --- a/Tranga/TaskManager.cs +++ b/Tranga/TaskManager.cs @@ -36,7 +36,6 @@ public class TaskManager }; this.settings = settings; - Migrate.Files(settings); ImportData(); ExportDataAndSettings(); Thread taskChecker = new(TaskCheckerThread); diff --git a/Tranga/Tranga.cs b/Tranga/Tranga.cs index 5de93a5..dc29b39 100644 --- a/Tranga/Tranga.cs +++ b/Tranga/Tranga.cs @@ -30,6 +30,8 @@ public static class Tranga "-------------------------------------------\n"+ " Starting Tranga-API\n"+ "-------------------------------------------"); + logger.WriteLine("Tranga", "Migrating..."); + Migrator.Migrate(settingsFilePath); TrangaSettings settings; if (File.Exists(settingsFilePath))