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>
59 lines
1.1 KiB
Go
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)
|
|
}
|
|
}
|