mirror of
https://github.com/jetkvm/kvm.git
synced 2025-09-16 08:38:14 +00:00
* feat: add timezone support to jiggler and fix custom settings persistence - Add timezone field to JigglerConfig with comprehensive IANA timezone list - Fix custom settings not loading current values - Remove business hours preset, add as examples in custom settings - Improve error handling for invalid cron expressions * fix: format jiggler.go with gofmt * fix: add embedded timezone data and validation - Import time/tzdata to embed timezone database in binary - Add timezone validation in runJigglerCronTab() to gracefully fallback to UTC - Add timezone to debug logging in rpcSetJigglerConfig - Fixes 'unknown time zone' errors when system lacks timezone data * refactor: add timezone field comments from jiggler options * chore: move tzdata to backend * refactor: fix JigglerSetting linting - Adjusted useEffect dependency to include send function for better data fetching - Modified layout classes for improved responsiveness and consistency - Cleaned up code formatting for better readability --------- Co-authored-by: Siyuan Miao <i@xswan.net>
73 lines
1.3 KiB
Go
73 lines
1.3 KiB
Go
//go:build ignore
|
|
|
|
package main
|
|
|
|
import (
|
|
"archive/zip"
|
|
"bytes"
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
"text/template"
|
|
)
|
|
|
|
var tmpl = `// Code generated by "go run gen.go". DO NOT EDIT.
|
|
//go:generate env ZONEINFO=$GOROOT/lib/time/zoneinfo.zip go run gen.go -output tzdata.go
|
|
package tzdata
|
|
var TimeZones = []string{
|
|
{{- range . }}
|
|
"{{.}}",
|
|
{{- end }}
|
|
}
|
|
`
|
|
|
|
var filename = flag.String("output", "tzdata.go", "output file name")
|
|
|
|
func main() {
|
|
flag.Parse()
|
|
|
|
path := os.Getenv("ZONEINFO")
|
|
if path == "" {
|
|
fmt.Println("ZONEINFO is not set")
|
|
os.Exit(1)
|
|
}
|
|
|
|
if _, err := os.Stat(path); os.IsNotExist(err) {
|
|
fmt.Printf("ZONEINFO %s does not exist\n", path)
|
|
os.Exit(1)
|
|
}
|
|
|
|
zipfile, err := zip.OpenReader(path)
|
|
if err != nil {
|
|
fmt.Printf("Error opening ZONEINFO %s: %v\n", path, err)
|
|
os.Exit(1)
|
|
}
|
|
defer zipfile.Close()
|
|
|
|
timezones := []string{}
|
|
|
|
for _, file := range zipfile.File {
|
|
timezones = append(timezones, file.Name)
|
|
}
|
|
|
|
var buf bytes.Buffer
|
|
|
|
tmpl, err := template.New("tzdata").Parse(tmpl)
|
|
if err != nil {
|
|
fmt.Printf("Error parsing template: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
err = tmpl.Execute(&buf, timezones)
|
|
if err != nil {
|
|
fmt.Printf("Error executing template: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
err = os.WriteFile(*filename, buf.Bytes(), 0644)
|
|
if err != nil {
|
|
fmt.Printf("Error writing file %s: %v\n", *filename, err)
|
|
os.Exit(1)
|
|
}
|
|
}
|