5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-02 07:09:54 +08:00

refactored processCall

This commit is contained in:
Lea Anthony 2019-02-04 19:50:26 +11:00
parent 2c28a8f550
commit d8c591e64c
No known key found for this signature in database
GPG Key ID: 33DAF7BB90A58405

View File

@ -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