goldberry/main.go

108 lines
1.9 KiB
Go

package main
import (
"flag"
"fmt"
"os"
_ "embed"
"github.com/wailsapp/wails"
"github.com/atotto/clipboard"
)
const (
version string = "0.5.0"
)
//go:embed frontend/build/main.js
var js string
//go:embed frontend/build/main.css
var css string
var history *History = &History{make([]string, 0, 10), -1}
var appCtrl *AppControl = &AppControl{}
var settings *Settings = NewSettings()
type AppControl struct {
runtime *wails.Runtime
}
func (f *AppControl) WailsInit(runtime *wails.Runtime) error {
f.runtime = runtime
log := f.runtime.Log.New("Goldberry")
log.Info("AppIo initialized")
return nil
}
func (f *AppControl) SaveFile(data string) error {
filePath := f.runtime.Dialog.SelectSaveFile()
if filePath == "" {
return fmt.Errorf("Save canceled")
}
file, err := os.Create(filePath)
if err != nil {
return err
}
defer file.Close()
file.WriteString(data)
return nil
}
func (f AppControl) WriteToClipboard(txt string) error {
return clipboard.WriteAll(txt)
}
func (f *AppControl) OpenHTTP(url string) error {
return f.runtime.Browser.OpenURL(url)
}
func (f *AppControl) Quit() {
settings.Save()
f.runtime.Window.Close()
}
func (f *AppControl) Fullscreen() {
f.runtime.Window.Fullscreen()
}
func (f *AppControl) UnFullscreen() {
f.runtime.Window.UnFullscreen()
}
func (f *AppControl) GetHomeText() (string, error) {
return GoldberryHome()
}
func main() {
versionFlag := flag.Bool("v", false, "Print the version number and exit")
flag.Parse()
if *versionFlag {
fmt.Printf("Goldberry %s\n", version)
os.Exit(0)
}
app := wails.CreateApp(&wails.AppConfig{
Width: 1024,
Height: 768,
Title: "Goldberry",
JS: js,
CSS: css,
Colour: "#DAA520",
Resizable: true,
MinWidth: 400,
MinHeight: 400,
DisableInspector: false,
})
settings.Load()
app.Bind(NavigateTo)
app.Bind(history)
app.Bind(appCtrl)
app.Bind(settings)
app.Run()
}