Skip to content

Commit

Permalink
add usb interface support
Browse files Browse the repository at this point in the history
  • Loading branch information
realPy committed Mar 25, 2024
1 parent 79c71d2 commit 557258e
Show file tree
Hide file tree
Showing 5 changed files with 173 additions and 1 deletion.
2 changes: 1 addition & 1 deletion base/clipboard/clipboard.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ var singleton sync.Once

var clipboardinterface js.Value

// BroadcastChannel struct
// Clipboard struct
type Clipboard struct {
eventtarget.EventTarget
}
Expand Down
17 changes: 17 additions & 0 deletions base/navigator/navigator.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"github.com/realPy/hogosuru/base/initinterface"
"github.com/realPy/hogosuru/base/permissions"
"github.com/realPy/hogosuru/base/serviceworkercontainer"
"github.com/realPy/hogosuru/base/usb"
)

func init() {
Expand Down Expand Up @@ -109,6 +110,22 @@ func (n Navigator) Clipboard() (clipboard.Clipboard, error) {
return c, err
}

func (n Navigator) USB() (usb.USB, error) {

var err error
var obj interface{}
var u usb.USB
var ok bool

if obj, err = n.GetAttributeGlobal("usb"); err == nil {
if u, ok = obj.(usb.USB); !ok {
err = usb.ErrNotAUSB
}
}

return u, err
}

func (n Navigator) DeviceMemory() (float64, error) {

return n.GetAttributeDouble("deviceMemory")
Expand Down
9 changes: 9 additions & 0 deletions base/usb/errors.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package usb

import "errors"

var (
//ErrNotImplemented ErrNotImplemented error
ErrNotImplemented = errors.New("Browser not implemented USB")
ErrNotAUSB = errors.New("Object is not a USB")
)
93 changes: 93 additions & 0 deletions base/usb/usb.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
package usb

import (
"sync"
"syscall/js"

"github.com/realPy/hogosuru/base/baseobject"
"github.com/realPy/hogosuru/base/eventtarget"
"github.com/realPy/hogosuru/base/initinterface"
"github.com/realPy/hogosuru/base/promise"
)

func init() {

initinterface.RegisterInterface(GetInterface)
}

var singleton sync.Once

var usbinterface js.Value

// USB struct
type USB struct {
eventtarget.EventTarget
}

type USBFrom interface {
USB_() USB
}

func (u USB) Clipboard_() USB {
return u
}

// GetJSInterface get the JS interface
func GetInterface() js.Value {

singleton.Do(func() {
var err error
if usbinterface, err = baseobject.Get(js.Global(), "USB"); err != nil {
usbinterface = js.Undefined()
}

baseobject.Register(usbinterface, func(v js.Value) (interface{}, error) {
return NewFromJSObject(v)

})
promise.GetInterface()

})

return usbinterface
}

func NewFromJSObject(obj js.Value) (USB, error) {
var u USB

if ci := GetInterface(); !ci.IsUndefined() {
if obj.InstanceOf(ci) {
u.BaseObject = u.SetObject(obj)
return u, nil

}
}

return u, ErrNotImplemented
}

func (u USB) GetDevices() (promise.Promise, error) {
var err error
var obj js.Value
var p promise.Promise

if obj, err = u.Call("getDevices"); err == nil {

p, err = promise.NewFromJSObject(obj)
}

return p, err
}

func (u USB) RequestDevices(filter map[string]int) (promise.Promise, error) {
var err error
var obj js.Value
var p promise.Promise

if obj, err = u.Call("requestDevice", js.ValueOf(filter)); err == nil {

p, err = promise.NewFromJSObject(obj)
}

return p, err
}
53 changes: 53 additions & 0 deletions base/usb/usb_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package usb

import (
"syscall/js"
"testing"

"github.com/realPy/hogosuru/base/baseobject"
"github.com/realPy/hogosuru/base/clipboarditem"
"github.com/realPy/hogosuru/testingutils"
)

var clipitem clipboarditem.ClipboardItem

var methodsAttempt []map[string]interface{}

func TestMain(m *testing.M) {

baseobject.SetSyscall()

methodsAttempt = []map[string]interface{}{
{"method": "GetDevices", "type": "constructnamechecking", "resultattempt": "Promise"},
{"method": "RequestDevices", "args": []interface{}{map[string]int{"vendorId": 0x11}}, "type": "constructnamechecking", "resultattempt": "Promise"},
}

baseobject.Eval(`usbobj=navigator.usb`)
m.Run()
}

func TestNewFromJSObject(t *testing.T) {

if obj, err := baseobject.Get(js.Global(), "usbobj"); testingutils.AssertErr(t, err) {
if usb, err := NewFromJSObject(obj); testingutils.AssertErr(t, err) {

testingutils.AssertExpect(t, "USB", usb.ConstructName_())

}
}
}

func TestMethods(t *testing.T) {

if obj, err := baseobject.Get(js.Global(), "usbobj"); testingutils.AssertErr(t, err) {

if clip, err := NewFromJSObject(obj); testingutils.AssertErr(t, err) {

for _, result := range methodsAttempt {
testingutils.InvokeCheck(t, clip, result)
}

}

}
}

0 comments on commit 557258e

Please sign in to comment.