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, }); } if(missedTranslations.Count > 0) { textElement.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)); return new ProcessorResult(numTextElementsTranslated * 100 / numTotalTranslations); } }