Adopt registry-backed item occurrences
This commit is contained in:
@@ -5,11 +5,12 @@ import (
|
||||
|
||||
"gitea.maximumdirect.net/eric/notarius/internal/core/source"
|
||||
"gitea.maximumdirect.net/eric/notarius/internal/modules/dnd"
|
||||
itemregistry "gitea.maximumdirect.net/eric/notarius/internal/modules/dnd/items/registry"
|
||||
"gitea.maximumdirect.net/eric/notarius/internal/modules/dnd/shared"
|
||||
)
|
||||
|
||||
type orderedItemEventResponse struct {
|
||||
value itemEventResponse
|
||||
type orderedItemOccurrenceResponse struct {
|
||||
value itemOccurrenceResponse
|
||||
earliest int
|
||||
hasEvidence bool
|
||||
}
|
||||
@@ -18,11 +19,11 @@ func canonicalizeResponse(response *extractionResponse, order shared.SourceRefOr
|
||||
if response == nil {
|
||||
return
|
||||
}
|
||||
ordered := make([]orderedItemEventResponse, len(response.Events))
|
||||
for index := range response.Events {
|
||||
earliest, hasEvidence := canonicalizeItemEvent(&response.Events[index], order, sourceID)
|
||||
ordered[index] = orderedItemEventResponse{
|
||||
value: response.Events[index],
|
||||
ordered := make([]orderedItemOccurrenceResponse, len(response.Occurrences))
|
||||
for index := range response.Occurrences {
|
||||
earliest, hasEvidence := canonicalizeItemOccurrence(&response.Occurrences[index], order, sourceID)
|
||||
ordered[index] = orderedItemOccurrenceResponse{
|
||||
value: response.Occurrences[index],
|
||||
earliest: earliest,
|
||||
hasEvidence: hasEvidence,
|
||||
}
|
||||
@@ -37,38 +38,43 @@ func canonicalizeResponse(response *extractionResponse, order shared.SourceRefOr
|
||||
return ordered[left].earliest < ordered[right].earliest
|
||||
})
|
||||
for index := range ordered {
|
||||
response.Events[index] = ordered[index].value
|
||||
response.Occurrences[index] = ordered[index].value
|
||||
}
|
||||
}
|
||||
|
||||
func canonicalizeItemEvent(event *itemEventResponse, order shared.SourceRefOrder, sourceID string) (int, bool) {
|
||||
func canonicalizeItemOccurrence(event *itemOccurrenceResponse, order shared.SourceRefOrder, sourceID string) (int, bool) {
|
||||
if event == nil {
|
||||
return 0, false
|
||||
}
|
||||
refs := order.Canonicalize(itemEventSourceRefs(event.SourceRefs, sourceID))
|
||||
event.SourceRefs = itemEventResponseRefs(refs)
|
||||
refs := order.Canonicalize(itemOccurrenceSourceRefs(event.SourceRefs, sourceID))
|
||||
event.SourceRefs = itemOccurrenceResponseRefs(refs)
|
||||
return order.EarliestValid(refs)
|
||||
}
|
||||
|
||||
func canonicalItemEventList(response extractionResponse, sourceID string) dnd.ItemEventList {
|
||||
if response.Events == nil {
|
||||
return dnd.ItemEventList{}
|
||||
func canonicalItemOccurrenceList(response extractionResponse, sourceID string, registry *itemregistry.Registry) dnd.ItemOccurrenceList {
|
||||
if response.Occurrences == nil {
|
||||
return dnd.ItemOccurrenceList{}
|
||||
}
|
||||
events := make([]dnd.ItemEvent, len(response.Events))
|
||||
for index, event := range response.Events {
|
||||
events[index] = dnd.ItemEvent{
|
||||
occurrences := make([]dnd.ItemOccurrence, 0, len(response.Occurrences))
|
||||
for _, event := range response.Occurrences {
|
||||
item, found := registry.LookupID(event.ItemID)
|
||||
if !found || item.Name != event.Name {
|
||||
continue
|
||||
}
|
||||
occurrences = append(occurrences, dnd.ItemOccurrence{
|
||||
ItemID: event.ItemID,
|
||||
Name: event.Name,
|
||||
Kind: dnd.ItemEventKind(event.Kind),
|
||||
Kind: dnd.ItemOccurrenceKind(event.Kind),
|
||||
Quantity: cloneQuantity(event.Quantity),
|
||||
From: event.From,
|
||||
To: event.To,
|
||||
SourceRefs: itemEventSourceRefs(event.SourceRefs, sourceID),
|
||||
}
|
||||
SourceRefs: itemOccurrenceSourceRefs(event.SourceRefs, sourceID),
|
||||
})
|
||||
}
|
||||
return dnd.ItemEventList{Events: events}
|
||||
return dnd.ItemOccurrenceList{Occurrences: occurrences}
|
||||
}
|
||||
|
||||
func itemEventSourceRefs(refs []itemEventSourceRefResponse, sourceID string) []source.SourceRef {
|
||||
func itemOccurrenceSourceRefs(refs []itemOccurrenceSourceRefResponse, sourceID string) []source.SourceRef {
|
||||
if refs == nil {
|
||||
return nil
|
||||
}
|
||||
@@ -79,13 +85,13 @@ func itemEventSourceRefs(refs []itemEventSourceRefResponse, sourceID string) []s
|
||||
return values
|
||||
}
|
||||
|
||||
func itemEventResponseRefs(refs []source.SourceRef) []itemEventSourceRefResponse {
|
||||
func itemOccurrenceResponseRefs(refs []source.SourceRef) []itemOccurrenceSourceRefResponse {
|
||||
if refs == nil {
|
||||
return nil
|
||||
}
|
||||
values := make([]itemEventSourceRefResponse, len(refs))
|
||||
values := make([]itemOccurrenceSourceRefResponse, len(refs))
|
||||
for index, ref := range refs {
|
||||
values[index] = itemEventSourceRefResponse{StartSegment: ref.StartUnitID, EndSegment: ref.EndUnitID}
|
||||
values[index] = itemOccurrenceSourceRefResponse{StartSegment: ref.StartUnitID, EndSegment: ref.EndUnitID}
|
||||
}
|
||||
return values
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user