Template usage
This commit is contained in:
@@ -7,6 +7,11 @@ import (
|
||||
)
|
||||
|
||||
var portraitColumns = []string{"BaseResRef", "Sex", "Race", "InanimateType", "Plot", "LowGore"}
|
||||
var portraitMetadataInjectionDatasets = map[string]struct{}{
|
||||
"appearance": {},
|
||||
"genericdoors": {},
|
||||
"placeables": {},
|
||||
}
|
||||
|
||||
func parseRowMetadata(raw any) (map[string]any, error) {
|
||||
if raw == nil {
|
||||
@@ -101,6 +106,19 @@ func portraitMetaFromRow(row map[string]any) (map[string]any, bool) {
|
||||
return portrait, true
|
||||
}
|
||||
|
||||
func rowHasPortraitMetadata(row map[string]any) bool {
|
||||
_, ok := portraitMetaFromRow(row)
|
||||
return ok
|
||||
}
|
||||
|
||||
func portraitMetadataMayInject(datasetName string, row map[string]any) bool {
|
||||
if _, ok := portraitMetadataInjectionDatasets[datasetName]; !ok {
|
||||
return false
|
||||
}
|
||||
optIn, _ := row[internalPortraitModuleAuthoredKey].(bool)
|
||||
return optIn && rowHasPortraitMetadata(row)
|
||||
}
|
||||
|
||||
func mergePortraitMetadata(collected []nativeCollectedDataset) ([]nativeCollectedDataset, error) {
|
||||
portraitIndex := -1
|
||||
for i, dataset := range collected {
|
||||
@@ -135,17 +153,22 @@ func mergePortraitMetadata(collected []nativeCollectedDataset) ([]nativeCollecte
|
||||
}
|
||||
nextID := nextAvailableID(usedIDs)
|
||||
lockModified := false
|
||||
activeAutoLockKeys := map[string]struct{}{}
|
||||
|
||||
for _, dataset := range collected {
|
||||
if _, ok := portraitMetadataInjectionDatasets[dataset.Dataset.Name]; !ok {
|
||||
continue
|
||||
}
|
||||
for _, row := range dataset.Rows {
|
||||
portrait, ok := portraitMetaFromRow(row)
|
||||
if !ok {
|
||||
if !portraitMetadataMayInject(dataset.Dataset.Name, row) {
|
||||
continue
|
||||
}
|
||||
portrait, _ := portraitMetaFromRow(row)
|
||||
resref := portrait["resref"].(string)
|
||||
target, ok := rowByResref[resref]
|
||||
if !ok {
|
||||
lockKey := "portraits:auto:" + resref
|
||||
activeAutoLockKeys[lockKey] = struct{}{}
|
||||
rowID, found := portraits.LockData[lockKey]
|
||||
if !found {
|
||||
rowID = nextID
|
||||
@@ -171,6 +194,17 @@ func mergePortraitMetadata(collected []nativeCollectedDataset) ([]nativeCollecte
|
||||
}
|
||||
}
|
||||
|
||||
for lockKey := range portraits.LockData {
|
||||
if !strings.HasPrefix(lockKey, "portraits:auto:") {
|
||||
continue
|
||||
}
|
||||
if _, ok := activeAutoLockKeys[lockKey]; ok {
|
||||
continue
|
||||
}
|
||||
delete(portraits.LockData, lockKey)
|
||||
lockModified = true
|
||||
}
|
||||
|
||||
if lockModified && portraits.Dataset.LockPath != "" {
|
||||
if err := saveLockfile(portraits.Dataset.LockPath, portraits.LockData); err != nil {
|
||||
return nil, fmt.Errorf("dataset %s: %w", portraits.Dataset.Name, err)
|
||||
|
||||
Reference in New Issue
Block a user