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)