package main import ( "embed" "encoding/json" "fmt" "io" "log" "os" "github.com/wailsapp/wails/v2" "github.com/wailsapp/wails/v2/pkg/options" "github.com/wailsapp/wails/v2/pkg/options/assetserver" ) var Error *log.Logger var Warning *log.Logger func init() { log.SetFlags(log.Lmicroseconds | log.Lshortfile) Error = log.New(io.MultiWriter(os.Stderr, os.Stdout), fmt.Sprintf("%sERROR:%s ", "\033[0;101m", "\033[0m"), log.Lmicroseconds|log.Lshortfile) Warning = log.New(io.MultiWriter(os.Stdout), fmt.Sprintf("%sWarning:%s ", "\033[0;93m", "\033[0m"), log.Lmicroseconds|log.Lshortfile) } //go:embed all:frontend/dist var assets embed.FS var settingsFilePath = "settings.json" var gamePath string var addonService *AddonService type Settings struct { GamePath string `json:"gamePath"` Addons map[string]Addon `json:"addons"` } func SaveSettings(settings Settings) error { log.Printf("Saving settings: %+v", settings) settingsFile, err := os.OpenFile(settingsFilePath, os.O_RDWR|os.O_CREATE, 0644) if err != nil { Error.Printf("error opening settings file: %s", err) return err } defer settingsFile.Close() return json.NewEncoder(settingsFile).Encode(settings) } func main() { settingsFile, err := os.OpenFile(settingsFilePath, os.O_RDWR|os.O_CREATE, 0644) if err != nil { Error.Printf("error opening settings file: %s", err) return } settings := Settings{} err = json.NewDecoder(settingsFile).Decode(&settings) if err != nil { Warning.Printf("error decoding settings: %s", err) settings = Settings{} } settingsFile.Close() log.Printf("Loaded settings: %+v", settings) for name, addon := range settings.Addons { addon.Name = name settings.Addons[name] = addon } addonService = &AddonService{} addonService.Addons = settings.Addons app := NewApp() err = wails.Run(&options.App{ Title: "wails-template", Width: 1024, Height: 768, AssetServer: &assetserver.Options{ Assets: assets, }, BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, OnStartup: app.startup, Bind: []interface{}{ app, }, }) if err != nil { println("Error:", err.Error()) } SaveSettings(settings) }