From 433a4e33a118a2fde6263bf9d6518216e30c9a21 Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Mon, 3 Oct 2022 17:53:49 +0200 Subject: [PATCH] Fixed DeepL settings' cache --- I18N Commander/Processor/AppSettings.cs | 198 ++++++++++++++---------- 1 file changed, 113 insertions(+), 85 deletions(-) diff --git a/I18N Commander/Processor/AppSettings.cs b/I18N Commander/Processor/AppSettings.cs index 86d2a2e..9b75cb0 100644 --- a/I18N Commander/Processor/AppSettings.cs +++ b/I18N Commander/Processor/AppSettings.cs @@ -51,29 +51,36 @@ public static class AppSettings { if (CACHE_DEEPL_MODE_IS_LOADED) return CACHE_DEEPL_MODE; - - // Get the database: - await using var db = ProcessorMeta.ServiceProvider.GetRequiredService(); - - // Check, if the setting is already set: - if (await db.Settings.FirstOrDefaultAsync(n => n.Code == SettingNames.DEEPL_MODE) is { } existingSetting) - return (SettingDeepLMode) existingSetting.IntegerValue; - // Does not exist, so create it: - var setting = new Setting + var mode = SettingDeepLMode.DISABLED; + try { - Code = SettingNames.DEEPL_MODE, - IntegerValue = (int)SettingDeepLMode.DISABLED, - }; - - await db.Settings.AddAsync(setting); - await db.SaveChangesAsync(); - - var mode = (SettingDeepLMode) setting.IntegerValue; - CACHE_DEEPL_MODE = mode; - CACHE_DEEPL_MODE_IS_LOADED = true; - - return mode; + // Get the database: + await using var db = ProcessorMeta.ServiceProvider.GetRequiredService(); + + // Check, if the setting is already set: + if (await db.Settings.FirstOrDefaultAsync(n => n.Code == SettingNames.DEEPL_MODE) is { } existingSetting) + { + mode = (SettingDeepLMode) existingSetting.IntegerValue; + return mode; + } + + // Does not exist, so create it: + var setting = new Setting + { + Code = SettingNames.DEEPL_MODE, + IntegerValue = (int) mode, + }; + + await db.Settings.AddAsync(setting); + await db.SaveChangesAsync(); + return mode; + } + finally + { + CACHE_DEEPL_MODE = mode; + CACHE_DEEPL_MODE_IS_LOADED = true; + } } #endregion @@ -118,29 +125,36 @@ public static class AppSettings // Check the cache: if (CACHE_DEEPL_API_KEY_IS_LOADED) return CACHE_DEEPL_API_KEY; - - // Get the database: - await using var db = ProcessorMeta.ServiceProvider.GetRequiredService(); - - // Check, if the setting is already set: - if (await db.Settings.FirstOrDefaultAsync(n => n.Code == SettingNames.DEEPL_API_KEY) is { } existingSetting) - return existingSetting.TextValue; - - // Does not exist, so create it: - var setting = new Setting + + var key = string.Empty; + try { - Code = SettingNames.DEEPL_API_KEY, - TextValue = string.Empty, - }; - - await db.Settings.AddAsync(setting); - await db.SaveChangesAsync(); - - var key = setting.TextValue; - CACHE_DEEPL_API_KEY = key; - CACHE_DEEPL_API_KEY_IS_LOADED = true; - - return key; + // Get the database: + await using var db = ProcessorMeta.ServiceProvider.GetRequiredService(); + + // Check, if the setting is already set: + if (await db.Settings.FirstOrDefaultAsync(n => n.Code == SettingNames.DEEPL_API_KEY) is { } existingSetting) + { + key = existingSetting.TextValue; + return key; + } + + // Does not exist, so create it: + var setting = new Setting + { + Code = SettingNames.DEEPL_API_KEY, + TextValue = key, + }; + + await db.Settings.AddAsync(setting); + await db.SaveChangesAsync(); + return key; + } + finally + { + CACHE_DEEPL_API_KEY = key; + CACHE_DEEPL_API_KEY_IS_LOADED = true; + } } #endregion @@ -189,28 +203,35 @@ public static class AppSettings if (CACHE_DEEPL_ACTION_IS_LOADED) return CACHE_DEEPL_ACTION; - // Get the database: - await using var db = ProcessorMeta.ServiceProvider.GetRequiredService(); - - // Check, if the setting is already set: - if (await db.Settings.FirstOrDefaultAsync(n => n.Code == SettingNames.DEEPL_ACTION) is { } existingSetting) - return (SettingDeepLAction) existingSetting.IntegerValue; - - // Does not exist, so create it: - var setting = new Setting + var action = SettingDeepLAction.MANUAL; + try { - Code = SettingNames.DEEPL_ACTION, - IntegerValue = (int)SettingDeepLAction.MANUAL, - }; - - await db.Settings.AddAsync(setting); - await db.SaveChangesAsync(); - - var action = (SettingDeepLAction) setting.IntegerValue; - CACHE_DEEPL_ACTION = action; - CACHE_DEEPL_ACTION_IS_LOADED = true; - - return action; + // Get the database: + await using var db = ProcessorMeta.ServiceProvider.GetRequiredService(); + + // Check, if the setting is already set: + if (await db.Settings.FirstOrDefaultAsync(n => n.Code == SettingNames.DEEPL_ACTION) is { } existingSetting) + { + action = (SettingDeepLAction) existingSetting.IntegerValue; + return action; + } + + // Does not exist, so create it: + var setting = new Setting + { + Code = SettingNames.DEEPL_ACTION, + IntegerValue = (int) action, + }; + + await db.Settings.AddAsync(setting); + await db.SaveChangesAsync(); + return action; + } + finally + { + CACHE_DEEPL_ACTION = action; + CACHE_DEEPL_ACTION_IS_LOADED = true; + } } #endregion @@ -256,28 +277,35 @@ public static class AppSettings if (CACHE_DEEPL_SOURCE_CULTURE_IS_LOADED) return CACHE_DEEPL_SOURCE_CULTURE; - // Get the database: - await using var db = ProcessorMeta.ServiceProvider.GetRequiredService(); - - // Check, if the setting is already set: - if (await db.Settings.FirstOrDefaultAsync(n => n.Code == SettingNames.DEEPL_SOURCE_CULTURE) is { } existingSetting) - return existingSetting.IntegerValue; - - // Does not exist, so create it: - var setting = new Setting + var cultureIndex = -1; + try { - Code = SettingNames.DEEPL_SOURCE_CULTURE, - IntegerValue = -1, - }; - - await db.Settings.AddAsync(setting); - await db.SaveChangesAsync(); - - var cultureIndex = setting.IntegerValue; - CACHE_DEEPL_SOURCE_CULTURE = cultureIndex; - CACHE_DEEPL_SOURCE_CULTURE_IS_LOADED = true; - - return cultureIndex; + // Get the database: + await using var db = ProcessorMeta.ServiceProvider.GetRequiredService(); + + // Check, if the setting is already set: + if (await db.Settings.FirstOrDefaultAsync(n => n.Code == SettingNames.DEEPL_SOURCE_CULTURE) is { } existingSetting) + { + cultureIndex = existingSetting.IntegerValue; + return cultureIndex; + } + + // Does not exist, so create it: + var setting = new Setting + { + Code = SettingNames.DEEPL_SOURCE_CULTURE, + IntegerValue = cultureIndex, + }; + + await db.Settings.AddAsync(setting); + await db.SaveChangesAsync(); + return cultureIndex; + } + finally + { + CACHE_DEEPL_SOURCE_CULTURE = cultureIndex; + CACHE_DEEPL_SOURCE_CULTURE_IS_LOADED = true; + } } #endregion