From b9e7aa782b17b10ce70e17efd7782d4b7647400b Mon Sep 17 00:00:00 2001 From: Nihilazo Date: Wed, 27 Jan 2021 20:34:09 +0000 Subject: [PATCH] a day's hacking. it doesn't work. --- go.mod | 4 ++-- main.go | 55 ++++++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 44 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index ae2c8c1..4b68fe2 100644 --- a/go.mod +++ b/go.mod @@ -5,9 +5,9 @@ go 1.15 require ( git.sr.ht/~adnano/go-gemini v0.1.13 github.com/fogleman/gg v1.3.0 - github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect + github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 github.com/shermp/go-fbink-v2 v1.20.2 github.com/shermp/go-fbink-v2/v2 v2.21.0 github.com/shermp/go-kobo-input v0.0.0-20180928074949-be0734a2dcc6 - golang.org/x/image v0.0.0-20201208152932-35266b937fa6 // indirect + golang.org/x/image v0.0.0-20201208152932-35266b937fa6 ) diff --git a/main.go b/main.go index 00bdcc4..f3694c6 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,7 @@ package main import ( -// "github.com/fogleman/gg" + "github.com/fogleman/gg" "github.com/shermp/go-fbink-v2/gofbink" "github.com/shermp/go-kobo-input/koboin" "image" @@ -12,6 +12,7 @@ import ( // "bytes" "errors" "net/url" + "golang.org/x/image/font" "bufio" "io/ioutil" "fmt" @@ -19,6 +20,8 @@ import ( "os" "log" "bytes" + "github.com/golang/freetype/truetype" + ) var ( @@ -30,12 +33,25 @@ var ( var height int = 1080 var width int = 1440 // TODO get from device instead of hardcoding +var f *truetype.Font +var face font.Face -// drawOSK renders the onscreen keyboard to an image. -func drawOSK(keymap []string) *image.RGBA { - var im image.RGBA - - return &im +// drawErrorBox prints the given error on screen, and only proceeds after touch input. +// Returns an error if drawing an error box (lol) fails. +// TODO make this work +func drawErrorBox(e error, fb *gofbink.FBInk, t *koboin.TouchDevice, opts *gofbink.FBInkConfig ) error { + h := float64(height/2) + w := float64(width) + i := image.NewRGBA(image.Rect(width,0,width,height/2)) + dc := gg.NewContextForRGBA(i) + dc.SetFontFace(face) + dc.SetRGB(1, 1, 1) + dc.Clear() + dc.SetRGB(0, 0, 0) + dc.DrawStringWrapped(e.Error(), h/2, w/2, 0.5, 0.5, float64(width), 1.0, gg.AlignCenter) + fb.PrintRBGA(0, 0, i, opts) + t.GetInput() + return nil } func trustCertificate(hostname string, cert *x509.Certificate) error { @@ -112,20 +128,21 @@ func main() { return } defer t.Close() + // Logging setup var logFile, err= os.Create("/mnt/onboard/gemini.log") var logger *log.Logger = log.New(logFile, "gemini", log.LstdFlags ) + defer logFile.Close() path := "/mnt/onboard/.adds/gemini/known-hosts" // TODO don't hardcode + // Reload or create known hosts file if _, err := os.Stat(path); os.IsNotExist(err) { os.Create(path) - fb.Println("Created hosts file") } - // Load known hosts file err = hosts.Load(path) if err != nil { - fb.Println(err) + drawErrorBox(err, fb, t, &fbinkOpts) logger.Fatal(err) } @@ -134,16 +151,28 @@ func main() { fb.Println(err) logger.Fatal(err) } - + + // Load Fonts, Create font face + b, err := ioutil.ReadFile("/mnt/onboard/.adds/gemini/NotoSerif.ttf") + if err != nil { + logger.Println(err) + return + } + f, err := truetype.Parse(b) + if err != nil { + logger.Println(err) + return + } + face = truetype.NewFace(f, &truetype.Options{Size:32}) url := "gemini://gemini.circumlunar.space" req, err := gemini.NewRequest(url) if err != nil { - fb.Println(err) + drawErrorBox(err, fb, t, &fbinkOpts) logger.Fatal(err) } resp, err := do(req, nil) if err != nil { - fb.Println(err) + drawErrorBox(err, fb, t, &fbinkOpts) logger.Fatal(err) } defer resp.Body.Close() @@ -152,7 +181,7 @@ func main() { if resp.Status.Class() == gemini.StatusClassSuccess { body, err := ioutil.ReadAll(resp.Body) if err != nil { - fb.Println(err) + drawErrorBox(err, fb, t, &fbinkOpts) logger.Fatal(err) } fb.Println(string(body))