Browse Source

Merge branch 'master' of https://git.andreafazzi.eu/andrea/alba

Andrea Fazzi 1 year ago
parent
commit
76e34222db
6 changed files with 96 additions and 25 deletions
  1. 8 0
      README.md
  2. 3 1
      backend/Dockerfile
  3. 3 0
      backend/data/.gitignore
  4. BIN
      backend/data/palette.gif
  5. 25 10
      backend/data/screen.tpl.md
  6. 57 14
      backend/main.go

+ 8 - 0
README.md

@@ -0,0 +1,8 @@
+# Alba
+
+Client/server codebase for the Alba project.
+
+# License
+
+This software is licensed under MIT.
+

+ 3 - 1
backend/Dockerfile

@@ -2,7 +2,7 @@ FROM golang:latest
 
 RUN apt-get update -qq && apt-get install -y netcat
 RUN apt-get install -y -q libsm6 libcups2 libcairo2 libdbus-1-3 libxinerama1
-RUN apt-get install -y texlive-latex-extra poppler-utils
+RUN apt-get install -y texlive-latex-extra texlive-fonts-extra poppler-utils imagemagick
 
 ## Download pandoc
 
@@ -13,6 +13,8 @@ RUN wget https://github.com/jgm/pandoc/releases/download/2.18/pandoc-2.18-1-amd6
 
 WORKDIR /tmp
 RUN dpkg -i ./pandoc-2.18-1-amd64.deb
+
+## Build the backend
     
 ENV PATH=$PATH:/src/alba/backend/
 RUN mkdir -p /src/alba/backend/

+ 3 - 0
backend/data/.gitignore

@@ -0,0 +1,3 @@
+*.sh
+*.bmp
+

BIN
backend/data/palette.gif


+ 25 - 10
backend/data/screen.tpl.md

@@ -1,19 +1,34 @@
+---
+fontfamily: dejavu
+papersize: a6
+geometry:
+- top=5mm
+- left=5mm
+- right=5mm
+...
+
 # Buongiorno Aldo!
 
-Oggi è il {{date}}. Il tempo a Trieste è **soleggiato**.
+Sono le ore **{{kitchen}}** del **{{day}}.{{month}}.{{year}}**. 
 
-# Prossimo bus per il centro
+# Situazione meteo
 
-* Linea 1 fermata Campo San Giacomo tra 10 minuti.
-* Linea 10 fermata Campo San Giacomo tra 3 minuti.
+{{range $item := weather}}
+* {{$item.Title}}
+{{end}}
 
-# Cose da fare oggi
+# Ultime notizie
 
-1. Prenotare visita dentistica
-2. Fare la spesa
-3. Ritirare la pensione
+{{range $item := news}}
+* {{$item.Title}}
+{{end}}
 
-# Ultime notizie
+# Prossimo bus per il centro
+
+* Linea 1 fermata Campo San Giacomo tra 10 minuti.
+
+# Numeri utili
 
-* {{.Item.Title}}
+1. Guardia medica **040 123456**
+2. Giulia **330 1234 987**
 

+ 57 - 14
backend/main.go

@@ -15,14 +15,48 @@ import (
 )
 
 var funcmap = template.FuncMap{
-	"date": func() string {
-		now := time.Now()
+	"kitchen": func() string {
+		return time.Now().Format(time.Kitchen)
+	},
+	"day": func() int {
+		_, _, day := time.Now().Date()
+		return day
+	},
+	"month": func() int {
+		_, month, _ := time.Now().Date()
+		return int(month)
+	},
+	"year": func() int {
+		year, _, _ := time.Now().Date()
+		return year
+	},
+	"news": func() []*gofeed.Item {
+		result := make([]*gofeed.Item, 0)
+
+		fp := gofeed.NewParser()
+		feed, _ := fp.ParseURL("https://www.agi.it/innovazione/rss")
+
+		for _, it := range feed.Items {
+			result = append(result, it)
+		}
+
+		return result[:2]
+	},
+	"weather": func() []*gofeed.Item {
+		result := make([]*gofeed.Item, 0)
+
+		fp := gofeed.NewParser()
+		feed, _ := fp.ParseURL("https://www.meteowebcam.eu/rss.xml")
 
-		return now.Format("2006-02-01")
+		for _, it := range feed.Items {
+			result = append(result, it)
+		}
+
+		return result[:1]
 	},
 }
 
-func convertPDFToPNG(filename string) error {
+func convertPDFToBMP(filename string) error {
 	out, err := exec.Command("pdftoppm", filename, "./data/screen", "-png").CombinedOutput()
 	if string(out) != "" {
 		return fmt.Errorf("pdftoppm: %s", string(out))
@@ -30,13 +64,24 @@ func convertPDFToPNG(filename string) error {
 	if err != nil {
 		return err
 	}
+	out, err = exec.Command("convert", "./data/screen-1.png",
+		"-rotate", "-90",
+		"-resize", "800x480!",
+		"-dither", "none",
+		"-remap", "./data/palette.gif",
+		"BMP3:./data/screen.bmp",
+	).CombinedOutput()
+	if string(out) != "" {
+		return fmt.Errorf("covert: %s", string(out))
+	}
+	if err != nil {
+		return err
+	}
+
 	return nil
 }
 
 func serveScreen(res http.ResponseWriter, req *http.Request) {
-	fp := gofeed.NewParser()
-	feed, _ := fp.ParseURL("https://www.agi.it/innovazione/rss")
-
 	tpl, err := tplutil.LoadTextTemplate("./data/screen.tpl.md", funcmap)
 	if err != nil {
 		panic(err)
@@ -53,28 +98,26 @@ func serveScreen(res http.ResponseWriter, req *http.Request) {
 		Item  *gofeed.Item
 	}
 
-	data.Title = feed.Title
-	data.Item = feed.Items[0]
-
 	log.Println("Generating markdown file from template.")
 	if err := tpl.Execute(f, data); err != nil {
 		panic(err)
 	}
 
 	log.Println("Converting markdown to pdf.")
-	err = pandoc.Convert("./data/screen.md", "./data/screen.pdf", "-V", "geometry:papersize={3.8in,6.4in}", "-V", "pagestyle:empty")
+	// err = pandoc.Convert("./data/screen.md", "./data/screen.pdf", "-V", "geometry:papersize={3.8in,6in}", "-V", "pagestyle:empty")
+	err = pandoc.Convert("./data/screen.md", "./data/screen.pdf", "-V", "pagestyle:empty")
 	if err != nil {
 		panic(err)
 	}
 
-	log.Println("Converting pdf to png.")
-	err = convertPDFToPNG("./data/screen.pdf")
+	log.Println("Converting PDF to monochrome BMP.")
+	err = convertPDFToBMP("./data/screen.pdf")
 	if err != nil {
 		panic(err)
 	}
 
 	log.Println("Serving screen.png...")
-	http.ServeFile(res, req, "./data/screen-1.png")
+	http.ServeFile(res, req, "./data/screen.bmp")
 }
 
 func main() {