Files
Yggdrasil/main.go

119 lines
2.9 KiB
Go

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 settings *Settings
var addonService *AddonService
type Settings struct {
GamePath string `json:"gamePath"`
Addons map[string]Addon `json:"addons"`
Locale string `json:"locale"`
}
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
}
err = json.NewDecoder(settingsFile).Decode(&settings)
if err != nil {
Warning.Printf("error decoding settings: %s", err)
settings = &Settings{
Locale: "en",
GamePath: "",
Addons: make(map[string]Addon),
}
settings.Addons["Channeler"] = Addon{
Name: "Channeler",
URL: "https://git.site.quack-lab.dev/dave/wow_channeler",
}
settings.Addons["Dechickenator"] = Addon{
Name: "Dechickenator",
URL: "https://git.site.quack-lab.dev/dave/wow_dechickenator",
}
settings.Addons["Heimdall"] = Addon{
Name: "Heimdall",
URL: "https://git.site.quack-lab.dev/dave/wow-Heimdall",
}
SaveSettings(*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
for _, addon := range addonService.Addons {
version, err := addonService.GetLocalVersion(addon.Name)
if err != nil {
Warning.Printf("error getting local version: %s", err)
}
log.Printf("%s %#v", addon.Name, version)
}
app := NewApp()
err = wails.Run(&options.App{
Title: "wails-template",
Width: 800,
Height: 600,
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)
}