public static async Task Import(IDidacticalEnigmaMem api, string projectName, IReadOnlyList <string> args)
        {
            var deckDirectoryPath = args[0];
            var dataFilePath      = Path.Combine(deckDirectoryPath, "data.json");

            await foreach (var batch in ChunkBy(StreamingDeserialize(dataFilePath), BatchSize))
            {
                await api.AddTranslationsAsync(
                    projectName,
                    new AddTranslationsParams()
                {
                    Translations = batch
                                   .Select(entry => new AddTranslationParams()
                    {
                        Source        = entry.Sentence,
                        Target        = entry.Translation,
                        CorrelationId = $"{entry.DeckName}, {entry.Id}"
                    })
                                   .ToList()
                });
            }
        }
Esempio n. 2
0
        public static async Task Import(IDidacticalEnigmaMem api, string projectName, IReadOnlyList <string> args)
        {
            var projectPath = args[0];

            if (MagicTranslatorProject.MagicTranslatorProject.Registration.TryOpen(projectPath, out var rawProject, out var failureReason))
            {
                var project = (MagicTranslatorProject.MagicTranslatorProject)rawProject;

                var characterDict = project.Root.AllCharacters.ToDictionary(c => c, c => Guid.NewGuid());

                await api.AddCategoriesAsync(projectName, new AddCategoriesParams()
                {
                    Categories = characterDict
                                 .Select(kvp => new AddCategoryParams()
                    {
                        Id   = kvp.Value,
                        Name = kvp.Key.ToString()
                    })
                                 .ToList()
                });

                var translations = new List <AddTranslationParams>();
                foreach (var volume in project.Root.Children)
                {
                    foreach (var chapter in volume.Children)
                    {
                        foreach (var page in chapter.Children)
                        {
                            await using var file = File.OpenRead(page.PathToRaw);
                            await api.AddContextAsync(
                                Guid.NewGuid().ToString(),
                                projectName,
                                "image/png",
                                page.ReadableIdentifier,
                                file,
                                null);


                            foreach (var capture in page.Children)
                            {
                                var normalizedNotes =
                                    capture.Translation.Notes
                                    .Where(n => !string.IsNullOrWhiteSpace(n.Text))
                                    .Select(n => new IoNormalNote("", n.Text))
                                    .ToList();
                                var normalizedGlosses = capture.Translation.Glosses
                                                        .Where(n => !string.IsNullOrWhiteSpace(n.Foreign) || !string.IsNullOrWhiteSpace(n.Text))
                                                        .Select(n => new IoGlossNote(n.Foreign, n.Text))
                                                        .ToList();
                                var hasNotesOrGlosses = normalizedGlosses.Count != 0 || normalizedNotes.Count != 0;
                                translations.Add(new AddTranslationParams()
                                {
                                    CorrelationId    = capture.ReadableIdentifier,
                                    Source           = capture.Translation.OriginalText,
                                    Target           = string.IsNullOrWhiteSpace(capture.Translation.TranslatedText) ? null : capture.Translation.TranslatedText,
                                    CategoryId       = characterDict[capture.Character],
                                    TranslationNotes = hasNotesOrGlosses
                                        ? new AddTranslationNotesParams(
                                        capture.Translation.Notes.Select(n => new IoNormalNote(n.SideText, n.Text)).ToList(),
                                        capture.Translation.Glosses.Select(n => new IoGlossNote(n.Foreign, n.Text)).ToList())
                                        : null
                                });
                            }

                            if (translations.Count > 100)
                            {
                                await api.AddTranslationsAsync(projectName, new AddTranslationsParams()
                                {
                                    Translations = translations
                                });

                                translations.Clear();
                            }
                        }
                    }
                }
                if (translations.Count > 0)
                {
                    await api.AddTranslationsAsync(projectName, new AddTranslationsParams()
                    {
                        Translations = translations
                    });

                    translations.Clear();
                }
            }
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='projectName'>
 /// </param>
 /// <param name='body'>
 /// </param>
 public static AddTranslationsResult AddTranslations(this IDidacticalEnigmaMem operations, string projectName = default(string), AddTranslationsParams body = default(AddTranslationsParams))
 {
     return(operations.AddTranslationsAsync(projectName, body).GetAwaiter().GetResult());
 }