Files
bap-room-packager/out.go
2025-12-18 01:26:45 -06:00

83 lines
1.6 KiB
Go

package main
import (
"fmt"
"os"
"path"
"path/filepath"
"strings"
)
const FILEPERM = 0644
const INIPREFIX = `[SETTINGS]
Sensitivity=6
Splash1len=2
Splash2len=2
`
func CopyOut(roomFolders []RoomFolder, outpath string) error {
inistr := INIPREFIX
for _, roomFolder := range roomFolders {
err := copyFolder(roomFolder, outpath)
if err != nil {
return fmt.Errorf("error copying folder %s: %+v", roomFolder.path, err)
}
inistr += roomFolder.cfg.ToIni()
}
outini := filepath.Join(outpath, "CF.ini")
fmt.Printf("Writing %s\n", outini)
return os.WriteFile(outini, []byte(inistr), FILEPERM)
}
func copyFolder(roomFolder RoomFolder, outpath string) error {
nightdir := fmt.Sprintf("NIGHT_%d", roomFolder.cfg.night)
roomdir := fmt.Sprintf("ROOM_%d", roomFolder.cfg.room)
roomoutpath := filepath.Join(outpath, "DATA", nightdir, roomdir)
os.MkdirAll(roomoutpath, FILEPERM)
fmt.Printf(`Copying:
%s
to %s
`, roomFolder.path, roomoutpath)
entries, err := os.ReadDir(roomFolder.path)
if err != nil {
return err
}
for _, entry := range entries {
// TODO whitelist files?
entrypath := path.Join(roomFolder.path, entry.Name())
if entry.IsDir() {
fmt.Printf("WARN: unexpected folder found in room folder: %s\n", entrypath)
continue
}
if strings.ToLower(entry.Name()) == "room.ini" {
continue
}
topath := path.Join(roomoutpath, entry.Name())
err := copyFile(entrypath, topath)
if err != nil {
return err
}
}
return nil
}
func copyFile(from, to string) error {
fromdata, err := os.ReadFile(from)
if err != nil {
return err
}
return os.WriteFile(to, fromdata, FILEPERM)
}