github.com/secoba/wails/v2@v2.6.4/internal/frontend/dispatcher/systemcalls.go (about)

     1  package dispatcher
     2  
     3  import (
     4  	"encoding/json"
     5  	"errors"
     6  	"fmt"
     7  	"strings"
     8  
     9  	"github.com/secoba/wails/v2/pkg/runtime"
    10  
    11  	"github.com/secoba/wails/v2/internal/frontend"
    12  )
    13  
    14  const systemCallPrefix = ":wails:"
    15  
    16  type position struct {
    17  	X int `json:"x"`
    18  	Y int `json:"y"`
    19  }
    20  
    21  type size struct {
    22  	W int `json:"w"`
    23  	H int `json:"h"`
    24  }
    25  
    26  func (d *Dispatcher) processSystemCall(payload callMessage, sender frontend.Frontend) (interface{}, error) {
    27  	// Strip prefix
    28  	name := strings.TrimPrefix(payload.Name, systemCallPrefix)
    29  
    30  	switch name {
    31  	case "WindowGetPos":
    32  		x, y := sender.WindowGetPosition()
    33  		return &position{x, y}, nil
    34  	case "WindowGetSize":
    35  		w, h := sender.WindowGetSize()
    36  		return &size{w, h}, nil
    37  	case "ScreenGetAll":
    38  		return sender.ScreenGetAll()
    39  	case "WindowIsMaximised":
    40  		return sender.WindowIsMaximised(), nil
    41  	case "WindowIsMinimised":
    42  		return sender.WindowIsMinimised(), nil
    43  	case "WindowIsNormal":
    44  		return sender.WindowIsNormal(), nil
    45  	case "WindowIsFullscreen":
    46  		return sender.WindowIsFullscreen(), nil
    47  	case "Environment":
    48  		return runtime.Environment(d.ctx), nil
    49  	case "ClipboardGetText":
    50  		t, err := sender.ClipboardGetText()
    51  		return t, err
    52  	case "ClipboardSetText":
    53  		if len(payload.Args) < 1 {
    54  			return false, errors.New("empty argument, cannot set clipboard")
    55  		}
    56  		var arg string
    57  		if err := json.Unmarshal(payload.Args[0], &arg); err != nil {
    58  			return false, err
    59  		}
    60  		if err := sender.ClipboardSetText(arg); err != nil {
    61  			return false, err
    62  		}
    63  		return true, nil
    64  	default:
    65  		return nil, fmt.Errorf("unknown systemcall message: %s", payload.Name)
    66  	}
    67  }