123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- package main
- import (
- "fmt"
- "log"
- "net/http"
- "os"
- "os/exec"
- "text/template"
- "time"
- "github.com/mmcdole/gofeed"
- "gogs.carduccidante.edu.it/karmen/core/util/pandoc"
- tplutil "gogs.carduccidante.edu.it/karmen/core/util/template"
- )
- var funcmap = template.FuncMap{
- "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")
- for _, it := range feed.Items {
- result = append(result, it)
- }
- return result[:1]
- },
- }
- 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))
- }
- 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) {
- tpl, err := tplutil.LoadTextTemplate("./data/screen.tpl.md", funcmap)
- if err != nil {
- panic(err)
- }
- f, err := os.Create("./data/screen.md")
- if err != nil {
- panic(err)
- }
- defer f.Close()
- var data struct {
- Title string
- Item *gofeed.Item
- }
- 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,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 monochrome BMP.")
- err = convertPDFToBMP("./data/screen.pdf")
- if err != nil {
- panic(err)
- }
- log.Println("Serving screen.png...")
- http.ServeFile(res, req, "./data/screen.bmp")
- }
- func main() {
- http.HandleFunc("/", serveScreen)
- log.Println("Start alba backend...")
- http.ListenAndServe(":3000", nil)
- }
|