Unify Browser runtime

This commit is contained in:
Lea Anthony
2020-10-20 09:10:09 +11:00
parent 9e0023961b
commit 95369d7c3d
5 changed files with 19 additions and 29 deletions

View File

@@ -22,13 +22,14 @@ func runtimeMessageParser(message string) (*parsedMessage, error) {
// processBrowserMessage expects messages of the following format:
// RB<METHOD><DATA>
// O = Open
func processBrowserMessage(message string) (*parsedMessage, error) {
method := message[2]
switch method {
case 'U':
case 'O':
// Open URL
url := message[3:]
return &parsedMessage{Topic: "runtime:browser:openurl", Data: url}, nil
target := message[3:]
return &parsedMessage{Topic: "runtime:browser:open", Data: target}, nil
}
return nil, fmt.Errorf("unknown browser message: %s", message)

View File

@@ -8,23 +8,23 @@ import (
// Browser defines all browser related operations
type Browser interface {
Open(url string) error
Open(target string) error
}
type browser struct{}
// Open a url / file using the system default application
// Credit: https://gist.github.com/hyg/9c4afcd91fe24316cbf0
func (b *browser) Open(url string) error {
func (b *browser) Open(target string) error {
var err error
switch runtime.GOOS {
case "linux":
err = exec.Command("xdg-open", url).Start()
err = exec.Command("xdg-open", target).Start()
case "windows":
err = exec.Command("rundll32", "url.dll,FileProtocolHandler", url).Start()
err = exec.Command("rundll32", "url.dll,FileProtocolHandler", target).Start()
case "darwin":
err = exec.Command("open", url).Start()
err = exec.Command("open", target).Start()
default:
err = fmt.Errorf("unsupported platform")
}

View File

@@ -12,23 +12,13 @@ The lightweight framework for web-like apps
import { SendMessage } from 'ipc';
/**
* Opens the given URL in the system browser
* Opens the given URL / filename in the system browser
*
* @export
* @param {string} url
* @param {string} target
* @returns
*/
export function OpenURL(url) {
return SendMessage('RBU' + url);
export function Open(target) {
return SendMessage('RBO' + target);
}
/**
* Opens the given filename using the system's default file handler
*
* @export
* @param {sting} filename
* @returns
*/
export function OpenFile(filename) {
return SendMessage('runtime:browser:openfile', filename);
}

View File

@@ -17,8 +17,7 @@ interface Level {
declare const wailsapp__runtime: {
Browser: {
OpenFile(filename: string): Promise<any>;
OpenURL(url: string): Promise<any>;
Open(target: string): Promise<any>;
};
Events: {
Emit(eventName: string, data?: any): void;

View File

@@ -32,7 +32,7 @@ func NewRuntime(bus *servicebus.ServiceBus, logger *logger.Logger) (*Runtime, er
}
// Subscribe to log messages
runtimeChannel, err := bus.Subscribe("runtime")
runtimeChannel, err := bus.Subscribe("runtime:")
if err != nil {
return nil, err
}
@@ -103,12 +103,12 @@ func (r *Runtime) shutdown() {
func (r *Runtime) processBrowserMessage(method string, data interface{}) error {
switch method {
case "openurl":
url, ok := data.(string)
case "open":
target, ok := data.(string)
if !ok {
return fmt.Errorf("expected 1 string parameter for runtime:browser:openurl")
return fmt.Errorf("expected 1 string parameter for runtime:browser:open")
}
go r.runtime.Browser.Open(url)
go r.runtime.Browser.Open(target)
default:
return fmt.Errorf("unknown method runtime:browser:%s", method)
}