trminimal

Very basic trmnl server scripts
Log | Files | Refs | README

rotate_display.go (1567B)


      1 package main
      2 
      3 import (
      4 	"encoding/json"
      5 	"log"
      6 	"os"
      7 	"path"
      8 	"slices"
      9 )
     10 
     11 const (
     12 	apifile = "api/display"
     13 	imagesbase = "https://trmnl.mfashby.net/images/"
     14 )
     15 var (
     16 	rotation = []string{"weather.png", "hello.png"}
     17 )
     18 
     19 
     20 func main() {
     21 	err := do()
     22 	if err != nil {
     23 		log.Fatal(err)
     24 	}
     25 }
     26 
     27 func do() error {
     28 	dispraw, err := os.ReadFile(apifile)
     29 	var current string
     30 	var d Display
     31 	if os.IsNotExist(err)  {
     32 		current = rotation[0]
     33 	} else if err != nil {
     34 		return err
     35 	} else {
     36 		err = json.Unmarshal(dispraw, &d)
     37 		if err != nil {
     38 			return err
     39 		}
     40 		current = d.Filename
     41 	}
     42 	ix := slices.IndexFunc(rotation, func (x string) bool {
     43 		return x == current
     44 	})
     45 	ix = (ix + 1) % len(rotation)
     46 	d = NewDisplay(imagesbase + rotation[ix])
     47 	dispraw, err = json.MarshalIndent(d, "", "  ")
     48 	if err != nil {
     49 		return err
     50 	}
     51 	err = os.WriteFile(apifile, dispraw, 0644)
     52 	if err != nil {
     53 		return err
     54 	}
     55 	return nil
     56 }
     57 
     58 func NewDisplay(imageUrl string) Display {
     59 	filename := path.Base(imageUrl)
     60 	return Display{
     61 		ImageUrl: imageUrl,
     62 		Filename: filename,
     63 		RefreshRate: 300,
     64 		ResetFirmware: false,
     65 		UpdateFirmware: false,
     66 		FirmwareUrl: "https://trmnl.com/firmware/1.0.0.bin",
     67 		SpecialFunction: "identify",
     68 		Action: "identify",
     69 	}
     70 }
     71 
     72 type Display struct {
     73 	ImageUrl string `json:"image_url"`
     74 	Filename string `json:"filename"`
     75 	RefreshRate int `json:"refresh_rate"`
     76 	ResetFirmware bool `json:"reset_firmware"`
     77 	UpdateFirmware bool `json:"update_firmware"`
     78 	FirmwareUrl string `json:"firmware_url"`
     79 	SpecialFunction string `json:"special_function"`
     80 	Action string `json:"action"`
     81 }