generated from dave/wails-template
Implement frontend api
This commit is contained in:
54
app.go
54
app.go
@@ -23,4 +23,56 @@ func (a *App) startup(ctx context.Context) {
|
|||||||
}
|
}
|
||||||
func (a *App) Close() {
|
func (a *App) Close() {
|
||||||
runtime.Quit(a.ctx)
|
runtime.Quit(a.ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type AddonResponse struct {
|
||||||
|
Data Addon `json:"data"`
|
||||||
|
Error string `json:"error,omitempty"`
|
||||||
|
}
|
||||||
|
type AddonsResponse struct {
|
||||||
|
Data map[string]Addon `json:"data"`
|
||||||
|
Error string `json:"error,omitempty"`
|
||||||
|
}
|
||||||
|
type StringResponse struct {
|
||||||
|
Data string `json:"data"`
|
||||||
|
Error string `json:"error,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *App) GetAddons() AddonsResponse {
|
||||||
|
return AddonsResponse{
|
||||||
|
Data: addonService.Addons,
|
||||||
|
Error: "",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *App) GetAddon(name string) AddonResponse {
|
||||||
|
addon, err := addonService.GetAddon(name)
|
||||||
|
return AddonResponse{
|
||||||
|
Data: addon,
|
||||||
|
Error: err.Error(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *App) GetAddonRemoteVersion(name string) StringResponse {
|
||||||
|
version, err := addonService.GetRemoteVersion(name)
|
||||||
|
return StringResponse{
|
||||||
|
Data: version,
|
||||||
|
Error: err.Error(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *App) GetAddonLocalVersion(name string) StringResponse {
|
||||||
|
version, err := addonService.GetLocalVersion(name)
|
||||||
|
return StringResponse{
|
||||||
|
Data: version,
|
||||||
|
Error: err.Error(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *App) UpdateAddon(name string) AddonResponse {
|
||||||
|
addon, err := addonService.UpdateAddon(name)
|
||||||
|
return AddonResponse{
|
||||||
|
Data: addon,
|
||||||
|
Error: err.Error(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
11
frontend/wailsjs/go/main/App.d.ts
vendored
11
frontend/wailsjs/go/main/App.d.ts
vendored
@@ -1,4 +1,15 @@
|
|||||||
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
|
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
|
||||||
// This file is automatically generated. DO NOT EDIT
|
// This file is automatically generated. DO NOT EDIT
|
||||||
|
import {main} from '../models';
|
||||||
|
|
||||||
export function Close():Promise<void>;
|
export function Close():Promise<void>;
|
||||||
|
|
||||||
|
export function GetAddon(arg1:string):Promise<main.AddonResponse>;
|
||||||
|
|
||||||
|
export function GetAddonLocalVersion(arg1:string):Promise<main.StringResponse>;
|
||||||
|
|
||||||
|
export function GetAddonRemoteVersion(arg1:string):Promise<main.StringResponse>;
|
||||||
|
|
||||||
|
export function GetAddons():Promise<main.AddonsResponse>;
|
||||||
|
|
||||||
|
export function UpdateAddon(arg1:string):Promise<main.AddonResponse>;
|
||||||
|
|||||||
@@ -5,3 +5,23 @@
|
|||||||
export function Close() {
|
export function Close() {
|
||||||
return window['go']['main']['App']['Close']();
|
return window['go']['main']['App']['Close']();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function GetAddon(arg1) {
|
||||||
|
return window['go']['main']['App']['GetAddon'](arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function GetAddonLocalVersion(arg1) {
|
||||||
|
return window['go']['main']['App']['GetAddonLocalVersion'](arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function GetAddonRemoteVersion(arg1) {
|
||||||
|
return window['go']['main']['App']['GetAddonRemoteVersion'](arg1);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function GetAddons() {
|
||||||
|
return window['go']['main']['App']['GetAddons']();
|
||||||
|
}
|
||||||
|
|
||||||
|
export function UpdateAddon(arg1) {
|
||||||
|
return window['go']['main']['App']['UpdateAddon'](arg1);
|
||||||
|
}
|
||||||
|
|||||||
97
frontend/wailsjs/go/models.ts
Normal file
97
frontend/wailsjs/go/models.ts
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
export namespace main {
|
||||||
|
|
||||||
|
export class Addon {
|
||||||
|
name: string;
|
||||||
|
url: string;
|
||||||
|
|
||||||
|
static createFrom(source: any = {}) {
|
||||||
|
return new Addon(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(source: any = {}) {
|
||||||
|
if ('string' === typeof source) source = JSON.parse(source);
|
||||||
|
this.name = source["name"];
|
||||||
|
this.url = source["url"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export class AddonResponse {
|
||||||
|
data: Addon;
|
||||||
|
error?: string;
|
||||||
|
|
||||||
|
static createFrom(source: any = {}) {
|
||||||
|
return new AddonResponse(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(source: any = {}) {
|
||||||
|
if ('string' === typeof source) source = JSON.parse(source);
|
||||||
|
this.data = this.convertValues(source["data"], Addon);
|
||||||
|
this.error = source["error"];
|
||||||
|
}
|
||||||
|
|
||||||
|
convertValues(a: any, classs: any, asMap: boolean = false): any {
|
||||||
|
if (!a) {
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
if (a.slice && a.map) {
|
||||||
|
return (a as any[]).map(elem => this.convertValues(elem, classs));
|
||||||
|
} else if ("object" === typeof a) {
|
||||||
|
if (asMap) {
|
||||||
|
for (const key of Object.keys(a)) {
|
||||||
|
a[key] = new classs(a[key]);
|
||||||
|
}
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
return new classs(a);
|
||||||
|
}
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export class AddonsResponse {
|
||||||
|
data: {[key: string]: Addon};
|
||||||
|
error?: string;
|
||||||
|
|
||||||
|
static createFrom(source: any = {}) {
|
||||||
|
return new AddonsResponse(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(source: any = {}) {
|
||||||
|
if ('string' === typeof source) source = JSON.parse(source);
|
||||||
|
this.data = this.convertValues(source["data"], Addon, true);
|
||||||
|
this.error = source["error"];
|
||||||
|
}
|
||||||
|
|
||||||
|
convertValues(a: any, classs: any, asMap: boolean = false): any {
|
||||||
|
if (!a) {
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
if (a.slice && a.map) {
|
||||||
|
return (a as any[]).map(elem => this.convertValues(elem, classs));
|
||||||
|
} else if ("object" === typeof a) {
|
||||||
|
if (asMap) {
|
||||||
|
for (const key of Object.keys(a)) {
|
||||||
|
a[key] = new classs(a[key]);
|
||||||
|
}
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
return new classs(a);
|
||||||
|
}
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export class StringResponse {
|
||||||
|
data: string;
|
||||||
|
error?: string;
|
||||||
|
|
||||||
|
static createFrom(source: any = {}) {
|
||||||
|
return new StringResponse(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(source: any = {}) {
|
||||||
|
if ('string' === typeof source) source = JSON.parse(source);
|
||||||
|
this.data = source["data"];
|
||||||
|
this.error = source["error"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
36
main.go
36
main.go
@@ -7,7 +7,6 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
|
||||||
|
|
||||||
"github.com/wailsapp/wails/v2"
|
"github.com/wailsapp/wails/v2"
|
||||||
"github.com/wailsapp/wails/v2/pkg/options"
|
"github.com/wailsapp/wails/v2/pkg/options"
|
||||||
@@ -39,45 +38,35 @@ type Settings struct {
|
|||||||
Addons map[string]Addon `json:"addons"`
|
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() {
|
func main() {
|
||||||
settingsFile, err := os.OpenFile(settingsFilePath, os.O_RDWR|os.O_CREATE, 0644)
|
settingsFile, err := os.OpenFile(settingsFilePath, os.O_RDWR|os.O_CREATE, 0644)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Error.Printf("error opening settings file: %s", err)
|
Error.Printf("error opening settings file: %s", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer settingsFile.Close()
|
|
||||||
settings := Settings{}
|
settings := Settings{}
|
||||||
err = json.NewDecoder(settingsFile).Decode(&settings)
|
err = json.NewDecoder(settingsFile).Decode(&settings)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Warning.Printf("error decoding settings: %s", err)
|
Warning.Printf("error decoding settings: %s", err)
|
||||||
settings = Settings{}
|
settings = Settings{}
|
||||||
}
|
}
|
||||||
|
settingsFile.Close()
|
||||||
log.Printf("Loaded settings: %+v", settings)
|
log.Printf("Loaded settings: %+v", settings)
|
||||||
|
|
||||||
addonService = &AddonService{}
|
addonService = &AddonService{}
|
||||||
addonService.Addons = settings.Addons
|
addonService.Addons = settings.Addons
|
||||||
|
|
||||||
c := make(chan os.Signal, 1)
|
|
||||||
signal.Notify(c, os.Interrupt)
|
|
||||||
go func() {
|
|
||||||
<-c
|
|
||||||
err = settingsFile.Truncate(0)
|
|
||||||
if err != nil {
|
|
||||||
Error.Printf("error truncating settings file: %s", err)
|
|
||||||
}
|
|
||||||
_, err = settingsFile.Seek(0, 0)
|
|
||||||
if err != nil {
|
|
||||||
Error.Printf("error seeking settings file: %s", err)
|
|
||||||
}
|
|
||||||
err = json.NewEncoder(settingsFile).Encode(settings)
|
|
||||||
if err != nil {
|
|
||||||
Error.Printf("error encoding settings: %s", err)
|
|
||||||
}
|
|
||||||
settingsFile.Close()
|
|
||||||
os.Exit(0)
|
|
||||||
}()
|
|
||||||
|
|
||||||
return
|
|
||||||
app := NewApp()
|
app := NewApp()
|
||||||
|
|
||||||
err = wails.Run(&options.App{
|
err = wails.Run(&options.App{
|
||||||
@@ -97,4 +86,5 @@ func main() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
println("Error:", err.Error())
|
println("Error:", err.Error())
|
||||||
}
|
}
|
||||||
|
SaveSettings(settings)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1 @@
|
|||||||
{
|
{"gamePath":"","addons":{"Channeler":{"name":"","url":"https://git.site.quack-lab.dev/dave/wow_channeler"},"Dechickenator":{"name":"","url":"https://git.site.quack-lab.dev/dave/wow_dechickenator"},"Heimdall":{"name":"","url":"https://git.site.quack-lab.dev/dave/wow-Heimdall"}}}
|
||||||
"addons": {
|
|
||||||
"Channeler": {
|
|
||||||
"url": "https://git.site.quack-lab.dev/dave/wow_channeler"
|
|
||||||
},
|
|
||||||
"Heimdall": {
|
|
||||||
"url": "https://git.site.quack-lab.dev/dave/wow-Heimdall"
|
|
||||||
},
|
|
||||||
"Dechickenator": {
|
|
||||||
"url": "https://git.site.quack-lab.dev/dave/wow_dechickenator"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user