123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- package main
- import (
- "fmt"
- "log"
- "net/http"
- "os"
- "time"
- "gogs.gildas.ch/gildas/movies"
- "gogs.gildas.ch/gildas/movies/api"
- )
- const (
- dataFile = "movies.json"
- )
- func main() {
- var collection *movies.Collection
- if _, err := os.Stat(dataFile); !os.IsNotExist(err) {
- c, err := movies.Import(dataFile)
- if err != nil {
- log.Fatal(err)
- }
- collection = c
- } else {
- collection = &movies.Collection{}
- }
- http.Handle("/add-movie", api.AddMovieHandler(collection))
- port := "8080"
- if p := os.Getenv("PORT"); p != "" {
- port = p
- }
- stopExport := make(chan bool)
- go export(collection, stopExport)
- defer func() { stopExport <- true }()
- fmt.Println("Listening...")
- err := http.ListenAndServe(":"+port, nil)
- fmt.Println("Server stopped with error:", err)
- }
- func export(c *movies.Collection, stop <-chan bool) {
- for {
- select {
- case <-time.After(30 * time.Second):
- if c.HasChanged() {
- err := c.Export(dataFile)
- if err != nil {
- log.Fatal(err)
- return
- }
- fmt.Printf("Exported fresh data to %q.\n", dataFile)
- }
- case <-stop:
- return
- }
- }
- }
|