This commit is contained in:
parent
98928886ef
commit
32b18d9237
|
@ -134,7 +134,7 @@ class Config:
|
||||||
'send_on_ctrl_enter': [opt_bool, False, _('Send message on Ctrl+Enter and with Enter make new line (Mirabilis ICQ Client default behaviour).')],
|
'send_on_ctrl_enter': [opt_bool, False, _('Send message on Ctrl+Enter and with Enter make new line (Mirabilis ICQ Client default behaviour).')],
|
||||||
'show_roster_on_startup': [opt_bool, True],
|
'show_roster_on_startup': [opt_bool, True],
|
||||||
'key_up_lines': [opt_int, 25, _('How many lines to store for Ctrl+KeyUP.')],
|
'key_up_lines': [opt_int, 25, _('How many lines to store for Ctrl+KeyUP.')],
|
||||||
'version': [ opt_str, '0.10.1.2' ], # which version created the config
|
'version': [ opt_str, '0.10.1.3' ], # which version created the config
|
||||||
'search_engine': [opt_str, 'http://www.google.com/search?&q=%s&sourceid=gajim'],
|
'search_engine': [opt_str, 'http://www.google.com/search?&q=%s&sourceid=gajim'],
|
||||||
'dictionary_url': [opt_str, 'WIKTIONARY', _("Either custom url with %s in it where %s is the word/phrase or 'WIKTIONARY' which means use wiktionary.")],
|
'dictionary_url': [opt_str, 'WIKTIONARY', _("Either custom url with %s in it where %s is the word/phrase or 'WIKTIONARY' which means use wiktionary.")],
|
||||||
'always_english_wikipedia': [opt_bool, False],
|
'always_english_wikipedia': [opt_bool, False],
|
||||||
|
|
|
@ -725,11 +725,15 @@ class ConnectionDisco:
|
||||||
if not qc:
|
if not qc:
|
||||||
qc = []
|
qc = []
|
||||||
is_muc = False
|
is_muc = False
|
||||||
|
transport_type = ''
|
||||||
for i in qc:
|
for i in qc:
|
||||||
if i.getName() == 'identity':
|
if i.getName() == 'identity':
|
||||||
attr = {}
|
attr = {}
|
||||||
for key in i.getAttrs().keys():
|
for key in i.getAttrs().keys():
|
||||||
attr[key] = i.getAttr(key)
|
attr[key] = i.getAttr(key)
|
||||||
|
if attr.has_key('category') and attr['category'] in ('gateway', 'headline')\
|
||||||
|
and attr.has_key('type'):
|
||||||
|
transport_type = attr['type']
|
||||||
if attr.has_key('category') and attr['category'] == 'conference' \
|
if attr.has_key('category') and attr['category'] == 'conference' \
|
||||||
and attr.has_key('type') and attr['type'] == 'text':
|
and attr.has_key('type') and attr['type'] == 'text':
|
||||||
is_muc = True
|
is_muc = True
|
||||||
|
@ -739,6 +743,9 @@ class ConnectionDisco:
|
||||||
elif i.getName() == 'x' and i.getAttr('xmlns') == common.xmpp.NS_DATA:
|
elif i.getName() == 'x' and i.getAttr('xmlns') == common.xmpp.NS_DATA:
|
||||||
data.append(common.xmpp.DataForm(node=i))
|
data.append(common.xmpp.DataForm(node=i))
|
||||||
jid = helpers.get_full_jid_from_iq(iq_obj)
|
jid = helpers.get_full_jid_from_iq(iq_obj)
|
||||||
|
if transport_type and jid not in gajim.transport_type:
|
||||||
|
gajim.transport_type[jid] = transport_type
|
||||||
|
gajim.logger.save_transport_type(jid, transport_type)
|
||||||
id = iq_obj.getID()
|
id = iq_obj.getID()
|
||||||
if not identities: # ejabberd doesn't send identities when we browse online users
|
if not identities: # ejabberd doesn't send identities when we browse online users
|
||||||
#FIXME: see http://www.jabber.ru/bugzilla/show_bug.cgi?id=225
|
#FIXME: see http://www.jabber.ru/bugzilla/show_bug.cgi?id=225
|
||||||
|
|
|
@ -83,6 +83,8 @@ else:
|
||||||
|
|
||||||
gmail_domains = ['gmail.com', 'googlemail.com']
|
gmail_domains = ['gmail.com', 'googlemail.com']
|
||||||
|
|
||||||
|
transport_type = {} # list the type of transport
|
||||||
|
|
||||||
last_message_time = {} # list of time of the latest incomming message
|
last_message_time = {} # list of time of the latest incomming message
|
||||||
# {acct1: {jid1: time1, jid2: time2}, }
|
# {acct1: {jid1: time1, jid2: time2}, }
|
||||||
encrypted_chats = {} # list of encrypted chats {acct1: [jid1, jid2], ..}
|
encrypted_chats = {} # list of encrypted chats {acct1: [jid1, jid2], ..}
|
||||||
|
@ -223,8 +225,11 @@ def get_transport_name_from_jid(jid, use_config_setting = True):
|
||||||
# jid was None. Yann why?
|
# jid was None. Yann why?
|
||||||
if not jid or (use_config_setting and not config.get('use_transports_iconsets')):
|
if not jid or (use_config_setting and not config.get('use_transports_iconsets')):
|
||||||
return
|
return
|
||||||
|
|
||||||
host = get_server_from_jid(jid)
|
host = get_server_from_jid(jid)
|
||||||
|
if host in transport_type:
|
||||||
|
return transport_type[host]
|
||||||
|
|
||||||
# host is now f.e. icq.foo.org or just icq (sometimes on hacky transports)
|
# host is now f.e. icq.foo.org or just icq (sometimes on hacky transports)
|
||||||
host_splitted = host.split('.')
|
host_splitted = host.split('.')
|
||||||
if len(host_splitted) != 0:
|
if len(host_splitted) != 0:
|
||||||
|
@ -293,7 +298,7 @@ def get_first_event(account, jid, typ = None):
|
||||||
if ev[0] == typ:
|
if ev[0] == typ:
|
||||||
return ev
|
return ev
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_notification_image_prefix(jid):
|
def get_notification_image_prefix(jid):
|
||||||
'''returns the prefix for the notification images'''
|
'''returns the prefix for the notification images'''
|
||||||
transport_name = get_transport_name_from_jid(jid)
|
transport_name = get_transport_name_from_jid(jid)
|
||||||
|
|
|
@ -78,6 +78,22 @@ class Constants:
|
||||||
self.SHOW_OFFLINE
|
self.SHOW_OFFLINE
|
||||||
) = range(6)
|
) = range(6)
|
||||||
|
|
||||||
|
(
|
||||||
|
self.TYPE_AIM,
|
||||||
|
self.TYPE_GG,
|
||||||
|
self.TYPE_HTTP_WS,
|
||||||
|
self.TYPE_ICQ,
|
||||||
|
self.TYPE_MSN,
|
||||||
|
self.TYPE_QQ,
|
||||||
|
self.TYPE_SMS,
|
||||||
|
self.TYPE_SMTP,
|
||||||
|
self.TYPE_TLEN,
|
||||||
|
self.TYPE_YAHOO,
|
||||||
|
self.TYPE_NEWMAIL,
|
||||||
|
self.TYPE_RSS,
|
||||||
|
self.TYPE_WEATHER,
|
||||||
|
) = range(13)
|
||||||
|
|
||||||
constants = Constants()
|
constants = Constants()
|
||||||
|
|
||||||
class Logger:
|
class Logger:
|
||||||
|
@ -192,7 +208,66 @@ class Logger:
|
||||||
show_col = 'UNKNOWN'
|
show_col = 'UNKNOWN'
|
||||||
|
|
||||||
return kind_col, show_col
|
return kind_col, show_col
|
||||||
|
|
||||||
|
def convert_human_transport_type_to_db_api_values(self, type_):
|
||||||
|
'''converts from string style to constant ints for db'''
|
||||||
|
if type_ == 'aim':
|
||||||
|
return constants.TYPE_AIM
|
||||||
|
if type_ == 'gadu-gadu':
|
||||||
|
return constants.TYPE_GG
|
||||||
|
if type_ == 'http-ws':
|
||||||
|
return constants.TYPE_HTTP_WS
|
||||||
|
if type_ == 'icq':
|
||||||
|
return constants.TYPE_ICQ
|
||||||
|
if type_ == 'msn':
|
||||||
|
return constants.TYPE_MSN
|
||||||
|
if type_ == 'qq':
|
||||||
|
return constants.TYPE_QQ
|
||||||
|
if type_ == 'sms':
|
||||||
|
return constants.TYPE_SMS
|
||||||
|
if type_ == 'smtp':
|
||||||
|
return constants.TYPE_SMTP
|
||||||
|
if type_ == 'tlen':
|
||||||
|
return constants.TYPE_TLEN
|
||||||
|
if type_ == 'yahoo':
|
||||||
|
return constants.TYPE_YAHOO
|
||||||
|
if type_ == 'newmail':
|
||||||
|
return constants.TYPE_NEWMAIL
|
||||||
|
if type_ == 'rss':
|
||||||
|
return constants.TYPE_RSS
|
||||||
|
if type_ == 'weather':
|
||||||
|
return constants.TYPE_WEATHER
|
||||||
|
return None
|
||||||
|
|
||||||
|
def convert_api_values_to_human_transport_type(self, type_id):
|
||||||
|
'''converts from constant ints for db to string style'''
|
||||||
|
if type_id == constants.TYPE_AIM:
|
||||||
|
return 'aim'
|
||||||
|
if type_id == constants.TYPE_GG:
|
||||||
|
return 'gadu-gadu'
|
||||||
|
if type_id == constants.TYPE_HTTP_WS:
|
||||||
|
return 'http-ws'
|
||||||
|
if type_id == constants.TYPE_ICQ:
|
||||||
|
return 'icq'
|
||||||
|
if type_id == constants.TYPE_MSN:
|
||||||
|
return 'msn'
|
||||||
|
if type_id == constants.TYPE_QQ:
|
||||||
|
return 'qq'
|
||||||
|
if type_id == constants.TYPE_SMS:
|
||||||
|
return 'sms'
|
||||||
|
if type_id == constants.TYPE_SMTP:
|
||||||
|
return 'smtp'
|
||||||
|
if type_id == constants.TYPE_TLEN:
|
||||||
|
return 'tlen'
|
||||||
|
if type_id == constants.TYPE_YAHOO:
|
||||||
|
return 'yahoo'
|
||||||
|
if type_id == constants.TYPE_NEWMAIL:
|
||||||
|
return 'newmail'
|
||||||
|
if type_id == constants.TYPE_RSS:
|
||||||
|
return 'rss'
|
||||||
|
if type_id == constants.TYPE_WEATHER:
|
||||||
|
return 'weather'
|
||||||
|
|
||||||
def commit_to_db(self, values, write_unread = False):
|
def commit_to_db(self, values, write_unread = False):
|
||||||
#print 'saving', values
|
#print 'saving', values
|
||||||
sql = 'INSERT INTO logs (jid_id, contact_name, time, kind, show, message, subject) VALUES (?, ?, ?, ?, ?, ?, ?)'
|
sql = 'INSERT INTO logs (jid_id, contact_name, time, kind, show, message, subject) VALUES (?, ?, ?, ?, ?, ?, ?)'
|
||||||
|
@ -498,3 +573,43 @@ class Logger:
|
||||||
jid_id = self.get_jid_id(jid)
|
jid_id = self.get_jid_id(jid)
|
||||||
where_sql = 'jid_id = %s' % jid_id
|
where_sql = 'jid_id = %s' % jid_id
|
||||||
return where_sql
|
return where_sql
|
||||||
|
|
||||||
|
def save_transport_type(self, jid, type_):
|
||||||
|
'''save the type of the transport in DB'''
|
||||||
|
type_id = self.convert_human_transport_type_to_db_api_values(type_)
|
||||||
|
if not type_id:
|
||||||
|
# unknown type
|
||||||
|
return
|
||||||
|
self.cur.execute(
|
||||||
|
'SELECT type from transports_cache WHERE transport = "%s"' % jid)
|
||||||
|
results = self.cur.fetchall()
|
||||||
|
if results:
|
||||||
|
result = results[0][0]
|
||||||
|
if result == type_id:
|
||||||
|
return
|
||||||
|
self.cur.execute(
|
||||||
|
'UPDATE transports_cache SET type = %d WHERE transport = "%s"' % (type_id,
|
||||||
|
jid))
|
||||||
|
try:
|
||||||
|
self.con.commit()
|
||||||
|
except sqlite.OperationalError, e:
|
||||||
|
print >> sys.stderr, str(e)
|
||||||
|
return
|
||||||
|
self.cur.execute(
|
||||||
|
'INSERT INTO transports_cache VALUES ("%s", %d)' % (jid, type_id))
|
||||||
|
try:
|
||||||
|
self.con.commit()
|
||||||
|
except sqlite.OperationalError, e:
|
||||||
|
print >> sys.stderr, str(e)
|
||||||
|
|
||||||
|
def get_transports_type(self):
|
||||||
|
'''return all the type of the transports in DB'''
|
||||||
|
self.cur.execute(
|
||||||
|
'SELECT * from transports_cache')
|
||||||
|
results = self.cur.fetchall()
|
||||||
|
if not results:
|
||||||
|
return {}
|
||||||
|
answer = {}
|
||||||
|
for result in results:
|
||||||
|
answer[result[0]] = self.convert_api_values_to_human_transport_type(result[1])
|
||||||
|
return answer
|
||||||
|
|
|
@ -144,6 +144,8 @@ class OptionsParser:
|
||||||
self.update_config_to_01011()
|
self.update_config_to_01011()
|
||||||
if old < [0, 10, 1, 2] and new >= [0, 10, 1, 2]:
|
if old < [0, 10, 1, 2] and new >= [0, 10, 1, 2]:
|
||||||
self.update_config_to_01012()
|
self.update_config_to_01012()
|
||||||
|
if old < [0, 10, 1, 3] and new >= [0, 10, 1, 3]:
|
||||||
|
self.update_config_to_01013()
|
||||||
|
|
||||||
gajim.config.set('version', new_version)
|
gajim.config.set('version', new_version)
|
||||||
|
|
||||||
|
@ -272,3 +274,29 @@ class OptionsParser:
|
||||||
self.old_values['emoticons_theme'] == 'Disabled':
|
self.old_values['emoticons_theme'] == 'Disabled':
|
||||||
gajim.config.set('emoticons_theme', '')
|
gajim.config.set('emoticons_theme', '')
|
||||||
gajim.config.set('version', '0.10.1.2')
|
gajim.config.set('version', '0.10.1.2')
|
||||||
|
|
||||||
|
def update_config_to_01013(self):
|
||||||
|
'''create table transports_cache if there is no such table'''
|
||||||
|
import exceptions
|
||||||
|
try:
|
||||||
|
from pysqlite2 import dbapi2 as sqlite
|
||||||
|
except ImportError:
|
||||||
|
raise exceptions.PysqliteNotAvailable
|
||||||
|
import logger
|
||||||
|
|
||||||
|
con = sqlite.connect(logger.LOG_DB_PATH)
|
||||||
|
cur = con.cursor()
|
||||||
|
try:
|
||||||
|
cur.executescript(
|
||||||
|
'''
|
||||||
|
CREATE TABLE transports_cache (
|
||||||
|
transport TEXT UNIQUE,
|
||||||
|
type INTEGER
|
||||||
|
);
|
||||||
|
'''
|
||||||
|
)
|
||||||
|
con.commit()
|
||||||
|
except sqlite.OperationalError, e:
|
||||||
|
pass
|
||||||
|
con.close()
|
||||||
|
gajim.config.set('version', '0.10.1.3')
|
||||||
|
|
|
@ -1891,6 +1891,9 @@ class Interface:
|
||||||
# get instances for windows/dialogs that will show_all()/hide()
|
# get instances for windows/dialogs that will show_all()/hide()
|
||||||
self.instances['file_transfers'] = dialogs.FileTransfersWindow()
|
self.instances['file_transfers'] = dialogs.FileTransfersWindow()
|
||||||
|
|
||||||
|
# get transports type from DB
|
||||||
|
gajim.transport_type = gajim.logger.get_transports_type()
|
||||||
|
|
||||||
gobject.timeout_add(100, self.autoconnect)
|
gobject.timeout_add(100, self.autoconnect)
|
||||||
gobject.timeout_add(200, self.process_connections)
|
gobject.timeout_add(200, self.process_connections)
|
||||||
gobject.timeout_add(500, self.read_sleepy)
|
gobject.timeout_add(500, self.read_sleepy)
|
||||||
|
|
Loading…
Reference in New Issue