1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-01-31 17:02:51 -05:00

core/dbus: fix arg types in calls

This commit is contained in:
bbedward
2026-01-28 15:25:16 -05:00
parent 757054e140
commit 75fd62865b

View File

@@ -60,7 +60,8 @@ func (m *Manager) Call(bus, dest, path, iface, method string, args []any) (*Call
obj := conn.Object(dest, dbus.ObjectPath(path))
fullMethod := iface + "." + method
call := obj.Call(fullMethod, 0, args...)
convertedArgs := convertArgs(args)
call := obj.Call(fullMethod, 0, convertedArgs...)
if call.Err != nil {
return nil, fmt.Errorf("dbus call failed: %w", call.Err)
}
@@ -68,6 +69,37 @@ func (m *Manager) Call(bus, dest, path, iface, method string, args []any) (*Call
return &CallResult{Values: dbusutil.NormalizeSlice(call.Body)}, nil
}
func convertArgs(args []any) []any {
result := make([]any, len(args))
for i, arg := range args {
result[i] = convertArg(arg)
}
return result
}
func convertArg(arg any) any {
switch v := arg.(type) {
case float64:
if v == float64(uint32(v)) && v >= 0 && v <= float64(^uint32(0)) {
return uint32(v)
}
if v == float64(int32(v)) {
return int32(v)
}
return v
case []any:
return convertArgs(v)
case map[string]any:
result := make(map[string]any)
for k, val := range v {
result[k] = convertArg(val)
}
return result
default:
return arg
}
}
func (m *Manager) GetProperty(bus, dest, path, iface, property string) (*PropertyResult, error) {
conn, err := m.getConn(bus)
if err != nil {