Better CMIF

This commit is contained in:
Simon Martens
2024-11-20 17:31:28 +01:00
parent 190bf4a4f6
commit 0aa0509471

View File

@@ -204,13 +204,10 @@ public class TeiDocument {
public TeiDocument() { } public TeiDocument() { }
public TeiDocument(ILibrary lib) { public TeiDocument(ILibrary lib) {
var UNKNOWN_URL = "http://correspSearch.net/unknown";
var UNKNOWN_TEXT = "Unbekannt";
var LETTER_URL = "https://hamann-ausgabe.de/HKB/Briefe/"; var LETTER_URL = "https://hamann-ausgabe.de/HKB/Briefe/";
var PERSON_URL = "https://hamann-ausgabe.de/HKB/Person/";
var DATE_OUTPUT = "yyyy-MM-dd"; var DATE_OUTPUT = "yyyy-MM-dd";
List<CorrespondenceDescription> cds = new List<CorrespondenceDescription>(); List<CorrespondenceDescription> cds = new List<CorrespondenceDescription>();
foreach (var meta in lib.Metas.Values) { foreach (var meta in lib.MetasByDate) {
if (lib.Letters.Where(x => x.Key == meta.ID).Count() == 0) continue; if (lib.Letters.Where(x => x.Key == meta.ID).Count() == 0) continue;
var cd = new CorrespondenceDescription(); var cd = new CorrespondenceDescription();
cd.Reference = LETTER_URL + meta.ID; cd.Reference = LETTER_URL + meta.ID;
@@ -251,61 +248,49 @@ public class TeiDocument {
} }
} }
if (meta.Senders != null && meta.Senders.Count() > 0) { if (meta.Senders != null && meta.Senders.Count() > 0) {
var PersonName = new List<PersonName>(); (sent.PersonName, sent.OrgName) = CMIFHelpers.ParseNamesList(lib, meta.Senders);
var OrgName = new List<string>();
foreach (var sender in meta.Senders) {
if (sender == "-1") {
PersonName.Add(new PersonName() { Name = UNKNOWN_TEXT, Reference = UNKNOWN_URL });
}
else if (lib.Persons.ContainsKey(sender)) {
var libpers = lib.Persons[sender];
if (libpers.IsOrg) {
OrgName.Add(libpers.Name);
}
else {
var pref = PERSON_URL + libpers.Index;
if (libpers.Reference != null && !string.IsNullOrWhiteSpace(libpers.Reference))
pref = libpers.Reference;
PersonName.Add(new PersonName() { Name = libpers.Name, Reference = pref });
}
}
}
if (PersonName.Count() > 0) sent.PersonName = PersonName;
if (OrgName.Count() > 0) sent.OrgName = OrgName;
} }
cd.CorrespondenceActions = new List<CorrespondenceAction>() { sent }; cd.CorrespondenceActions = new List<CorrespondenceAction>() { sent };
var recieved = new CorrespondenceAction(); var recieved = new CorrespondenceAction();
if (meta.Receivers != null && meta.Receivers.Count() > 0) {
var PersonName = new List<PersonName>();
var OrgName = new List<string>();
foreach (var reciever in meta.Receivers) {
if (reciever == "-1") {
PersonName.Add(new PersonName() { Name = UNKNOWN_TEXT, Reference = UNKNOWN_URL });
}
else if (lib.Persons.ContainsKey(reciever)) {
var libpers = lib.Persons[reciever];
if (libpers.IsOrg) {
OrgName.Add(libpers.Name);
}
else {
var pref = PERSON_URL + libpers.Index;
if (libpers.Reference != null && !string.IsNullOrWhiteSpace(libpers.Reference))
pref = libpers.Reference;
PersonName.Add(new PersonName() { Name = libpers.Name, Reference = pref });
}
}
}
if (PersonName.Count() > 0) recieved.PersonName = PersonName;
if (OrgName.Count() > 0) recieved.OrgName = OrgName;
}
recieved.Type = "received"; recieved.Type = "received";
cd.CorrespondenceActions.Add(recieved); cd.CorrespondenceActions.Add(recieved);
if (meta.Receivers != null && meta.Receivers.Count() > 0) {
(recieved.PersonName, recieved.OrgName) = CMIFHelpers.ParseNamesList(lib, meta.Receivers);
}
cds.Add(cd); cds.Add(cd);
} }
this.TeiHeader.ProfileDesc = new ProfileDesc() { CorrespondenceDescriptions = cds }; this.TeiHeader.ProfileDesc = new ProfileDesc() { CorrespondenceDescriptions = cds };
} }
} }
static class CMIFHelpers {
public static (List<PersonName>?, List<string>?) ParseNamesList(ILibrary lib, List<string> names) {
var UNKNOWN_URL = "http://correspSearch.net/unknown";
var UNKNOWN_TEXT = "Unbekannt";
var PERSON_URL = "https://hamann-ausgabe.de/HKB/Person/";
var PersonName = new List<PersonName>();
var OrgName = new List<string>();
foreach (var id in names) {
if (id == "-1") {
PersonName.Add(new PersonName() { Name = UNKNOWN_TEXT, Reference = UNKNOWN_URL });
}
else if (lib.Persons.ContainsKey(id)) {
var libpers = lib.Persons[id];
if (libpers == null || String.IsNullOrWhiteSpace(libpers.Name)) continue;
if (libpers.IsOrg) {
OrgName.Add(libpers.Name);
}
else {
var pref = PERSON_URL + libpers.Index;
if (libpers.Reference != null && !string.IsNullOrWhiteSpace(libpers.Reference))
pref = libpers.Reference;
PersonName.Add(new PersonName() { Name = libpers.Name, Reference = pref });
}
}
}
if (PersonName.Count() == 0) PersonName = null;
if (OrgName.Count() == 0) OrgName = null;
return (PersonName, OrgName);
}
}