Initial orientator

This commit is contained in:
2026-05-13 19:52:51 +03:00
commit 6dc5080ee9
23 changed files with 1920 additions and 0 deletions

47
cmd/orientator/main.go Normal file
View File

@@ -0,0 +1,47 @@
package main
import (
"flag"
"fmt"
"log"
"net/http"
"os"
"os/signal"
"syscall"
"time"
"orientator/internal/server"
)
func main() {
addr := flag.String("addr", envOr("ADDR", ":8080"), "listen address")
flag.Parse()
srv := &http.Server{
Addr: *addr,
Handler: server.New().Handler(),
ReadTimeout: 15 * time.Minute,
WriteTimeout: 15 * time.Minute,
MaxHeaderBytes: 1 << 20,
}
go func() {
log.Printf("orientator listening on %s", *addr)
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatal(err)
}
}()
sig := make(chan os.Signal, 1)
signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM)
<-sig
fmt.Println("\nshutting down")
_ = srv.Close()
}
func envOr(k, def string) string {
if v := os.Getenv(k); v != "" {
return v
}
return def
}

41
cmd/testfixture/main.go Normal file
View File

@@ -0,0 +1,41 @@
// testfixture renders page 1 of a PDF as upright PNG and as a 90°-rotated PNG.
package main
import (
"fmt"
"image"
"image/png"
"os"
"github.com/gen2brain/go-fitz"
"orientator/internal/pipeline"
)
func main() {
if len(os.Args) < 4 {
fmt.Println("usage: testfixture <in.pdf> <upright.png> <rotated90.png>")
os.Exit(2)
}
doc, err := fitz.New(os.Args[1])
must(err)
defer doc.Close()
img, err := doc.ImageDPI(0, 150)
must(err)
writePNG(os.Args[2], img)
writePNG(os.Args[3], pipeline.RotateImage(img, 90))
fmt.Println("ok")
}
func writePNG(path string, img image.Image) {
f, err := os.Create(path)
must(err)
defer f.Close()
must(png.Encode(f, img))
}
func must(err error) {
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}