Yonah da4b1d86d9
cmd/msrfetch: fetch from enriched composite data
This creates a content-addressed store for all media files. It is not
yet usable but an API and cdn backend will be implemented from it in a
later commit, as well as tooling for export and tagging.

Signed-off-by: Yonah <contrib@gensokyo.uk>
2025-09-18 07:20:36 +09:00

59 lines
1.1 KiB
Go

package main
import (
"context"
"encoding/json"
"flag"
"log"
"os"
"os/signal"
"syscall"
"git.gensokyo.uk/yonah/monstersirenfetch"
)
func main() {
log.SetFlags(0)
log.SetPrefix("msrfetch: ")
flag.Parse()
if flag.NArg() < 1 {
log.Fatal("no subcommand specified")
}
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
defer stop()
switch flag.Args()[0] {
case "enrich":
mustEnrich(ctx)
case "fetch":
mustFetch(ctx)
default:
log.Fatalf("%q is not a valid command", flag.Args()[0])
}
}
func mustWriteJSON(pathname string, v any) {
if w, err := os.Create(pathname); err != nil {
log.Fatal(err)
} else if err = monstersirenfetch.NewEncoder(w).Encode(v); err != nil {
log.Fatal(err)
} else if err = w.Close(); err != nil {
log.Fatal(err)
}
}
func mustReadJSON(pathname string, v any) {
if r, err := os.OpenFile(pathname, os.O_RDONLY, 0); err != nil {
log.Fatal(err)
} else if err = json.NewDecoder(r).Decode(v); err != nil {
log.Fatal(err)
} else if err = r.Close(); err != nil {
log.Fatal(err)
}
}