2023-07-30 23:31:25 +02:00
|
|
|
|
using Logging;
|
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
using Tranga.LibraryManagers;
|
|
|
|
|
using Tranga.NotificationManagers;
|
|
|
|
|
|
|
|
|
|
namespace Tranga;
|
|
|
|
|
|
|
|
|
|
public class CommonObjects
|
|
|
|
|
{
|
|
|
|
|
public HashSet<LibraryManager> libraryManagers { get; init; }
|
|
|
|
|
public HashSet<NotificationManager> notificationManagers { get; init; }
|
2023-07-31 01:50:26 +02:00
|
|
|
|
[JsonIgnore]public Logger? logger { get; set; }
|
2023-07-30 23:31:25 +02:00
|
|
|
|
[JsonIgnore]private string settingsFilePath { get; init; }
|
|
|
|
|
|
|
|
|
|
public CommonObjects(HashSet<LibraryManager>? libraryManagers, HashSet<NotificationManager>? notificationManagers, Logger? logger, string settingsFilePath)
|
|
|
|
|
{
|
|
|
|
|
this.libraryManagers = libraryManagers??new();
|
|
|
|
|
this.notificationManagers = notificationManagers??new();
|
|
|
|
|
this.logger = logger;
|
|
|
|
|
this.settingsFilePath = settingsFilePath;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static CommonObjects LoadSettings(string settingsFilePath, Logger? logger)
|
|
|
|
|
{
|
|
|
|
|
if (!File.Exists(settingsFilePath))
|
|
|
|
|
return new CommonObjects(null, null, logger, settingsFilePath);
|
|
|
|
|
|
|
|
|
|
string toRead = File.ReadAllText(settingsFilePath);
|
|
|
|
|
TrangaSettings.SettingsJsonObject settings = JsonConvert.DeserializeObject<TrangaSettings.SettingsJsonObject>(
|
|
|
|
|
toRead,
|
|
|
|
|
new JsonSerializerSettings
|
|
|
|
|
{
|
|
|
|
|
Converters =
|
|
|
|
|
{
|
|
|
|
|
new NotificationManager.NotificationManagerJsonConverter(),
|
|
|
|
|
new LibraryManager.LibraryManagerJsonConverter()
|
|
|
|
|
}
|
|
|
|
|
})!;
|
|
|
|
|
|
|
|
|
|
if(settings.co is null)
|
|
|
|
|
return new CommonObjects(null, null, logger, settingsFilePath);
|
|
|
|
|
|
|
|
|
|
if (logger is not null)
|
|
|
|
|
{
|
2023-07-31 02:11:53 +02:00
|
|
|
|
settings.co.logger = logger;
|
2023-07-30 23:31:25 +02:00
|
|
|
|
foreach (LibraryManager lm in settings.co.libraryManagers)
|
|
|
|
|
lm.AddLogger(logger);
|
|
|
|
|
foreach(NotificationManager nm in settings.co.notificationManagers)
|
|
|
|
|
nm.AddLogger(logger);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return settings.co;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void ExportSettings()
|
|
|
|
|
{
|
2023-07-31 00:01:18 +02:00
|
|
|
|
TrangaSettings.SettingsJsonObject? settings = null;
|
2023-07-30 23:31:25 +02:00
|
|
|
|
if (File.Exists(settingsFilePath))
|
|
|
|
|
{
|
|
|
|
|
bool inUse = true;
|
|
|
|
|
while (inUse)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
using FileStream stream = new (settingsFilePath, FileMode.Open, FileAccess.Read, FileShare.None);
|
|
|
|
|
stream.Close();
|
|
|
|
|
inUse = false;
|
|
|
|
|
}
|
|
|
|
|
catch (IOException)
|
|
|
|
|
{
|
|
|
|
|
inUse = true;
|
|
|
|
|
Thread.Sleep(50);
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-07-31 00:01:18 +02:00
|
|
|
|
string toRead = File.ReadAllText(settingsFilePath);
|
|
|
|
|
settings = JsonConvert.DeserializeObject<TrangaSettings.SettingsJsonObject>(toRead,
|
|
|
|
|
new JsonSerializerSettings
|
|
|
|
|
{
|
|
|
|
|
Converters =
|
|
|
|
|
{
|
|
|
|
|
new NotificationManager.NotificationManagerJsonConverter(),
|
|
|
|
|
new LibraryManager.LibraryManagerJsonConverter()
|
|
|
|
|
}
|
|
|
|
|
});
|
2023-07-30 23:31:25 +02:00
|
|
|
|
}
|
|
|
|
|
settings = new TrangaSettings.SettingsJsonObject(settings?.ts, this);
|
|
|
|
|
File.WriteAllText(settingsFilePath, JsonConvert.SerializeObject(settings));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void UpdateSettings(TrangaSettings.UpdateField field, params string[] values)
|
|
|
|
|
{
|
|
|
|
|
switch (field)
|
|
|
|
|
{
|
|
|
|
|
case TrangaSettings.UpdateField.Komga:
|
|
|
|
|
if (values.Length != 2)
|
|
|
|
|
return;
|
|
|
|
|
libraryManagers.RemoveWhere(lm => lm.GetType() == typeof(Komga));
|
|
|
|
|
libraryManagers.Add(new Komga(values[0], values[1], this.logger));
|
|
|
|
|
break;
|
|
|
|
|
case TrangaSettings.UpdateField.Kavita:
|
|
|
|
|
if (values.Length != 3)
|
|
|
|
|
return;
|
|
|
|
|
libraryManagers.RemoveWhere(lm => lm.GetType() == typeof(Kavita));
|
|
|
|
|
libraryManagers.Add(new Kavita(values[0], values[1], values[2], this.logger));
|
|
|
|
|
break;
|
|
|
|
|
case TrangaSettings.UpdateField.Gotify:
|
|
|
|
|
if (values.Length != 2)
|
|
|
|
|
return;
|
|
|
|
|
notificationManagers.RemoveWhere(nm => nm.GetType() == typeof(Gotify));
|
|
|
|
|
Gotify newGotify = new(values[0], values[1], this.logger);
|
|
|
|
|
notificationManagers.Add(newGotify);
|
|
|
|
|
newGotify.SendNotification("Success!", "Gotify was added to Tranga!");
|
|
|
|
|
break;
|
|
|
|
|
case TrangaSettings.UpdateField.LunaSea:
|
|
|
|
|
if(values.Length != 1)
|
|
|
|
|
return;
|
|
|
|
|
notificationManagers.RemoveWhere(nm => nm.GetType() == typeof(LunaSea));
|
|
|
|
|
LunaSea newLunaSea = new(values[0], this.logger);
|
|
|
|
|
notificationManagers.Add(newLunaSea);
|
|
|
|
|
newLunaSea.SendNotification("Success!", "LunaSea was added to Tranga!");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
ExportSettings();
|
|
|
|
|
}
|
|
|
|
|
}
|