package handlers import ( "encoding/json" "fmt" "net/http" "os" "path/filepath" "runtime" "slideshowApp/env" "slideshowApp/utils" ) var settingsFile = "settings.json" type Settings map[string]any func SaveSettings(w http.ResponseWriter, r *http.Request) { var s Settings if err := json.NewDecoder(r.Body).Decode(&s); err != nil { fmt.Println(12, err) utils.SendJSONError(w, "Invalid input", http.StatusBadRequest) return } data, err := json.MarshalIndent(s, "", " ") if err != nil { fmt.Println(13, err) utils.SendJSONError(w, "Encoding failed", http.StatusInternalServerError) return } err = os.WriteFile(getFilePath(), data, 0644) if err != nil { fmt.Println(14, err) utils.SendJSONError(w, "write file failed", http.StatusInternalServerError) return } w.WriteHeader(http.StatusOK) } func GetSettings(w http.ResponseWriter, r *http.Request) { data, err := os.ReadFile(getFilePath()) if err != nil { json.NewEncoder(w).Encode(Settings{"default_interval": GetInterval()}) return } w.Write(data) } func GetInterval() string { data, err := os.ReadFile(getFilePath()) if err != nil { interval := env.IntervalDefault.GetValue() if interval == "" { interval = "10" } return interval } var settings Settings err = json.Unmarshal(data, &settings) if err != nil { return "10" } if interval, ok := settings["default_interval"]; ok { return interval.(string) } return "10" } func getFilePath() string { switch runtime.GOOS { case "linux": return filepath.Join(".", "data", settingsFile) default: return settingsFile } }