Files
grout/sync/roms.go
Brandon T. Kowalski 12d387cfdd Add sync engine and ROM scanning
- sync/models.go: action types and sync plan models
- sync/flow.go: core sync flow with conflict detection
- sync/flow_test.go: tests for sync action determination
- sync/roms.go: rewrite to resolve local ROMs against cache
- cfw/roms.go: local ROM filesystem scanning (moved from sync)
- cfw/saves.go: add GetSaveDirectory helper
- tools/save-sync-dry-run/: dry-run testing tool
2026-02-22 12:16:21 -05:00

39 lines
970 B
Go

package sync
import (
"grout/cache"
"grout/cfw"
"path/filepath"
"strings"
gaba "github.com/BrandonKowalski/gabagool/v2/pkg/gabagool"
)
// ResolveLocalRoms scans local ROM files and resolves them against the cache
// to get ROM IDs. Returns a map of ROM ID to LocalRomFile for matched ROMs.
func ResolveLocalRoms(scan cfw.LocalRomScan) map[int]cfw.LocalRomFile {
logger := gaba.GetLogger()
cm := cache.GetCacheManager()
if cm == nil {
logger.Error("Cache manager not available for ROM resolution")
return nil
}
resolved := make(map[int]cfw.LocalRomFile)
for fsSlug, files := range scan {
for _, f := range files {
nameNoExt := strings.TrimSuffix(f.FileName, filepath.Ext(f.FileName))
rom, err := cm.GetRomByFSLookup(fsSlug, nameNoExt)
if err != nil {
continue
}
f.RomID = rom.ID
f.RomName = rom.Name
resolved[rom.ID] = f
}
}
logger.Debug("Resolved local ROMs against cache", "matched", len(resolved))
return resolved
}