From 2fb3422f60a254f628bdd770716a401b5a8ee2f0 Mon Sep 17 00:00:00 2001 From: Enkidu93 Date: Thu, 6 Jun 2024 14:52:15 -0400 Subject: [PATCH] Fixes https://github.com/sillsdev/serval/issues/392 Fix error on terms id duplication --- .../Corpora/ParatextBackupTermsCorpus.cs | 40 +++++++++++++------ 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/src/SIL.Machine/Corpora/ParatextBackupTermsCorpus.cs b/src/SIL.Machine/Corpora/ParatextBackupTermsCorpus.cs index 2ef85e7ce..665ee718f 100644 --- a/src/SIL.Machine/Corpora/ParatextBackupTermsCorpus.cs +++ b/src/SIL.Machine/Corpora/ParatextBackupTermsCorpus.cs @@ -6,6 +6,7 @@ using System.Reflection; using System.Text.RegularExpressions; using System.Xml.Linq; +using SIL.Extensions; namespace SIL.Machine.Corpora { @@ -21,7 +22,6 @@ public class ParatextBackupTermsCorpus : DictionaryTextCorpus public ParatextBackupTermsCorpus(string fileName, IEnumerable termCategories) { - List rows = new List(); using (var archive = ZipFile.OpenRead(fileName)) { ZipArchiveEntry termsFileEntry = archive.GetEntry("TermRenderings.xml"); @@ -41,7 +41,30 @@ public ParatextBackupTermsCorpus(string fileName, IEnumerable termCatego XDocument biblicalTermsDoc; IDictionary termIdToCategoryDictionary; - if (PredefinedTermsListTypes.Contains(settings.BiblicalTermsListType)) + if (settings.BiblicalTermsListType == "Project") + { + if (biblicalTermsFileEntry != null) + { + using (Stream keyTermsFile = biblicalTermsFileEntry.Open()) + { + biblicalTermsDoc = XDocument.Load(keyTermsFile); + termIdToCategoryDictionary = GetCategoryPerId(biblicalTermsDoc); + } + } + else + { + using ( + Stream keyTermsFile = Assembly + .GetExecutingAssembly() + .GetManifestResourceStream("SIL.Machine.Corpora.BiblicalTerms.xml") + ) + { + biblicalTermsDoc = XDocument.Load(keyTermsFile); + termIdToCategoryDictionary = GetCategoryPerId(biblicalTermsDoc); + } + } + } + else if (PredefinedTermsListTypes.Contains(settings.BiblicalTermsListType)) { using ( Stream keyTermsFile = Assembly @@ -53,17 +76,6 @@ public ParatextBackupTermsCorpus(string fileName, IEnumerable termCatego termIdToCategoryDictionary = GetCategoryPerId(biblicalTermsDoc); } } - else if ( - settings.BiblicalTermsListType == "Project" - && settings.BiblicalTermsProjectName == settings.Name - ) - { - using (Stream keyTermsFile = biblicalTermsFileEntry.Open()) - { - biblicalTermsDoc = XDocument.Load(keyTermsFile); - termIdToCategoryDictionary = GetCategoryPerId(biblicalTermsDoc); - } - } else { termIdToCategoryDictionary = new Dictionary(); @@ -75,6 +87,7 @@ public ParatextBackupTermsCorpus(string fileName, IEnumerable termCatego string textId = $"{settings.BiblicalTermsListType}:{settings.BiblicalTermsProjectName}:{settings.BiblicalTermsFileName}"; + List rows = new List(); foreach (XElement element in termsElements) { string id = element.Attribute("Id").Value; @@ -160,6 +173,7 @@ private static IDictionary GetCategoryPerId(XDocument biblicalTe return biblicalTermsDocument .Descendants() .Where(n => n.Name.LocalName == "Term") + .DistinctBy(e => e.Attribute("Id").Value) .ToDictionary(e => e.Attribute("Id").Value, e => e.Element("Category")?.Value ?? ""); } }