changeset ea036815f41d in /home/hg/repos/gajim-plugins
author: Daniel Gultsch daniel@gultsch.de branches: details:gajim-plugins?cmd=changeset;node=ea036815f41d description: load initial set of device ids on boot
diffstat:
omemo/__init__.py | 7 ++++- omemo/lib/python-omemo/src/omemo/liteaxolotlstore.py | 3 ++ omemo/lib/python-omemo/src/omemo/litesessionstore.py | 8 ++++++ omemo/lib/python-omemo/src/omemo/state.py | 25 ++++++++++--------- 4 files changed, 29 insertions(+), 14 deletions(-)
diffs (121 lines):
diff -r 01a00dc2a239 -r ea036815f41d omemo/__init__.py --- a/omemo/__init__.py Fri Mar 25 20:15:35 2016 +0100 +++ b/omemo/__init__.py Fri Mar 25 21:06:44 2016 +0100 @@ -81,7 +81,10 @@ if account not in self.omemo_states: db_path = os.path.join(DB_DIR, 'omemo_' + account + '.db') conn = sqlite3.connect(db_path, check_same_thread=False) - self.omemo_states[account] = OmemoState(conn) + + my_jid = gajim.get_jid_from_account(account) + + self.omemo_states[account] = OmemoState(my_jid, conn) return self.omemo_states[account]
@log_calls('OmemoPlugin') @@ -196,7 +199,7 @@ if contact_jid == my_jid: log.info(account_name + ' ⇒ Received own device_list:' + str( devices_list)) - state.set_own_devices(my_jid, devices_list) + state.set_own_devices(devices_list)
if not state.own_device_id_published() or anydup( state.own_devices): diff -r 01a00dc2a239 -r ea036815f41d omemo/lib/python-omemo/src/omemo/liteaxolotlstore.py --- a/omemo/lib/python-omemo/src/omemo/liteaxolotlstore.py Fri Mar 25 20:15:35 2016 +0100 +++ b/omemo/lib/python-omemo/src/omemo/liteaxolotlstore.py Fri Mar 25 21:06:44 2016 +0100 @@ -94,6 +94,9 @@ def loadSession(self, recepientId, deviceId): return self.sessionStore.loadSession(recepientId, deviceId)
+ def getDeviceTuples(self): + return self.sessionStore.getDeviceTuples() + def getSubDeviceSessions(self, recepientId): # TODO Reuse this return self.sessionStore.getSubDeviceSessions(recepientId) diff -r 01a00dc2a239 -r ea036815f41d omemo/lib/python-omemo/src/omemo/litesessionstore.py --- a/omemo/lib/python-omemo/src/omemo/litesessionstore.py Fri Mar 25 20:15:35 2016 +0100 +++ b/omemo/lib/python-omemo/src/omemo/litesessionstore.py Fri Mar 25 21:06:44 2016 +0100 @@ -53,6 +53,14 @@ deviceIds = [r[0] for r in result] return deviceIds
+ def getDeviceTuples(self): + q = "SELECT recipient_id, device_id from sessions" + c = self.dbConn.cursor() + result = [] + for row in c.execute(q): + result.append((row[0],row[1])) + return result + def storeSession(self, recipientId, deviceId, sessionRecord): self.deleteSession(recipientId, deviceId)
diff -r 01a00dc2a239 -r ea036815f41d omemo/lib/python-omemo/src/omemo/state.py --- a/omemo/lib/python-omemo/src/omemo/state.py Fri Mar 25 20:15:35 2016 +0100 +++ b/omemo/lib/python-omemo/src/omemo/state.py Fri Mar 25 21:06:44 2016 +0100 @@ -41,21 +41,23 @@ log = logging.getLogger('gajim.plugin_system.omemo')
class OmemoState: - session_ciphers = {} - encryption = None - - device_ids = {} - own_name = '' - own_devices = [] - - def __init__(self, connection): + def __init__(self, own_jid, connection): """ Instantiates an OmemoState object.
:param connection: an :py:class:`sqlite3.Connection` """ + self.session_ciphers = {} + self.encryption = None + self.own_jid = own_jid + self.device_ids = {} + self.own_devices = [] self.store = LiteAxolotlStore(connection) self.encryption = self.store.encryptionStore + for jid, device_id in self.store.getDeviceTuples(): + if jid != own_jid: + self.add_device(jid, device_id)
+ log.debug(self.own_jid + ': devices after boot:'+str(self.device_ids)) def build_session(self, recipient_id, device_id, bundle_dict): sessionBuilder = SessionBuilder(self.store, self.store, self.store, self.store, recipient_id, device_id) @@ -93,11 +95,11 @@
def add_device(self, name, device_id): if name not in self.device_ids: - self.device_ids[name] = {device_id} + self.device_ids[name] = [device_id] elif device_id not in self.device_ids[name]: self.device_ids[name].append(device_id)
- def set_own_devices(self, name, devices): + def set_own_devices(self, devices): """ Overwrite the current :py:attribute:`OmemoState.own_devices` with the given devices.
@@ -106,7 +108,6 @@ devices : [int] A list of device_ids """ - self.own_name = name self.own_devices = devices
def add_own_device(self, device_id): @@ -250,7 +251,7 @@ jid : string The contacts jid """ - if jid == self.own_name: + if jid == self.own_jid: return set(self.own_devices) - set({self.own_device_id}) if jid not in self.device_ids: return set()