2024-09-15 09:01:13 +02:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2024-09-15 10:46:07 +02:00
|
|
|
"context"
|
|
|
|
"fmt"
|
2024-09-15 09:01:13 +02:00
|
|
|
"github.com/Crocmagnon/display-epaper/epd"
|
2024-09-15 12:00:36 +02:00
|
|
|
"github.com/Crocmagnon/display-epaper/fete"
|
2024-09-15 10:46:07 +02:00
|
|
|
"github.com/Crocmagnon/display-epaper/transports"
|
2024-09-15 09:01:13 +02:00
|
|
|
"github.com/llgcode/draw2d"
|
|
|
|
"github.com/llgcode/draw2d/draw2dimg"
|
|
|
|
"image"
|
|
|
|
"image/color"
|
2024-09-15 12:00:36 +02:00
|
|
|
"strconv"
|
|
|
|
"time"
|
2024-09-15 09:01:13 +02:00
|
|
|
)
|
|
|
|
|
2024-09-15 12:00:36 +02:00
|
|
|
func getBlack(
|
|
|
|
ctx context.Context,
|
|
|
|
nowFunc func() time.Time,
|
|
|
|
transportsClient *transports.Client,
|
|
|
|
feteClient *fete.Client,
|
|
|
|
) (*image.RGBA, error) {
|
2024-09-15 13:07:32 +02:00
|
|
|
bus, err := transportsClient.GetTCLPassages(ctx, 290)
|
2024-09-15 10:46:07 +02:00
|
|
|
if err != nil {
|
2024-09-15 13:07:32 +02:00
|
|
|
return nil, fmt.Errorf("getting bus: %w", err)
|
|
|
|
}
|
|
|
|
tram, err := transportsClient.GetTCLPassages(ctx, 34068)
|
|
|
|
if err != nil {
|
|
|
|
return nil, fmt.Errorf("getting tram: %w", err)
|
2024-09-15 10:46:07 +02:00
|
|
|
}
|
|
|
|
|
2024-09-15 12:00:36 +02:00
|
|
|
fetes, err := feteClient.GetFete(ctx, nowFunc())
|
|
|
|
if err != nil {
|
|
|
|
return nil, fmt.Errorf("getting fetes: %w", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
_ = fetes
|
|
|
|
|
2024-09-15 09:01:13 +02:00
|
|
|
img := newWhite()
|
|
|
|
|
|
|
|
gc := draw2dimg.NewGraphicContext(img)
|
|
|
|
|
2024-09-15 10:46:07 +02:00
|
|
|
gc.SetFillRule(draw2d.FillRuleWinding)
|
2024-09-15 13:07:32 +02:00
|
|
|
gc.SetFillColor(color.RGBA{255, 255, 255, 255})
|
2024-09-15 09:01:13 +02:00
|
|
|
gc.SetStrokeColor(color.RGBA{0, 0, 0, 255})
|
|
|
|
|
2024-09-15 13:07:32 +02:00
|
|
|
rect(gc, 0, 0, 800, 480)
|
2024-09-15 12:00:36 +02:00
|
|
|
|
2024-09-15 13:07:32 +02:00
|
|
|
drawTCL(gc, bus, 30)
|
|
|
|
drawTCL(gc, tram, 150)
|
|
|
|
drawDateFete(gc, fetes, nowFunc())
|
2024-09-15 12:00:36 +02:00
|
|
|
|
|
|
|
return img, nil
|
|
|
|
}
|
|
|
|
|
2024-09-15 13:07:32 +02:00
|
|
|
func drawDateFete(gc *draw2dimg.GraphicContext, fetes *fete.Fete, now time.Time) {
|
|
|
|
text(gc, now.Format("15:04"), 40, 20, 190)
|
|
|
|
text(gc, getDate(now), 50, 20, 255)
|
|
|
|
text(gc, fetes.Name, 18, 20, 290)
|
2024-09-15 12:00:36 +02:00
|
|
|
}
|
|
|
|
|
2024-09-15 13:07:32 +02:00
|
|
|
func drawTCL(gc *draw2dimg.GraphicContext, passages *transports.Passages, yoffset float64) {
|
2024-09-15 10:46:07 +02:00
|
|
|
for i, passage := range passages.Passages {
|
2024-09-15 12:00:36 +02:00
|
|
|
x := float64(600 + i*100)
|
2024-09-15 13:07:32 +02:00
|
|
|
text(gc, passage.Ligne, 15, x, yoffset)
|
2024-09-15 10:46:07 +02:00
|
|
|
for j, delay := range passage.Delays {
|
2024-09-15 13:07:32 +02:00
|
|
|
y := yoffset + float64(j+1)*30
|
2024-09-15 10:46:07 +02:00
|
|
|
text(gc, delay, 15, x, y)
|
2024-09-15 13:07:32 +02:00
|
|
|
if j >= 2 { // limit number of delays displayed
|
|
|
|
break
|
|
|
|
}
|
2024-09-15 10:46:07 +02:00
|
|
|
}
|
|
|
|
}
|
2024-09-15 09:01:13 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func text(gc *draw2dimg.GraphicContext, s string, size, x, y float64) {
|
2024-09-15 13:07:32 +02:00
|
|
|
gc.SetFillColor(color.RGBA{0, 0, 0, 255})
|
2024-09-15 09:01:13 +02:00
|
|
|
gc.SetFontData(draw2d.FontData{Name: fontName})
|
|
|
|
gc.SetFontSize(size)
|
2024-09-15 10:46:07 +02:00
|
|
|
gc.FillStringAt(s, x, y)
|
|
|
|
gc.SetLineWidth(2)
|
2024-09-15 09:01:13 +02:00
|
|
|
gc.StrokeStringAt(s, x, y)
|
|
|
|
}
|
|
|
|
|
|
|
|
func newWhite() *image.RGBA {
|
|
|
|
img := image.NewRGBA(image.Rect(0, 0, epd.Width, epd.Height))
|
|
|
|
for y := 0; y < epd.Height; y++ {
|
|
|
|
for x := 0; x < epd.Width; x++ {
|
|
|
|
img.Set(x, y, color.White)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return img
|
|
|
|
}
|
|
|
|
|
|
|
|
func rect(gc *draw2dimg.GraphicContext, x1, y1, x2, y2 float64) {
|
|
|
|
gc.BeginPath()
|
|
|
|
gc.MoveTo(x1, y1)
|
|
|
|
gc.LineTo(x2, y1)
|
|
|
|
gc.LineTo(x2, y2)
|
|
|
|
gc.LineTo(x1, y2)
|
|
|
|
gc.Close()
|
|
|
|
gc.FillStroke()
|
|
|
|
}
|
2024-09-15 12:00:36 +02:00
|
|
|
|
|
|
|
func getDate(now time.Time) string {
|
|
|
|
return fmt.Sprintf("%v %v", getDay(now), getMonth(now))
|
|
|
|
}
|
|
|
|
|
|
|
|
func getDay(now time.Time) string {
|
|
|
|
if now.Day() == 1 {
|
|
|
|
return "1er"
|
|
|
|
}
|
|
|
|
|
|
|
|
return strconv.Itoa(now.Day())
|
|
|
|
}
|
|
|
|
|
|
|
|
func getMonth(t time.Time) string {
|
|
|
|
switch t.Month() {
|
|
|
|
case time.January:
|
|
|
|
return "jan."
|
|
|
|
case time.February:
|
|
|
|
return "fev."
|
|
|
|
case time.March:
|
|
|
|
return "mars"
|
|
|
|
case time.April:
|
|
|
|
return "avr."
|
|
|
|
case time.May:
|
|
|
|
return "mai"
|
|
|
|
case time.June:
|
|
|
|
return "juin"
|
|
|
|
case time.July:
|
|
|
|
return "juil."
|
|
|
|
case time.August:
|
|
|
|
return "août"
|
|
|
|
case time.September:
|
|
|
|
return "sept."
|
|
|
|
case time.October:
|
|
|
|
return "oct."
|
|
|
|
case time.November:
|
|
|
|
return "nov."
|
|
|
|
case time.December:
|
|
|
|
return "dec."
|
|
|
|
}
|
|
|
|
return "?"
|
|
|
|
}
|