78 lines
1.7 KiB
Go
78 lines
1.7 KiB
Go
package imagegen
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"github.com/disintegration/imaging"
|
|
"github.com/tdewolff/canvas"
|
|
"github.com/tdewolff/canvas/renderers/rasterizer"
|
|
"image"
|
|
"image/png"
|
|
"strings"
|
|
)
|
|
|
|
type Config struct {
|
|
WxLocation string
|
|
MetOfficeDatapointAPIKey string
|
|
TrainsLocation string
|
|
RTTUsername string
|
|
RTTPassword string
|
|
}
|
|
|
|
const (
|
|
padding float64 = 20
|
|
|
|
imageWidth float64 = 800
|
|
imageHeight float64 = 600
|
|
)
|
|
|
|
func Generate(conf *Config) ([]byte, error) {
|
|
// TODO: hardcoded secrets ick
|
|
locStr, wx, err := getWeatherInLocation(conf.MetOfficeDatapointAPIKey, conf.WxLocation)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
trains, err := getNextTrains(conf.RTTUsername, conf.RTTPassword, conf.TrainsLocation)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
fmt.Println(strings.Join(trains, "\n"))
|
|
|
|
for _, w := range wx {
|
|
fmt.Printf("%#v\n", w)
|
|
}
|
|
|
|
c := canvas.New(imageWidth, imageHeight)
|
|
ctx := canvas.NewContext(c)
|
|
ctx.SetCoordSystem(canvas.CartesianIV)
|
|
|
|
ctx.SetFill(canvas.White)
|
|
ctx.DrawPath(0, 0, canvas.Rectangle(imageWidth, imageHeight))
|
|
|
|
bottom := drawTitle(ctx, padding)
|
|
bottom, err = drawWeather(ctx, bottom, locStr, wx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
bottom, err = drawTrains(ctx, bottom, conf.TrainsLocation, trains)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
//bottom += padding
|
|
//
|
|
//ctx.SetFill(canvas.Red)
|
|
//ctx.DrawPath(1, bottom, canvas.Rectangle(900, 3))
|
|
|
|
rasterizer.New(imageWidth, imageHeight, canvas.DPMM(1), canvas.DefaultColorSpace)
|
|
var img image.Image
|
|
img = rasterizer.Draw(c, canvas.DPMM(1), canvas.DefaultColorSpace)
|
|
img = imaging.Rotate270(img)
|
|
|
|
buf := new(bytes.Buffer)
|
|
if err := png.Encode(buf, img); err != nil {
|
|
return nil, err
|
|
}
|
|
return buf.Bytes(), nil
|
|
}
|