Port to TelepathyGLib

Co-authored-by: tonadev <tonadevv@gmail.com> [initial port]
Co-authored-by: Aniket21mathur <aniketmathur320@gmail.com> [further work]
Co-authored-by: James Cameron <quozl@laptop.org> [minimising changes]
This commit is contained in:
Aniket Mathur
2019-07-06 09:41:18 +05:30
committed by James Cameron
parent ac7482081e
commit 88ea8e1f4f
6 changed files with 149 additions and 67 deletions
+43 -11
View File
@@ -172,22 +172,17 @@ import json
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Gdk', '3.0')
gi.require_version('TelepathyGLib', '0.12')
gi.require_version('SugarExt', '1.0')
from gi.repository import GLib
from gi.repository import GObject
from gi.repository import Gdk
from gi.repository import Gtk
from gi.repository import TelepathyGLib
import dbus
import dbus.service
from dbus import PROPERTIES_IFACE
from telepathy.server import DBusProperties
from telepathy.interfaces import CHANNEL, \
CHANNEL_TYPE_TEXT, \
CLIENT, \
CLIENT_HANDLER
from telepathy.constants import CONNECTION_HANDLE_TYPE_CONTACT
from telepathy.constants import CONNECTION_HANDLE_TYPE_ROOM
from sugar3 import util
from sugar3 import power
@@ -222,6 +217,14 @@ N_BUS_NAME = 'org.freedesktop.Notifications'
N_OBJ_PATH = '/org/freedesktop/Notifications'
N_IFACE_NAME = 'org.freedesktop.Notifications'
CHANNEL = TelepathyGLib.IFACE_CHANNEL
CHANNEL_TYPE_TEXT = TelepathyGLib.IFACE_CHANNEL_TYPE_TEXT
CLIENT = TelepathyGLib.IFACE_CLIENT
CLIENT_HANDLER = TelepathyGLib.IFACE_CLIENT_HANDLER
CONNECTION_HANDLE_TYPE_CONTACT = TelepathyGLib.HandleType.CONTACT
CONNECTION_HANDLE_TYPE_ROOM = TelepathyGLib.HandleType.ROOM
CONN_INTERFACE_ACTIVITY_PROPERTIES = 'org.laptop.Telepathy.ActivityProperties'
PREVIEW_SIZE = style.zoom(300), style.zoom(225)
@@ -1418,7 +1421,7 @@ class Activity(Window, Gtk.Container):
Gdk.flush()
class _ClientHandler(dbus.service.Object, DBusProperties):
class _ClientHandler(dbus.service.Object):
def __init__(self, bundle_id, got_channel_cb):
self._interfaces = set([CLIENT, CLIENT_HANDLER, PROPERTIES_IFACE])
self._got_channel_cb = got_channel_cb
@@ -1429,12 +1432,13 @@ class _ClientHandler(dbus.service.Object, DBusProperties):
path = '/' + name.replace('.', '/')
dbus.service.Object.__init__(self, bus_name, path)
DBusProperties.__init__(self)
self._implement_property_get(CLIENT, {
self._prop_getters = {}
self._prop_setters = {}
self._prop_getters.setdefault(CLIENT, {}).update({
'Interfaces': lambda: list(self._interfaces),
})
self._implement_property_get(CLIENT_HANDLER, {
self._prop_getters.setdefault(CLIENT_HANDLER, {}).update({
'HandlerChannelFilter': self.__get_filters_cb,
})
@@ -1465,6 +1469,34 @@ class _ClientHandler(dbus.service.Object, DBusProperties):
except Exception as e:
logging.exception(e)
@dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE,
in_signature='ss', out_signature='v')
def Get(self, interface_name, property_name):
if interface_name in self._prop_getters \
and property_name in self._prop_getters[interface_name]:
return self._prop_getters[interface_name][property_name]()
else:
logging.debug('InvalidArgument')
@dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE,
in_signature='ssv', out_signature='')
def Set(self, interface_name, property_name, value):
if interface_name in self._prop_setters \
and property_name in self._prop_setters[interface_name]:
self._prop_setters[interface_name][property_name](value)
else:
logging.debug('PermissionDenied')
@dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE,
in_signature='s', out_signature='a{sv}')
def GetAll(self, interface_name):
if interface_name in self._prop_getters:
r = {}
for k, v in self._prop_getters[interface_name].items():
r[k] = v()
return r
else:
logging.debug('InvalidArgument')
_session = None