From b3fbd598665f28d608333b5c7e311a9725209965 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ana=C3=ABl=20Verrier?= Date: Sat, 27 Jun 2009 20:54:49 +0200 Subject: [PATCH] * added 'ask' support * fixed a bug (when a contact does not have a name) --- src/common/check_paths.py | 1 + src/common/connection_handlers.py | 2 +- src/common/logger.py | 29 ++++++++++++++++++++--------- src/common/optparser.py | 1 + 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/common/check_paths.py b/src/common/check_paths.py index a732e4327..027b9d5fd 100644 --- a/src/common/check_paths.py +++ b/src/common/check_paths.py @@ -102,6 +102,7 @@ def create_log_db(): jid_id INTEGER, name TEXT, subscription INTEGER, + ask BOOLEAN, PRIMARY KEY (account_jid_id, jid_id) ); diff --git a/src/common/connection_handlers.py b/src/common/connection_handlers.py index 96f03244e..8ca4e63c2 100644 --- a/src/common/connection_handlers.py +++ b/src/common/connection_handlers.py @@ -1565,7 +1565,7 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco, if version: account_jid = gajim.get_jid_from_account(self.name) gajim.logger.add_or_update_contact(account_jid, jid, name, sub, - groups) + ask, groups) gajim.config.set_per('accounts', self.name, 'roster_version', version) if not self.connection or self.connected < 2: diff --git a/src/common/logger.py b/src/common/logger.py index 102300c9e..0c95a0b4b 100644 --- a/src/common/logger.py +++ b/src/common/logger.py @@ -846,7 +846,8 @@ class Logger: # Fill roster tables with the new roster for jid in roster: self.add_or_update_contact(account_jid, jid, roster[jid]['name'], - roster[jid]['subscription'], roster[jid]['groups']) + roster[jid]['subscription'], roster[jid]['ask'], + roster[jid]['groups']) gajim.config.set_per('accounts', account_name, 'roster_version', roster_version) @@ -860,7 +861,7 @@ class Logger: sql = 'DELETE FROM roster_entry WHERE account_jid_id = %d AND jid_id = %d' % (account_jid_id, jid_id) self.simple_commit(sql) - def add_or_update_contact(self, account_jid, jid, name, sub, groups): + def add_or_update_contact(self, account_jid, jid, name, sub, ask, groups): ''' Add or update a contact from account_jid roster. ''' if sub == 'remove': self.del_contact(account_jid, jid) @@ -882,9 +883,13 @@ class Logger: account_jid_id, jid_id, group) self.cur.execute(sql) - sql = 'REPLACE INTO roster_entry VALUES("%d", "%d", "%s", "%d")' % ( - account_jid_id, jid_id, name, - self.convert_human_subscription_values_to_db_api_values(sub)) + if name is None: + name = '' + + sql = 'REPLACE INTO roster_entry VALUES("%d", "%d", "%s", "%s", "%d")'\ + % (account_jid_id, jid_id, name, + self.convert_human_subscription_values_to_db_api_values(sub), + bool(ask)) self.simple_commit(sql) def get_roster(self, account_jid): @@ -893,14 +898,20 @@ class Logger: account_jid_id = self.get_jid_id(account_jid) # First we fill data with roster_entry informations - self.cur.execute('SELECT j.jid, re.jid_id, re.name, re.subscription FROM roster_entry re, jids j WHERE re.account_jid_id="%(account_jid_id)s" AND j.jid_id=re.jid_id' % {'account_jid_id': account_jid_id}) - for jid, jid_id, name, subscription in self.cur: + self.cur.execute('SELECT j.jid, re.jid_id, re.name, re.subscription, re.ask FROM roster_entry re, jids j WHERE re.account_jid_id="%(account_jid_id)s" AND j.jid_id=re.jid_id' % {'account_jid_id': account_jid_id}) + for jid, jid_id, name, subscription, ask in self.cur: data[jid] = {} - data[jid]['name'] = name + if name: + data[jid]['name'] = name + else: + data[jid]['name'] = None data[jid]['subscription'] = self.convert_db_api_values_to_human_subscription_values(subscription) data[jid]['groups'] = [] data[jid]['resources'] = {} - data[jid]['ask'] = None + if ask: + data[jid]['ask'] = 'subscribe' + else: + data[jid]['ask'] = None data[jid]['id'] = jid_id # Then we add group for roster entries diff --git a/src/common/optparser.py b/src/common/optparser.py index 9cf3d56b6..6907dc4b9 100644 --- a/src/common/optparser.py +++ b/src/common/optparser.py @@ -687,6 +687,7 @@ class OptionsParser: jid_id INTEGER, name TEXT, subscription INTEGER, + ask BOOLEAN, PRIMARY KEY (account_jid_id, jid_id) );