Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1#!/usr/bin/env python 

2# This file is part of Xpra. 

3# Copyright (C) 2015-2017 Antoine Martin <antoine@xpra.org> 

4# Xpra is released under the terms of the GNU GPL v2, or, at your option, any 

5# later version. See the file COPYING for details. 

6 

7import dbus.service 

8 

9from xpra.log import Logger 

10log = Logger("dbus", "server") 

11 

12BUS_NAME = "org.xpra.Server" 

13INTERFACE = "org.xpra.Server" 

14PATH = "/org/xpra/Server" 

15 

16 

17class DBUS_Server_Base(dbus.service.Object): 

18 

19 def __init__(self, bus, server, name): 

20 self.server = server 

21 bus_name = dbus.service.BusName(name, bus) 

22 super().__init__(bus_name, PATH) 

23 self.log("(%s)", server) 

24 self._properties = {} 

25 

26 def cleanup(self): 

27 try: 

28 log("calling %s", self.remove_from_connection) 

29 self.remove_from_connection() 

30 except Exception as e: # pragma: no cover 

31 log.error("Error removing the DBUS server:") 

32 log.error(" %s", e) 

33 

34 

35 def log(self, fmt, *args): 

36 log("%s"+fmt, INTERFACE, *args) 

37 

38 

39 @dbus.service.signal(INTERFACE, signature='sas') 

40 def Event(self, event, args): 

41 self.log(".Event(%s, %s)", event, args) 

42 

43 

44 @dbus.service.method(dbus.PROPERTIES_IFACE, in_signature='ss', out_signature='v') 

45 def Get(self, interface_name, property_name): 

46 conv = self._properties.get(property_name) 

47 if conv is None: 

48 raise dbus.exceptions.DBusException("invalid property") 

49 server_property_name, _ = conv 

50 v = getattr(self.server, server_property_name) 

51 self.log(".Get(%s, %s)=%s", interface_name, property_name, v) 

52 return v 

53 

54 @dbus.service.method(dbus.PROPERTIES_IFACE, in_signature='', out_signature='a{sv}') 

55 def GetAll(self, interface_name): 

56 if interface_name==dbus.PROPERTIES_IFACE: 

57 v = dict((x, self.Get(x)) for x in self._properties.keys()) 

58 else: 

59 v = {} 

60 self.log(".GetAll(%s)=%s", interface_name, v) 

61 return v 

62 

63 @dbus.service.method(dbus.PROPERTIES_IFACE, in_signature='ssv') 

64 def Set(self, interface_name, property_name, new_value): 

65 self.log(".Set(%s, %s, %s)", interface_name, property_name, new_value) 

66 conv = self._properties.get(property_name) 

67 if conv is None: 

68 raise dbus.exceptions.DBusException("invalid property") 

69 server_property_name, validator = conv 

70 assert hasattr(self.server, server_property_name) 

71 setattr(self.server, server_property_name, validator(new_value)) 

72 

73 @dbus.service.signal(dbus.PROPERTIES_IFACE, signature='sa{sv}as') 

74 def PropertiesChanged(self, interface_name, changed_properties, invalidated_properties): 

75 pass