diff --git a/API/Controllers/MangaController.cs b/API/Controllers/MangaController.cs
index 7d46472..82b568a 100644
--- a/API/Controllers/MangaController.cs
+++ b/API/Controllers/MangaController.cs
@@ -138,8 +138,8 @@ public class MangaController(IServiceScope scope) : Controller
{
if (Tranga.GetRunningWorkers().Any(worker => worker is DownloadCoverFromMangaconnectorWorker w && w.MangaConnectorId.ObjId == MangaId))
{
- Response.Headers.Append("Retry-After", $"{TrangaSettings.workCycleTimeout * 2 / 1000:D}");
- return StatusCode(Status503ServiceUnavailable, TrangaSettings.workCycleTimeout * 2 / 1000);
+ Response.Headers.Append("Retry-After", $"{Tranga.Settings.WorkCycleTimeoutMs * 2 / 1000:D}");
+ return StatusCode(Status503ServiceUnavailable, Tranga.Settings.WorkCycleTimeoutMs * 2 / 1000);
}
else
return NoContent();
@@ -258,8 +258,8 @@ public class MangaController(IServiceScope scope) : Controller
{
if (Tranga.GetRunningWorkers().Any(worker => worker is RetrieveMangaChaptersFromMangaconnectorWorker w && w.MangaConnectorId.ObjId == MangaId && w.State < WorkerExecutionState.Completed))
{
- Response.Headers.Append("Retry-After", $"{TrangaSettings.workCycleTimeout * 2 / 1000:D}");
- return StatusCode(Status503ServiceUnavailable, TrangaSettings.workCycleTimeout * 2/ 1000);
+ Response.Headers.Append("Retry-After", $"{Tranga.Settings.WorkCycleTimeoutMs * 2 / 1000:D}");
+ return StatusCode(Status503ServiceUnavailable, Tranga.Settings.WorkCycleTimeoutMs * 2/ 1000);
}else
return Ok(0);
}
@@ -297,8 +297,8 @@ public class MangaController(IServiceScope scope) : Controller
{
if (Tranga.GetRunningWorkers().Any(worker => worker is RetrieveMangaChaptersFromMangaconnectorWorker w && w.MangaConnectorId.ObjId == MangaId && w.State < WorkerExecutionState.Completed))
{
- Response.Headers.Append("Retry-After", $"{TrangaSettings.workCycleTimeout * 2 / 1000:D}");
- return StatusCode(Status503ServiceUnavailable, TrangaSettings.workCycleTimeout * 2/ 1000);
+ Response.Headers.Append("Retry-After", $"{Tranga.Settings.WorkCycleTimeoutMs * 2 / 1000:D}");
+ return StatusCode(Status503ServiceUnavailable, Tranga.Settings.WorkCycleTimeoutMs * 2/ 1000);
}else
return NoContent();
}
diff --git a/API/Controllers/SettingsController.cs b/API/Controllers/SettingsController.cs
index 597f92c..6da2177 100644
--- a/API/Controllers/SettingsController.cs
+++ b/API/Controllers/SettingsController.cs
@@ -3,7 +3,6 @@ using API.Schema.MangaContext;
using API.Workers;
using Asp.Versioning;
using Microsoft.AspNetCore.Mvc;
-using Newtonsoft.Json.Linq;
using static Microsoft.AspNetCore.Http.StatusCodes;
// ReSharper disable InconsistentNaming
@@ -15,14 +14,14 @@ namespace API.Controllers;
public class SettingsController(IServiceScope scope) : Controller
{
///
- /// Get all Settings
+ /// Get all
///
///
[HttpGet]
- [ProducesResponseType(Status200OK, "application/json")]
+ [ProducesResponseType(Status200OK, "application/json")]
public IActionResult GetSettings()
{
- return Ok(JObject.Parse(TrangaSettings.Serialize()));
+ return Ok(Tranga.Settings);
}
///
@@ -33,7 +32,7 @@ public class SettingsController(IServiceScope scope) : Controller
[ProducesResponseType(Status200OK, "text/plain")]
public IActionResult GetUserAgent()
{
- return Ok(TrangaSettings.userAgent);
+ return Ok(Tranga.Settings.UserAgent);
}
///
@@ -44,7 +43,8 @@ public class SettingsController(IServiceScope scope) : Controller
[ProducesResponseType(Status200OK)]
public IActionResult SetUserAgent([FromBody]string userAgent)
{
- TrangaSettings.UpdateUserAgent(userAgent);
+ //TODO Validate
+ Tranga.Settings.SetUserAgent(userAgent);
return Ok();
}
@@ -56,7 +56,7 @@ public class SettingsController(IServiceScope scope) : Controller
[ProducesResponseType(Status200OK)]
public IActionResult ResetUserAgent()
{
- TrangaSettings.UpdateUserAgent(TrangaSettings.DefaultUserAgent);
+ Tranga.Settings.SetUserAgent(TrangaSettings.DefaultUserAgent);
return Ok();
}
@@ -68,7 +68,7 @@ public class SettingsController(IServiceScope scope) : Controller
[ProducesResponseType>(Status200OK, "application/json")]
public IActionResult GetRequestLimits()
{
- return Ok(TrangaSettings.requestLimits);
+ return Ok(Tranga.Settings.RequestLimits);
}
///
@@ -96,7 +96,7 @@ public class SettingsController(IServiceScope scope) : Controller
{
if (requestLimit <= 0)
return BadRequest();
- TrangaSettings.UpdateRequestLimit(RequestType, requestLimit);
+ Tranga.Settings.SetRequestLimit(RequestType, requestLimit);
return Ok();
}
@@ -108,7 +108,7 @@ public class SettingsController(IServiceScope scope) : Controller
[ProducesResponseType(Status200OK)]
public IActionResult ResetRequestLimits(RequestType RequestType)
{
- TrangaSettings.UpdateRequestLimit(RequestType, TrangaSettings.DefaultRequestLimits[RequestType]);
+ Tranga.Settings.SetRequestLimit(RequestType, TrangaSettings.DefaultRequestLimits[RequestType]);
return Ok();
}
@@ -120,35 +120,35 @@ public class SettingsController(IServiceScope scope) : Controller
[ProducesResponseType(Status200OK)]
public IActionResult ResetRequestLimits()
{
- TrangaSettings.ResetRequestLimits();
+ Tranga.Settings.ResetRequestLimits();
return Ok();
}
///
/// Returns Level of Image-Compression for Images
///
- /// JPEG compression-level as Integer
- [HttpGet("ImageCompression")]
+ /// JPEG ImageCompression-level as Integer
+ [HttpGet("ImageCompressionLevel")]
[ProducesResponseType(Status200OK, "text/plain")]
public IActionResult GetImageCompression()
{
- return Ok(TrangaSettings.compression);
+ return Ok(Tranga.Settings.ImageCompression);
}
///
/// Set the Image-Compression-Level for Images
///
- /// 100 to disable, 0-99 for JPEG compression-Level
+ /// 100 to disable, 0-99 for JPEG ImageCompression-Level
///
/// Level outside permitted range
- [HttpPatch("ImageCompression")]
+ [HttpPatch("ImageCompressionLevel/{level}")]
[ProducesResponseType(Status200OK)]
[ProducesResponseType(Status400BadRequest)]
- public IActionResult SetImageCompression([FromBody]int level)
+ public IActionResult SetImageCompression(int level)
{
if (level < 1 || level > 100)
return BadRequest();
- TrangaSettings.UpdateCompressImages(level);
+ Tranga.Settings.UpdateImageCompression(level);
return Ok();
}
@@ -160,7 +160,7 @@ public class SettingsController(IServiceScope scope) : Controller
[ProducesResponseType(Status200OK, "text/plain")]
public IActionResult GetBwImagesToggle()
{
- return Ok(TrangaSettings.bwImages);
+ return Ok(Tranga.Settings.BlackWhiteImages);
}
///
@@ -168,37 +168,11 @@ public class SettingsController(IServiceScope scope) : Controller
///
/// true to enable
///
- [HttpPatch("BWImages")]
+ [HttpPatch("BWImages/{enabled}")]
[ProducesResponseType(Status200OK)]
- public IActionResult SetBwImagesToggle([FromBody]bool enabled)
+ public IActionResult SetBwImagesToggle(bool enabled)
{
- TrangaSettings.UpdateBwImages(enabled);
- return Ok();
- }
-
- ///
- /// Get state of April Fools Mode
- ///
- /// April Fools Mode disables all downloads on April 1st
- /// True if enabled
- [HttpGet("AprilFoolsMode")]
- [ProducesResponseType(Status200OK, "text/plain")]
- public IActionResult GetAprilFoolsMode()
- {
- return Ok(TrangaSettings.aprilFoolsMode);
- }
-
- ///
- /// Enable/Disable April Fools Mode
- ///
- /// April Fools Mode disables all downloads on April 1st
- /// true to enable
- ///
- [HttpPatch("AprilFoolsMode")]
- [ProducesResponseType(Status200OK)]
- public IActionResult SetAprilFoolsMode([FromBody]bool enabled)
- {
- TrangaSettings.UpdateAprilFoolsMode(enabled);
+ Tranga.Settings.SetBlackWhiteImageEnabled(enabled);
return Ok();
}
@@ -224,7 +198,7 @@ public class SettingsController(IServiceScope scope) : Controller
[ProducesResponseType(Status200OK, "text/plain")]
public IActionResult GetCustomNamingScheme()
{
- return Ok(TrangaSettings.chapterNamingScheme);
+ return Ok(Tranga.Settings.ChapterNamingScheme);
}
///
@@ -250,7 +224,7 @@ public class SettingsController(IServiceScope scope) : Controller
MangaContext context = scope.ServiceProvider.GetRequiredService();
Dictionary oldPaths = context.Chapters.ToDictionary(c => c, c => c.FullArchiveFilePath);
- TrangaSettings.UpdateChapterNamingScheme(namingScheme);
+ Tranga.Settings.SetChapterNamingScheme(namingScheme);
MoveFileOrFolderWorker[] newJobs = oldPaths
.Select(kv => new MoveFileOrFolderWorker(kv.Value, kv.Key.FullArchiveFilePath)).ToArray();
Tranga.AddWorkers(newJobs);
@@ -267,7 +241,7 @@ public class SettingsController(IServiceScope scope) : Controller
[ProducesResponseType(Status200OK)]
public IActionResult SetFlareSolverrUrl([FromBody]string flareSolverrUrl)
{
- TrangaSettings.UpdateFlareSolverrUrl(flareSolverrUrl);
+ Tranga.Settings.SetFlareSolverrUrl(flareSolverrUrl);
return Ok();
}
@@ -279,7 +253,7 @@ public class SettingsController(IServiceScope scope) : Controller
[ProducesResponseType(Status200OK)]
public IActionResult ClearFlareSolverrUrl()
{
- TrangaSettings.UpdateFlareSolverrUrl(string.Empty);
+ Tranga.Settings.SetFlareSolverrUrl(string.Empty);
return Ok();
}
diff --git a/API/MangaDownloadClients/DownloadClient.cs b/API/MangaDownloadClients/DownloadClient.cs
index 076937f..0906b14 100644
--- a/API/MangaDownloadClients/DownloadClient.cs
+++ b/API/MangaDownloadClients/DownloadClient.cs
@@ -16,14 +16,14 @@ public abstract class DownloadClient
public RequestResult MakeRequest(string url, RequestType requestType, string? referrer = null, string? clickButton = null)
{
Log.Debug($"Requesting {requestType} {url}");
- if (!TrangaSettings.requestLimits.ContainsKey(requestType))
+ if (!Tranga.Settings.RequestLimits.ContainsKey(requestType))
{
return new RequestResult(HttpStatusCode.NotAcceptable, null, Stream.Null);
}
- int rateLimit = TrangaSettings.userAgent == TrangaSettings.DefaultUserAgent
+ int rateLimit = Tranga.Settings.UserAgent == TrangaSettings.DefaultUserAgent
? TrangaSettings.DefaultRequestLimits[requestType]
- : TrangaSettings.requestLimits[requestType];
+ : Tranga.Settings.RequestLimits[requestType];
TimeSpan timeBetweenRequests = TimeSpan.FromMinutes(1).Divide(rateLimit);
DateTime now = DateTime.Now;
diff --git a/API/MangaDownloadClients/FlareSolverrDownloadClient.cs b/API/MangaDownloadClients/FlareSolverrDownloadClient.cs
index 03069db..a29c9c8 100644
--- a/API/MangaDownloadClients/FlareSolverrDownloadClient.cs
+++ b/API/MangaDownloadClients/FlareSolverrDownloadClient.cs
@@ -18,13 +18,13 @@ public class FlareSolverrDownloadClient : DownloadClient
Log.Warn("Client can not click button");
if(referrer is not null)
Log.Warn("Client can not set referrer");
- if (TrangaSettings.flareSolverrUrl == string.Empty)
+ if (Tranga.Settings.FlareSolverrUrl == string.Empty)
{
Log.Error("FlareSolverr URL is empty");
return new(HttpStatusCode.InternalServerError, null, Stream.Null);
}
- Uri flareSolverrUri = new (TrangaSettings.flareSolverrUrl);
+ Uri flareSolverrUri = new (Tranga.Settings.FlareSolverrUrl);
if (flareSolverrUri.Segments.Last() != "v1")
flareSolverrUri = new UriBuilder(flareSolverrUri)
{
@@ -35,7 +35,7 @@ public class FlareSolverrDownloadClient : DownloadClient
{
Timeout = TimeSpan.FromSeconds(10),
DefaultVersionPolicy = HttpVersionPolicy.RequestVersionOrHigher,
- DefaultRequestHeaders = { { "User-Agent", TrangaSettings.userAgent } }
+ DefaultRequestHeaders = { { "User-Agent", Tranga.Settings.UserAgent } }
};
JObject requestObj = new()
diff --git a/API/MangaDownloadClients/HttpDownloadClient.cs b/API/MangaDownloadClients/HttpDownloadClient.cs
index e5a3fd6..9b53847 100644
--- a/API/MangaDownloadClients/HttpDownloadClient.cs
+++ b/API/MangaDownloadClients/HttpDownloadClient.cs
@@ -12,7 +12,7 @@ internal class HttpDownloadClient : DownloadClient
HttpClient client = new();
client.Timeout = TimeSpan.FromSeconds(10);
client.DefaultVersionPolicy = HttpVersionPolicy.RequestVersionOrHigher;
- client.DefaultRequestHeaders.Add("User-Agent", TrangaSettings.userAgent);
+ client.DefaultRequestHeaders.Add("User-Agent", Tranga.Settings.UserAgent);
HttpResponseMessage? response;
Uri uri = new(url);
HttpRequestMessage requestMessage = new(HttpMethod.Get, uri);
diff --git a/API/Program.cs b/API/Program.cs
index 9e013d8..dfc4c77 100644
--- a/API/Program.cs
+++ b/API/Program.cs
@@ -97,8 +97,7 @@ app.MapControllers()
app.UseSwagger();
app.UseSwaggerUI(options =>
{
- options.SwaggerEndpoint(
- $"/swagger/v2/swagger.json", "v2");
+ options.SwaggerEndpoint($"/swagger/v2/swagger.json", "v2");
});
app.UseHttpsRedirection();
@@ -119,7 +118,7 @@ using (IServiceScope scope = app.Services.CreateScope())
MangaConnector[] newConnectors = connectors.Where(c => !context.MangaConnectors.Contains(c)).ToArray();
context.MangaConnectors.AddRange(newConnectors);
if (!context.FileLibraries.Any())
- context.FileLibraries.Add(new FileLibrary(TrangaSettings.downloadLocation, "Default FileLibrary"));
+ context.FileLibraries.Add(new FileLibrary(Tranga.Settings.DownloadLocation, "Default FileLibrary"));
context.Sync();
}
diff --git a/API/Schema/MangaContext/Chapter.cs b/API/Schema/MangaContext/Chapter.cs
index 8da8a23..b148356 100644
--- a/API/Schema/MangaContext/Chapter.cs
+++ b/API/Schema/MangaContext/Chapter.cs
@@ -108,7 +108,7 @@ public class Chapter : Identifiable, IComparable
private static readonly Regex ReplaceRexx = new(@"%([a-zA-Z])|(.+?)");
private string GetArchiveFilePath()
{
- string archiveNamingScheme = TrangaSettings.chapterNamingScheme;
+ string archiveNamingScheme = Tranga.Settings.ChapterNamingScheme;
StringBuilder stringBuilder = new();
foreach (Match nullable in NullableRex.Matches(archiveNamingScheme))
{
diff --git a/API/Schema/NotificationsContext/NotificationConnectors/NotificationConnector.cs b/API/Schema/NotificationsContext/NotificationConnectors/NotificationConnector.cs
index c3c01cb..63c3d07 100644
--- a/API/Schema/NotificationsContext/NotificationConnectors/NotificationConnector.cs
+++ b/API/Schema/NotificationsContext/NotificationConnectors/NotificationConnector.cs
@@ -34,7 +34,7 @@ public class NotificationConnector(string name, string url, Dictionary Path.Join(RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ? "/usr/share" : Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "tranga-api");
+ [JsonIgnore]
+ public static string settingsFilePath => Path.Join(workingDirectory, "settings.json");
+ [JsonIgnore]
+ public static string coverImageCache => Path.Join(workingDirectory, "imageCache");
+ public string DownloadLocation => RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ? "/Manga" : Path.Join(Directory.GetCurrentDirectory(), "Manga");
[JsonIgnore]
internal static readonly string DefaultUserAgent = $"Tranga/2.0 ({Enum.GetName(Environment.OSVersion.Platform)}; {(Environment.Is64BitOperatingSystem ? "x64" : "")})";
- public static string userAgent { get; private set; } = DefaultUserAgent;
- public static int compression{ get; private set; } = 40;
- public static bool bwImages { get; private set; } = false;
- public static string flareSolverrUrl { get; private set; } = string.Empty;
+ public string UserAgent { get; private set; } = DefaultUserAgent;
+ public int ImageCompression{ get; private set; } = 40;
+ public bool BlackWhiteImages { get; private set; } = false;
+ public string FlareSolverrUrl { get; private set; } = string.Empty;
///
/// Placeholders:
/// %M Obj Name
@@ -30,13 +36,8 @@ public static class TrangaSettings
/// ?_(...) replace _ with a value from above:
/// Everything inside the braces will only be added if the value of %_ is not null
///
- public static string chapterNamingScheme { get; private set; } = "%M - ?V(Vol.%V )Ch.%C?T( - %T)";
- [JsonIgnore]
- public static string settingsFilePath => Path.Join(workingDirectory, "settings.json");
- [JsonIgnore]
- public static string coverImageCache => Path.Join(workingDirectory, "imageCache");
- public static bool aprilFoolsMode { get; private set; } = true;
- public static int workCycleTimeout { get; private set; } = 20000;
+ public string ChapterNamingScheme { get; private set; } = "%M - ?V(Vol.%V )Ch.%C?T( - %T)";
+ public int WorkCycleTimeoutMs { get; private set; } = 20000;
[JsonIgnore]
internal static readonly Dictionary DefaultRequestLimits = new ()
{
@@ -47,142 +48,57 @@ public static class TrangaSettings
{RequestType.MangaCover, 60},
{RequestType.Default, 60}
};
- public static Dictionary requestLimits { get; private set; } = DefaultRequestLimits;
+ public Dictionary RequestLimits { get; private set; } = DefaultRequestLimits;
- public static TimeSpan NotificationUrgencyDelay(NotificationUrgency urgency) => urgency switch
+ public static TrangaSettings Load()
{
- NotificationUrgency.High => TimeSpan.Zero,
- NotificationUrgency.Normal => TimeSpan.FromMinutes(5),
- NotificationUrgency.Low => TimeSpan.FromMinutes(10),
- _ => TimeSpan.FromHours(1)
- }; //TODO make this a setting?
-
- public static void Load()
- {
- if(File.Exists(settingsFilePath))
- Deserialize(File.ReadAllText(settingsFilePath));
- else return;
-
- Directory.CreateDirectory(downloadLocation);
- ExportSettings();
+ return JsonConvert.DeserializeObject(File.ReadAllText(settingsFilePath));
}
- public static void UpdateAprilFoolsMode(bool enabled)
+ public void Save()
{
- aprilFoolsMode = enabled;
- ExportSettings();
+ File.WriteAllText(settingsFilePath, JsonConvert.SerializeObject(this));
}
- public static void UpdateCompressImages(int value)
+ public void SetUserAgent(string value)
{
- compression = int.Clamp(value, 1, 100);
- ExportSettings();
+ this.UserAgent = value;
+ Save();
}
- public static void UpdateBwImages(bool enabled)
+ public void SetRequestLimit(RequestType type, int value)
{
- bwImages = enabled;
- ExportSettings();
+ this.RequestLimits[type] = value;
+ Save();
}
- public static void UpdateUserAgent(string? customUserAgent)
+ public void ResetRequestLimits()
{
- userAgent = customUserAgent ?? DefaultUserAgent;
- ExportSettings();
+ this.RequestLimits = DefaultRequestLimits;
+ Save();
}
- public static void UpdateRequestLimit(RequestType requestType, int newLimit)
+ public void UpdateImageCompression(int value)
{
- requestLimits[requestType] = newLimit;
- ExportSettings();
+ this.ImageCompression = value;
+ Save();
}
- public static void UpdateChapterNamingScheme(string namingScheme)
+ public void SetBlackWhiteImageEnabled(bool enabled)
{
- chapterNamingScheme = namingScheme;
- ExportSettings();
+ this.BlackWhiteImages = enabled;
+ Save();
}
- public static void UpdateFlareSolverrUrl(string url)
+ public void SetChapterNamingScheme(string scheme)
{
- flareSolverrUrl = url;
- ExportSettings();
+ this.ChapterNamingScheme = scheme;
+ Save();
}
- public static void ResetRequestLimits()
+ public void SetFlareSolverrUrl(string url)
{
- requestLimits = DefaultRequestLimits;
- ExportSettings();
- }
-
- public static void ExportSettings()
- {
- if (File.Exists(settingsFilePath))
- {
- while(IsFileInUse(settingsFilePath))
- Thread.Sleep(100);
- }
- else
- Directory.CreateDirectory(new FileInfo(settingsFilePath).DirectoryName!);
- File.WriteAllText(settingsFilePath, Serialize());
- }
-
- internal static bool IsFileInUse(string filePath)
- {
- if (!File.Exists(filePath))
- return false;
- try
- {
- using FileStream stream = new (filePath, FileMode.Open, FileAccess.Read, FileShare.None);
- stream.Close();
- return false;
- }
- catch (IOException)
- {
- return true;
- }
- }
-
- public static JObject AsJObject()
- {
- JObject jobj = new ();
- jobj.Add("downloadLocation", JToken.FromObject(downloadLocation));
- jobj.Add("workingDirectory", JToken.FromObject(workingDirectory));
- jobj.Add("userAgent", JToken.FromObject(userAgent));
- jobj.Add("aprilFoolsMode", JToken.FromObject(aprilFoolsMode));
- jobj.Add("requestLimits", JToken.FromObject(requestLimits));
- jobj.Add("compression", JToken.FromObject(compression));
- jobj.Add("bwImages", JToken.FromObject(bwImages));
- jobj.Add("workCycleTimeout", JToken.FromObject(workCycleTimeout));
- jobj.Add("chapterNamingScheme", JToken.FromObject(chapterNamingScheme));
- jobj.Add("flareSolverrUrl", JToken.FromObject(flareSolverrUrl));
- return jobj;
- }
-
- public static string Serialize() => AsJObject().ToString();
-
- public static void Deserialize(string serialized)
- {
- JObject jobj = JObject.Parse(serialized);
- if (jobj.TryGetValue("downloadLocation", out JToken? dl))
- downloadLocation = dl.Value()!;
- if (jobj.TryGetValue("workingDirectory", out JToken? wd))
- workingDirectory = wd.Value()!;
- if (jobj.TryGetValue("userAgent", out JToken? ua))
- userAgent = ua.Value()!;
- if (jobj.TryGetValue("aprilFoolsMode", out JToken? afm))
- aprilFoolsMode = afm.Value()!;
- if (jobj.TryGetValue("requestLimits", out JToken? rl))
- requestLimits = rl.ToObject>()!;
- if (jobj.TryGetValue("compression", out JToken? ci))
- compression = ci.Value()!;
- if (jobj.TryGetValue("bwImages", out JToken? bwi))
- bwImages = bwi.Value()!;
- if (jobj.TryGetValue("workCycleTimeout", out JToken? snjt))
- workCycleTimeout = snjt.Value()!;
- if (jobj.TryGetValue("chapterNamingScheme", out JToken? cns))
- chapterNamingScheme = cns.Value()!;
- if (jobj.TryGetValue("flareSolverrUrl", out JToken? fsu))
- flareSolverrUrl = fsu.Value()!;
+ this.FlareSolverrUrl = url;
+ Save();
}
}
\ No newline at end of file
diff --git a/API/Workers/BaseWorker.cs b/API/Workers/BaseWorker.cs
index 88167e5..4fbcc91 100644
--- a/API/Workers/BaseWorker.cs
+++ b/API/Workers/BaseWorker.cs
@@ -101,7 +101,7 @@ public abstract class BaseWorker : Identifiable
Log.Info($"Waiting for {MissingDependencies.Count()} Dependencies {this}:\n\t{string.Join("\n\t", MissingDependencies.Select(d => d.ToString()))}");
while (CancellationTokenSource.IsCancellationRequested == false && MissingDependencies.Any())
{
- Thread.Sleep(TrangaSettings.workCycleTimeout);
+ Thread.Sleep(Tranga.Settings.WorkCycleTimeoutMs);
}
return [this];
}
diff --git a/API/Workers/MangaDownloadWorkers/DownloadChapterFromMangaconnectorWorker.cs b/API/Workers/MangaDownloadWorkers/DownloadChapterFromMangaconnectorWorker.cs
index 528fd97..f9b9652 100644
--- a/API/Workers/MangaDownloadWorkers/DownloadChapterFromMangaconnectorWorker.cs
+++ b/API/Workers/MangaDownloadWorkers/DownloadChapterFromMangaconnectorWorker.cs
@@ -96,7 +96,7 @@ public class DownloadChapterFromMangaconnectorWorker(Chapter chapter, IEnumerabl
private void ProcessImage(string imagePath)
{
- if (!TrangaSettings.bwImages && TrangaSettings.compression == 100)
+ if (!Tranga.Settings.BlackWhiteImages && Tranga.Settings.ImageCompression == 100)
{
Log.Debug("No processing requested for image");
return;
@@ -107,12 +107,12 @@ public class DownloadChapterFromMangaconnectorWorker(Chapter chapter, IEnumerabl
try
{
using Image image = Image.Load(imagePath);
- if (TrangaSettings.bwImages)
+ if (Tranga.Settings.BlackWhiteImages)
image.Mutate(i => i.ApplyProcessor(new AdaptiveThresholdProcessor()));
File.Delete(imagePath);
image.SaveAsJpeg(imagePath, new JpegEncoder()
{
- Quality = TrangaSettings.compression
+ Quality = Tranga.Settings.ImageCompression
});
}
catch (Exception e)