mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-02 07:09:54 +08:00
refactored processCall
This commit is contained in:
parent
2c28a8f550
commit
d8c591e64c
@ -163,34 +163,11 @@ func (b *bindingManager) bind(object interface{}) {
|
|||||||
b.objectsToBind = append(b.objectsToBind, object)
|
b.objectsToBind = append(b.objectsToBind, object)
|
||||||
}
|
}
|
||||||
|
|
||||||
// process an incoming call request
|
func (b *bindingManager) processFunctionCall(callData *callData) (interface{}, error) {
|
||||||
func (b *bindingManager) processCall(callData *callData) (interface{}, error) {
|
|
||||||
b.log.Debugf("Wanting to call %s", callData.BindingName)
|
|
||||||
|
|
||||||
// Determine if this is function call or method call by the number of
|
|
||||||
// dots in the binding name
|
|
||||||
dotCount := 0
|
|
||||||
for _, character := range callData.BindingName {
|
|
||||||
if character == '.' {
|
|
||||||
dotCount++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return values
|
// Return values
|
||||||
var result []reflect.Value
|
var result []reflect.Value
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
// We need to catch reflect related panics and return
|
|
||||||
// a decent error message
|
|
||||||
// TODO: DEBUG THIS!
|
|
||||||
defer func() {
|
|
||||||
if r := recover(); r != nil {
|
|
||||||
err = fmt.Errorf("%s", r.(string))
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
switch dotCount {
|
|
||||||
case 1:
|
|
||||||
function := b.functions[callData.BindingName]
|
function := b.functions[callData.BindingName]
|
||||||
if function == nil {
|
if function == nil {
|
||||||
return nil, fmt.Errorf("Invalid function name '%s'", callData.BindingName)
|
return nil, fmt.Errorf("Invalid function name '%s'", callData.BindingName)
|
||||||
@ -213,12 +190,19 @@ func (b *bindingManager) processCall(callData *callData) (interface{}, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result[0].Interface(), nil
|
return result[0].Interface(), nil
|
||||||
case 2:
|
}
|
||||||
|
|
||||||
|
func (b *bindingManager) processMethodCall(callData *callData) (interface{}, error) {
|
||||||
|
// Return values
|
||||||
|
var result []reflect.Value
|
||||||
|
var err error
|
||||||
|
|
||||||
// do we have this method?
|
// do we have this method?
|
||||||
method := b.methods[callData.BindingName]
|
method := b.methods[callData.BindingName]
|
||||||
if method == nil {
|
if method == nil {
|
||||||
return nil, fmt.Errorf("Invalid method name '%s'", callData.BindingName)
|
return nil, fmt.Errorf("Invalid method name '%s'", callData.BindingName)
|
||||||
}
|
}
|
||||||
|
|
||||||
result, err = method.call(callData.Data)
|
result, err = method.call(callData.Data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -240,10 +224,41 @@ func (b *bindingManager) processCall(callData *callData) (interface{}, error) {
|
|||||||
return result[0].Interface(), nil
|
return result[0].Interface(), nil
|
||||||
}
|
}
|
||||||
return nil, nil
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
// process an incoming call request
|
||||||
return nil, fmt.Errorf("Invalid binding name '%s'", callData.BindingName)
|
func (b *bindingManager) processCall(callData *callData) (result interface{}, err error) {
|
||||||
|
b.log.Debugf("Wanting to call %s", callData.BindingName)
|
||||||
|
|
||||||
|
// Determine if this is function call or method call by the number of
|
||||||
|
// dots in the binding name
|
||||||
|
dotCount := 0
|
||||||
|
for _, character := range callData.BindingName {
|
||||||
|
if character == '.' {
|
||||||
|
dotCount++
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// We need to catch reflect related panics and return
|
||||||
|
// a decent error message
|
||||||
|
// TODO: DEBUG THIS!
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r != nil {
|
||||||
|
err = fmt.Errorf("%s", r.(string))
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
switch dotCount {
|
||||||
|
case 1:
|
||||||
|
result, err = b.processFunctionCall(callData)
|
||||||
|
case 2:
|
||||||
|
result, err = b.processMethodCall(callData)
|
||||||
|
default:
|
||||||
|
result = nil
|
||||||
|
err = fmt.Errorf("Invalid binding name '%s'", callData.BindingName)
|
||||||
|
}
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// callWailsInitMethods calls all of the WailsInit methods that were
|
// callWailsInitMethods calls all of the WailsInit methods that were
|
||||||
|
Loading…
Reference in New Issue
Block a user