【发布时间】:2022-04-17 20:32:22
【问题描述】:
我正在尝试将以下 python 代码转换为 vala
def powerStatusAvailable():
"""
Check if org.freedesktop.UPower is available so that
:py:func:`tools.onBattery` would return the correct power status.
Returns:
bool: ``True`` if :py:func:`tools.onBattery` can report power status
"""
if dbus:
try:
bus = dbus.SystemBus()
proxy = bus.get_object('org.freedesktop.UPower',
'/org/freedesktop/UPower')
return 'OnBattery' in proxy.GetAll('org.freedesktop.UPower',
dbus_interface = 'org.freedesktop.DBus.Properties')
except dbus.exceptions.DBusException:
pass
return False
作为一个完整的 vala 初学者,我非常迷茫。 我不了解对象层次结构。 文档和示例使用类 Bus。 还有一个类 DBusProxy 我应该使用那个吗? ...它有一个方法 get_cached_property_names
Bus 和 DBusProxy 有什么区别?
这是我的尝试,但当然失败了。
using GLib;
// example of a DBus client
[DBus (name = "org.freedesktop.UPower")]
interface UPowerManager : GLib.Object {
public abstract GLib.ObjectPath[] enumerate_devices () throws GLib.DBusError,GLib.IOError;
public abstract GLib.ObjectPath get_display_device () throws GLib.DBusError,GLib.IOError;
public abstract string get_critical_action () throws GLib.DBusError,GLib.IOError;
public abstract string[] get_cached_property_names () throws GLib.DBusError,GLib.IOError;
}
int main (string[] args)
{
UPowerManager upower_manager;
upower_manager = Bus.get_proxy_sync(BusType.SYSTEM,"org.freedesktop.UPower","/org/freedesktop/UPower");
string[] property_names;
property_names = upower_manager.get_cached_property_names();
stdout.printf ("Hello, World!\n");
return 0;
}
但是编译出错
未捕获的错误:GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod:没有这样的方法 'GetCachedPropertyNames'
【问题讨论】:
标签: vala