package main import ( "fmt" "log" "net/http" "os" "slideshowApp/env" "slideshowApp/handlers" "slideshowApp/utils" "time" "gitea.tecamino.com/paadi/tecamino-logger/logging" "github.com/gorilla/mux" ) var staticFolder = "./web/static/" func main() { logConfig := logging.DefaultConfig() logConfig.Debug = env.Env.GetValue() == "debug" logger, err := logging.NewLogger(env.LogPath.GetValue(), logConfig) if err != nil { log.Fatal(err) } logger.Debug("main", "load enviroment variable") env.Load(".env") r := mux.NewRouter() uploadFolder := env.PhotoDir.GetValue() logger.Debug("main", "uploadfolder: "+uploadFolder) if _, err := os.Stat(uploadFolder); err != nil { fmt.Println("upload folder for images not found: ", uploadFolder) logger.Error("main", "upload folder for images not found: "+uploadFolder) fmt.Println("use fallback folder") uploadFolder = "./images" logger.Info("main", "use fallback uploadfolder: "+uploadFolder) env.PhotoDir.SetValue(uploadFolder) } fmt.Println("upload folder for images: ", uploadFolder) r.PathPrefix("/uploads/").Handler(http.StripPrefix("/uploads/", http.FileServer(http.Dir(uploadFolder)))) r.HandleFunc("/api/images", handlers.ListFilesHandler).Methods("GET") r.HandleFunc("/ws", handlers.Websocket) r.HandleFunc("/upload", handlers.UploadHandler).Methods("POST") r.HandleFunc("/settings", func(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, staticFolder+"settings.html") }) r.HandleFunc("/api/save-schedule", handlers.SaveSchedule).Methods("POST") r.HandleFunc("/api/get-schedule", handlers.GetSchedule).Methods("GET") r.HandleFunc("/api/delete", handlers.DeleteHandler).Methods("POST") r.HandleFunc("/manage", func(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, staticFolder+"manage.html") }) r.HandleFunc("/api/info", handlers.InfoHandler).Methods("GET") r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, staticFolder+"index.html") }) // We add a route for the slideshow page specifically r.HandleFunc("/slideshow", func(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, staticFolder+"frame.html") }) host := env.Host.GetValue() port := env.Port.GetValue() url := fmt.Sprintf("%s:%s", host, port) go func() { logger.Debug("main", "start go routine with a 3 second wait") time.Sleep(3 * time.Second) if err := utils.OpenBrowser(logger, fmt.Sprintf("%s:%s/slideshow", handlers.GetLocalIP(), port)); err != nil { logger.Error("main", err) } }() fmt.Println("Server running at", url) logger.Info("main", "Server running at: "+url) if err := http.ListenAndServe(url, r); err != nil { logger.Error("main", err) } }