generated from dave/wails-template
	Implement frontend api
This commit is contained in:
		
							
								
								
									
										52
									
								
								app.go
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								app.go
									
									
									
									
									
								
							@@ -24,3 +24,55 @@ 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