using DataModel.Database; using DeepL; namespace Processor; public static class DeepL { private static bool DEEPL_NOT_AVAILABLE = false; public readonly record struct DeepLUsage(bool Enabled, long CharacterCount, long CharacterLimit, bool AuthIssue = false); public static async Task GetUsage() { if(DEEPL_NOT_AVAILABLE) return new DeepLUsage(false, 0, 1); if (await AppSettings.GetDeepLMode() == SettingDeepLMode.DISABLED) return new DeepLUsage(false, 0, 1); var deepLAPIKey = await AppSettings.GetDeepLAPIKey(); if(string.IsNullOrWhiteSpace(deepLAPIKey)) return new DeepLUsage(false, 0, 1); try { using var deepl = new Translator(deepLAPIKey); var usage = await deepl.GetUsageAsync(); return new DeepLUsage(true, usage.Character!.Count, usage.Character.Limit); } catch (AuthorizationException e) { DEEPL_NOT_AVAILABLE = true; return new DeepLUsage(false, 0, 1, true); } } public static async Task Translate(string text, string targetCulture) { if (DEEPL_NOT_AVAILABLE) return string.Empty; if (await AppSettings.GetDeepLMode() == SettingDeepLMode.DISABLED) return string.Empty; var deepLAPIKey = await AppSettings.GetDeepLAPIKey(); if(string.IsNullOrWhiteSpace(deepLAPIKey)) return string.Empty; try { var sourceCultureIndex = await AppSettings.GetDeepLSourceCultureIndex(); var sourceCulture = await AppSettings.GetCultureCode(sourceCultureIndex); using var deepl = new Translator(deepLAPIKey); var translation = await deepl.TranslateTextAsync(text, sourceCulture, targetCulture); return translation.Text; } catch (AuthorizationException e) { DEEPL_NOT_AVAILABLE = true; return string.Empty; } } }