using DataModel.Database; using DataModel.Database.Common; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; namespace Processor; public static class TranslationProcessor { public static async Task> GetTranslations(TextElement textElement) { await using var db = ProcessorMeta.ServiceProvider.GetRequiredService(); var missedTranslations = new List(); var cultureInfos = await AppSettings.GetCultureInfos(); foreach (var cultureInfo in cultureInfos) { if(!await db.Translations.AnyAsync(n => n.TextElement == textElement && n.Culture == cultureInfo.Code)) missedTranslations.Add(new Translation { TranslateManual = false, Culture = cultureInfo.Code, Text = string.Empty, TextElement = textElement, }); } if(missedTranslations.Count > 0) { textElement.Translations.AddRange(missedTranslations); db.Translations.AddRange(missedTranslations); db.TextElements.Update(textElement); await db.SaveChangesAsync(); } return await db.Translations.Where(n => n.TextElement == textElement).ToListAsync(); } public static async Task> SaveChangedTranslation(int translationId, string text, bool manualFLag) { await using var db = ProcessorMeta.ServiceProvider.GetRequiredService(); var dbTranslation = await db.Translations.FirstAsync(n => n.Id == translationId); dbTranslation.Text = text; dbTranslation.TranslateManual = manualFLag; try { // Save the changes: await db.SaveChangesAsync(); return new ProcessorResult(dbTranslation); } catch (DbUpdateException updateException) { return updateException.ToProcessorResult(); } } public static async Task> CalculateTranslationProgress() { await using var db = ProcessorMeta.ServiceProvider.GetRequiredService(); var numCultures = (await AppSettings.GetCultureIndices()).Count; var numTextElements = await db.TextElements.CountAsync(); var numTotalTranslations = numCultures * numTextElements; var numTextElementsTranslated = await db.Translations.CountAsync(n => !string.IsNullOrWhiteSpace(n.Text)); if(numTextElementsTranslated == 0 && numTotalTranslations == 0) return new ProcessorResult(100); if (numTotalTranslations == 0) return new ProcessorResult(0); if(numTextElementsTranslated > numTotalTranslations) return new ProcessorResult(100); return new ProcessorResult(numTextElementsTranslated * 100 / numTotalTranslations); } public static async Task> CalculateTranslationProgress(Section section) { await using var db = ProcessorMeta.ServiceProvider.GetRequiredService(); var numCultures = (await AppSettings.GetCultureIndices()).Count; var numTextElements = await db.TextElements.CountAsync(n => n.Section == section); var numTotalTranslations = numCultures * numTextElements; var numTextElementsTranslated = await db.Translations.CountAsync(n => !string.IsNullOrWhiteSpace(n.Text) && n.TextElement.Section == section); if(numTextElementsTranslated == 0 && numTotalTranslations == 0) return new ProcessorResult(100); if (numTotalTranslations == 0) return new ProcessorResult(0); if(numTextElementsTranslated > numTotalTranslations) return new ProcessorResult(100); return new ProcessorResult(numTextElementsTranslated * 100 / numTotalTranslations); } public static async Task> CalculateTranslationProgress(TextElement textElement) { await using var db = ProcessorMeta.ServiceProvider.GetRequiredService(); var numCultures = (await AppSettings.GetCultureIndices()).Count; var numTotalTranslations = numCultures; var numTextElementsTranslated = await db.Translations.CountAsync(n => !string.IsNullOrWhiteSpace(n.Text) && n.TextElement == textElement); if(numTextElementsTranslated == 0 && numTotalTranslations == 0) return new ProcessorResult(100); if (numTotalTranslations == 0) return new ProcessorResult(0); if(numTextElementsTranslated > numTotalTranslations) return new ProcessorResult(100); return new ProcessorResult(numTextElementsTranslated * 100 / numTotalTranslations); } }