2008-08-15 19:31:51 +02:00
# -*- coding:utf-8 -*-
2008-08-15 05:20:23 +02:00
## src/common/gajim.py
2005-04-15 19:02:23 +02:00
##
2008-08-15 05:20:23 +02:00
## Copyright (C) 2003-2008 Yann Leboulanger <asterix AT lagaule.org>
## Copyright (C) 2005-2006 Dimitur Kirov <dkirov AT gmail.com>
## Travis Shirk <travis AT pobox.com>
## Nikos Kouremenos <kourem AT gmail.com>
2008-08-15 19:31:51 +02:00
## Copyright (C) 2006 Junglecow J <junglecow AT gmail.com>
2008-08-15 05:20:23 +02:00
## Stefan Bethge <stefan AT lanpartei.de>
## Copyright (C) 2006-2008 Jean-Marie Traissard <jim AT lapin.org>
## Copyright (C) 2007-2008 Brendan Taylor <whateley AT gmail.com>
## Stephan Erb <steve-e AT h3c.de>
## Copyright (C) 2008 Jonathan Schleifer <js-gajim AT webkeks.org>
2005-04-15 19:02:23 +02:00
##
2007-12-12 09:44:46 +01:00
## This file is part of Gajim.
##
## Gajim is free software; you can redistribute it and/or modify
2005-04-15 19:02:23 +02:00
## it under the terms of the GNU General Public License as published
2007-12-12 09:44:46 +01:00
## by the Free Software Foundation; version 3 only.
2005-04-15 19:02:23 +02:00
##
2007-12-12 09:44:46 +01:00
## Gajim is distributed in the hope that it will be useful,
2005-04-15 19:02:23 +02:00
## but WITHOUT ANY WARRANTY; without even the implied warranty of
2008-08-15 05:20:23 +02:00
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2005-04-15 19:02:23 +02:00
## GNU General Public License for more details.
##
2007-12-12 09:44:46 +01:00
## You should have received a copy of the GNU General Public License
2008-08-15 05:20:23 +02:00
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
2007-12-12 09:44:46 +01:00
##
2005-04-15 19:02:23 +02:00
2005-10-30 12:20:24 +01:00
import sys
2005-04-15 19:02:23 +02:00
import logging
2006-02-10 14:18:33 +01:00
import locale
2005-08-09 20:45:16 +02:00
2005-12-05 12:13:08 +01:00
import config
Merged in trunk updates, including meta_contacts
Merged revisions 4951,4962-4969 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r4951 | nk | 2005-12-30 16:50:36 -0700 (Fri, 30 Dec 2005) | 1 line
fixes in greek transl
........
r4962 | asterix | 2006-01-01 11:41:04 -0700 (Sun, 01 Jan 2006) | 2 lines
merge meta_contacts branch with trunk. Meta contacts are not in gajim yet, but framework is here. We now use gajim.contacts.many_functions() to handle contacts and groupchat_contacts.
........
r4963 | asterix | 2006-01-01 11:43:24 -0700 (Sun, 01 Jan 2006) | 2 lines
correct contacts file
........
r4964 | asterix | 2006-01-01 11:47:26 -0700 (Sun, 01 Jan 2006) | 2 lines
dict.remove() doesn't exists, it's del dict[]
........
r4965 | asterix | 2006-01-01 11:50:15 -0700 (Sun, 01 Jan 2006) | 2 lines
some missing commits from branch
........
r4966 | asterix | 2006-01-01 11:53:30 -0700 (Sun, 01 Jan 2006) | 2 lines
end of gc_contact.nick -> gc_contact.name
........
r4967 | asterix | 2006-01-01 12:05:59 -0700 (Sun, 01 Jan 2006) | 2 lines
new ACE option: send_sha_in_gc_presence that allow to send sha info in groupchat presences
........
r4968 | asterix | 2006-01-01 12:12:36 -0700 (Sun, 01 Jan 2006) | 2 lines
0.9.1-2 in debian that solve the group bug (commit [4924])
........
r4969 | asterix | 2006-01-01 12:31:13 -0700 (Sun, 01 Jan 2006) | 2 lines
typo
........
2006-01-01 21:06:26 +01:00
from contacts import Contacts
2006-09-14 18:48:03 +02:00
from events import Events
2008-04-21 00:58:47 +02:00
import xmpp
2005-04-15 19:02:23 +02:00
2006-10-11 20:27:55 +02:00
try :
import defs
except ImportError :
print >> sys . stderr , ''' defs.py is missing!
2006-10-12 00:41:03 +02:00
If you start gajim from svn :
* Make sure you have GNU autotools installed .
This includes the following packages :
2006-10-12 01:55:03 +02:00
automake > = 1.8
2006-10-12 00:41:03 +02:00
autoconf > = 2.59
intltool - 0.35
libtool
* Run
$ sh autogen . sh
* Optionally , install gajim
$ make
$ sudo make install
* * * * Note for translators * * * *
You can get the latest string updates , by running :
$ cd po /
$ make update - po
'''
2006-10-11 20:27:55 +02:00
sys . exit ( 1 )
2006-10-11 17:51:42 +02:00
2005-10-20 13:17:17 +02:00
interface = None # The actual interface (the gtk one for the moment)
2009-02-06 20:01:36 +01:00
thread_interface = None # Interface to run a thread and then a callback
2005-12-05 12:13:08 +01:00
config = config . Config ( )
2007-12-17 21:15:06 +01:00
version = config . get ( ' version ' )
2006-10-04 02:10:49 +02:00
connections = { } # 'account name': 'account (connection.Connection) instance'
2008-04-14 17:19:09 +02:00
ipython_window = None
2005-05-17 22:31:43 +02:00
2009-03-11 10:16:07 +01:00
log = logging . getLogger ( ' gajim ' )
2005-05-17 22:31:43 +02:00
2005-12-05 12:13:08 +01:00
import logger
logger = logger . Logger ( ) # init the logger
2005-11-22 15:46:37 +01:00
2006-11-04 19:15:38 +01:00
import configpaths
gajimpaths = configpaths . gajimpaths
2005-11-22 12:54:33 +01:00
2006-11-04 19:15:38 +01:00
LOGPATH = gajimpaths [ ' LOG ' ] # deprecated
VCARD_PATH = gajimpaths [ ' VCARD ' ]
AVATAR_PATH = gajimpaths [ ' AVATAR ' ]
MY_EMOTS_PATH = gajimpaths [ ' MY_EMOTS ' ]
2007-08-09 17:39:18 +02:00
MY_ICONSETS_PATH = gajimpaths [ ' MY_ICONSETS ' ]
2008-07-22 23:08:52 +02:00
MY_MOOD_ICONSETS_PATH = gajimpaths [ ' MY_MOOD_ICONSETS ' ]
2008-07-28 22:57:56 +02:00
MY_ACTIVITY_ICONSETS_PATH = gajimpaths [ ' MY_ACTIVITY_ICONSETS ' ]
2007-12-12 09:44:46 +01:00
MY_CACERTS = gajimpaths [ ' MY_CACERTS ' ]
2006-11-04 19:15:38 +01:00
TMP = gajimpaths [ ' TMP ' ]
DATA_DIR = gajimpaths [ ' DATA ' ]
HOME_DIR = gajimpaths [ ' HOME ' ]
2006-02-10 14:03:32 +01:00
2006-04-22 10:53:01 +02:00
try :
LANG = locale . getdefaultlocale ( ) [ 0 ] # en_US, fr_FR, el_GR etc..
except ( ValueError , locale . Error ) :
# unknown locale, use en is better than fail
LANG = None
2006-02-10 14:18:33 +01:00
if LANG is None :
2005-06-25 09:37:14 +02:00
LANG = ' en '
2006-02-10 14:18:33 +01:00
else :
LANG = LANG [ : 2 ] # en, fr, el etc..
2005-07-02 13:06:02 +02:00
2008-12-24 16:00:38 +01:00
os_info = None # used to cache os information
2006-09-14 18:48:03 +02:00
gmail_domains = [ ' gmail.com ' , ' googlemail.com ' ]
transport_type = { } # list the type of transport
2005-07-03 17:27:41 +02:00
last_message_time = { } # list of time of the latest incomming message
# {acct1: {jid1: time1, jid2: time2}, }
2005-07-02 13:06:02 +02:00
encrypted_chats = { } # list of encrypted chats {acct1: [jid1, jid2], ..}
2005-07-18 23:08:31 +02:00
Merged in trunk updates, including meta_contacts
Merged revisions 4951,4962-4969 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r4951 | nk | 2005-12-30 16:50:36 -0700 (Fri, 30 Dec 2005) | 1 line
fixes in greek transl
........
r4962 | asterix | 2006-01-01 11:41:04 -0700 (Sun, 01 Jan 2006) | 2 lines
merge meta_contacts branch with trunk. Meta contacts are not in gajim yet, but framework is here. We now use gajim.contacts.many_functions() to handle contacts and groupchat_contacts.
........
r4963 | asterix | 2006-01-01 11:43:24 -0700 (Sun, 01 Jan 2006) | 2 lines
correct contacts file
........
r4964 | asterix | 2006-01-01 11:47:26 -0700 (Sun, 01 Jan 2006) | 2 lines
dict.remove() doesn't exists, it's del dict[]
........
r4965 | asterix | 2006-01-01 11:50:15 -0700 (Sun, 01 Jan 2006) | 2 lines
some missing commits from branch
........
r4966 | asterix | 2006-01-01 11:53:30 -0700 (Sun, 01 Jan 2006) | 2 lines
end of gc_contact.nick -> gc_contact.name
........
r4967 | asterix | 2006-01-01 12:05:59 -0700 (Sun, 01 Jan 2006) | 2 lines
new ACE option: send_sha_in_gc_presence that allow to send sha info in groupchat presences
........
r4968 | asterix | 2006-01-01 12:12:36 -0700 (Sun, 01 Jan 2006) | 2 lines
0.9.1-2 in debian that solve the group bug (commit [4924])
........
r4969 | asterix | 2006-01-01 12:31:13 -0700 (Sun, 01 Jan 2006) | 2 lines
typo
........
2006-01-01 21:06:26 +01:00
contacts = Contacts ( )
2005-11-14 11:51:32 +01:00
gc_connected = { } # tell if we are connected to the room or not {acct: {room_jid: True}}
2005-11-13 18:24:08 +01:00
gc_passwords = { } # list of the pass required to enter a room {room_jid: password}
2006-09-14 18:48:03 +02:00
automatic_rooms = { } # list of rooms that must be automaticaly configured and for which we have a list of invities {account: {room_jid: {'invities': []}}}
2009-07-17 09:53:15 +02:00
new_room_nick = None # if it's != None, use this nick instead of asking for a new nickname when there is a conflict.
2005-07-25 22:04:24 +02:00
2005-07-18 23:08:31 +02:00
groups = { } # list of groups
newly_added = { } # list of contacts that has just signed in
to_be_removed = { } # list of contacts that has just signed out
2005-11-23 19:15:24 +01:00
2006-09-14 18:48:03 +02:00
events = Events ( )
2005-07-18 23:08:31 +02:00
nicks = { } # list of our nick names in each account
2006-03-28 01:32:39 +02:00
# should we block 'contact signed in' notifications for this account?
2006-03-28 01:35:46 +02:00
# this is only for the first 30 seconds after we change our show
# to something else than offline
2006-09-14 18:48:03 +02:00
# can also contain account/transport_jid to block notifications for contacts
# from this transport
2006-03-28 01:32:39 +02:00
block_signed_in_notifications = { }
2005-07-18 23:08:31 +02:00
con_types = { } # type of each connection (ssl, tls, tcp, ...)
2005-07-22 01:47:27 +02:00
sleeper_state = { } # whether we pass auto away / xa or not
#'off': don't use sleeper for this account
#'online': online and use sleeper
#'autoaway': autoaway and use sleeper
#'autoxa': autoxa and use sleeper
2005-07-22 23:27:04 +02:00
status_before_autoaway = { }
2005-07-22 02:01:05 +02:00
2007-01-02 12:43:57 +01:00
# jid of transport contacts for which we need to ask avatar when transport will
# be online
transport_avatar = { } # {transport_jid: [jid_list]}
2007-06-03 12:04:20 +02:00
# Is Gnome configured to activate on single click ?
single_click = False
2005-08-16 21:26:11 +02:00
SHOW_LIST = [ ' offline ' , ' connecting ' , ' online ' , ' chat ' , ' away ' , ' xa ' , ' dnd ' ,
2006-12-20 21:40:08 +01:00
' invisible ' , ' error ' ]
2005-07-22 02:01:05 +02:00
2006-09-23 19:05:20 +02:00
# zeroconf account name
2006-09-25 22:14:17 +02:00
ZEROCONF_ACC_NAME = ' Local '
2006-09-23 19:05:20 +02:00
2009-03-16 09:43:13 +01:00
HAVE_ZEROCONF = True
try :
import avahi
except ImportError :
try :
import pybonjour
2009-05-07 13:30:46 +02:00
except Exception : # Linux raises ImportError, Windows raises WindowsError
2009-03-16 09:43:13 +01:00
HAVE_ZEROCONF = False
2007-12-12 09:44:46 +01:00
HAVE_PYCRYPTO = True
try :
import Crypto
except ImportError :
HAVE_PYCRYPTO = False
HAVE_PYSEXY = True
try :
import sexy
except ImportError :
HAVE_PYSEXY = False
2007-12-28 19:49:28 +01:00
HAVE_GPG = True
try :
2008-12-03 22:56:12 +01:00
import GnuPGInterface
2007-12-28 19:49:28 +01:00
except ImportError :
HAVE_GPG = False
else :
2008-04-20 20:40:59 +02:00
from os import system
if system ( ' gpg -h >/dev/null 2>&1 ' ) :
2007-12-28 19:49:28 +01:00
HAVE_GPG = False
2009-01-09 20:55:26 +01:00
import latex
HAVE_LATEX = latex . check_for_latex_support ( )
2009-01-09 19:40:17 +01:00
2009-04-04 07:06:46 +02:00
HAVE_INDICATOR = True
try :
import indicate
except ImportError :
HAVE_INDICATOR = False
2008-04-21 00:58:47 +02:00
gajim_identity = { ' type ' : ' pc ' , ' category ' : ' client ' , ' name ' : ' Gajim ' }
2008-07-29 08:17:35 +02:00
gajim_common_features = [ xmpp . NS_BYTESTREAM , xmpp . NS_SI , xmpp . NS_FILE ,
xmpp . NS_MUC , xmpp . NS_MUC_USER , xmpp . NS_MUC_ADMIN , xmpp . NS_MUC_OWNER ,
xmpp . NS_MUC_CONFIG , xmpp . NS_COMMANDS , xmpp . NS_DISCO_INFO , ' ipv6 ' ,
' jabber:iq:gateway ' , xmpp . NS_LAST , xmpp . NS_PRIVACY , xmpp . NS_PRIVATE ,
xmpp . NS_REGISTER , xmpp . NS_VERSION , xmpp . NS_DATA , xmpp . NS_ENCRYPTED , ' msglog ' ,
2008-11-30 19:53:02 +01:00
' sslc2s ' , ' stringprep ' , xmpp . NS_PING , xmpp . NS_TIME_REVISED , xmpp . NS_SSN ,
2009-09-13 11:02:49 +02:00
xmpp . NS_MOOD , xmpp . NS_ACTIVITY , xmpp . NS_NICK , xmpp . NS_ROSTERX ,
xmpp . NS_JINGLE , xmpp . NS_JINGLE_RTP , xmpp . NS_JINGLE_RTP_AUDIO ,
2009-09-16 22:35:11 +02:00
xmpp . NS_JINGLE_RTP_VIDEO , xmpp . NS_JINGLE_ICE_UDP ]
2008-04-21 00:58:47 +02:00
2008-05-27 12:24:29 +02:00
# Optional features gajim supports per account
gajim_optional_features = { }
# Capabilities hash per account
caps_hash = { }
2008-04-21 00:58:47 +02:00
2005-07-22 16:30:35 +02:00
def get_nick_from_jid ( jid ) :
pos = jid . find ( ' @ ' )
return jid [ : pos ]
2005-09-11 17:02:22 +02:00
def get_server_from_jid ( jid ) :
2005-09-11 19:06:37 +02:00
pos = jid . find ( ' @ ' ) + 1 # after @
2005-09-11 17:02:22 +02:00
return jid [ pos : ]
2005-07-22 16:30:35 +02:00
def get_nick_from_fjid ( jid ) :
# fake jid is the jid for a contact in a room
2005-08-30 00:24:13 +02:00
# gaim@conference.jabber.no/nick/nick-continued
2005-07-22 16:30:35 +02:00
return jid . split ( ' / ' , 1 ) [ 1 ]
2005-12-06 18:43:21 +01:00
2006-10-09 02:27:03 +02:00
def get_name_and_server_from_jid ( jid ) :
name = get_nick_from_jid ( jid )
2005-09-11 17:02:22 +02:00
server = get_server_from_jid ( jid )
2006-10-09 02:27:03 +02:00
return name , server
2005-09-11 17:02:22 +02:00
2005-07-26 09:22:08 +02:00
def get_room_and_nick_from_fjid ( jid ) :
# fake jid is the jid for a contact in a room
2005-08-30 00:24:13 +02:00
# gaim@conference.jabber.no/nick/nick-continued
# return ('gaim@conference.jabber.no', 'nick/nick-continued')
l = jid . split ( ' / ' , 1 )
2005-09-27 00:29:52 +02:00
if len ( l ) == 1 : # No nick
2005-08-30 00:24:13 +02:00
l . append ( ' ' )
2005-08-14 23:02:51 +02:00
return l
2005-11-02 09:12:54 +01:00
def get_real_jid_from_fjid ( account , fjid ) :
2005-11-03 21:48:27 +01:00
''' returns real jid or returns None
2005-11-02 12:06:51 +01:00
if we don ' t know the real jid ' ' '
2005-11-02 09:12:54 +01:00
room_jid , nick = get_room_and_nick_from_fjid ( fjid )
2005-11-02 12:06:51 +01:00
if not nick : # It's not a fake_jid, it is a real jid
2005-11-02 12:13:05 +01:00
return fjid # we return the real jid
2005-11-02 09:12:54 +01:00
real_jid = fjid
2008-05-13 03:59:10 +02:00
if interface . msg_win_mgr . get_gc_control ( room_jid , account ) :
2005-11-02 09:12:54 +01:00
# It's a pm, so if we have real jid it's in contact.jid
2006-01-06 03:20:38 +01:00
gc_contact = contacts . get_gc_contact ( account , room_jid , nick )
if not gc_contact :
2005-11-03 21:48:27 +01:00
return
2006-01-06 03:20:38 +01:00
# gc_contact.jid is None when it's not a real jid (we don't know real jid)
real_jid = gc_contact . jid
2005-11-02 09:12:54 +01:00
return real_jid
2005-09-27 00:29:52 +02:00
def get_room_from_fjid ( jid ) :
return get_room_and_nick_from_fjid ( jid ) [ 0 ]
2005-07-22 16:30:35 +02:00
2005-07-22 02:01:05 +02:00
def get_contact_name_from_jid ( account , jid ) :
2006-01-06 03:20:38 +01:00
c = contacts . get_first_contact_from_jid ( account , jid )
return c . name
2005-12-06 18:43:21 +01:00
2005-07-22 02:34:08 +02:00
def get_jid_without_resource ( jid ) :
return jid . split ( ' / ' ) [ 0 ]
2005-07-22 16:30:35 +02:00
def construct_fjid ( room_jid , nick ) :
''' nick is in utf8 (taken from treeview); room_jid is in unicode '''
2005-08-04 16:30:41 +02:00
# fake jid is the jid for a contact in a room
# gaim@conference.jabber.org/nick
2005-09-11 17:02:22 +02:00
if isinstance ( nick , str ) :
2005-08-04 16:30:41 +02:00
nick = unicode ( nick , ' utf-8 ' )
return room_jid + ' / ' + nick
2005-12-06 18:43:21 +01:00
2005-07-22 16:30:35 +02:00
def get_resource_from_jid ( jid ) :
2005-10-07 15:45:58 +02:00
jids = jid . split ( ' / ' , 1 )
if len ( jids ) > 1 :
return jids [ 1 ] # abc@doremi.org/res/res-continued
else :
return ' '
2008-12-02 15:09:18 +01:00
# [15:34:28] <asterix> we should add contact.fake_jid I think
# [15:34:46] <asterix> so if we know real jid, it wil be in contact.jid, or we look in contact.fake_jid
# [15:32:54] <asterix> they can have resource if we know the real jid
# [15:33:07] <asterix> and that resource is in contact.resource
2005-08-03 15:46:48 +02:00
def get_number_of_accounts ( ) :
2006-04-08 12:28:53 +02:00
''' returns the number of ALL accounts '''
2005-08-03 15:46:48 +02:00
return len ( connections . keys ( ) )
2005-08-26 15:11:20 +02:00
2006-04-08 12:28:53 +02:00
def get_number_of_connected_accounts ( accounts_list = None ) :
''' returns the number of CONNECTED accounts
you can optionally pass an accounts_list
and if you do those will be checked , else all will be checked '''
connected_accounts = 0
if accounts_list is None :
accounts = connections . keys ( )
else :
accounts = accounts_list
2006-10-04 02:10:49 +02:00
for account in accounts :
if account_is_connected ( account ) :
2006-04-08 12:28:53 +02:00
connected_accounts = connected_accounts + 1
return connected_accounts
2006-10-04 02:10:49 +02:00
def account_is_connected ( account ) :
if account not in connections :
return False
if connections [ account ] . connected > 1 : # 0 is offline, 1 is connecting
return True
else :
return False
def account_is_disconnected ( account ) :
return not account_is_connected ( account )
2008-06-13 04:18:16 +02:00
def zeroconf_is_connected ( ) :
return account_is_connected ( ZEROCONF_ACC_NAME ) and \
config . get_per ( ' accounts ' , ZEROCONF_ACC_NAME , ' is_zeroconf ' )
2006-10-04 02:10:49 +02:00
def get_number_of_securely_connected_accounts ( ) :
''' returns the number of the accounts that are SSL/TLS connected '''
num_of_secured = 0
2008-01-23 17:10:28 +01:00
for account in connections . keys ( ) :
2006-10-04 02:10:49 +02:00
if account_is_securely_connected ( account ) :
num_of_secured + = 1
return num_of_secured
def account_is_securely_connected ( account ) :
2008-01-23 17:10:28 +01:00
if account_is_connected ( account ) and \
account in con_types and con_types [ account ] in ( ' tls ' , ' ssl ' ) :
2006-10-04 02:10:49 +02:00
return True
else :
return False
2005-08-26 15:15:16 +02:00
def get_transport_name_from_jid ( jid , use_config_setting = True ) :
Merged revisions 4987-4989,4991-4996,4999,5003 via svnmerge from
svn://svn.gajim.org/gajim/trunk
........
r4987 | nk | 2006-01-03 04:00:51 -0700 (Tue, 03 Jan 2006) | 1 line
commit 48x48 transport online/offline imgs by Grenshad (I pngcrushed them)
........
r4988 | nk | 2006-01-03 04:32:01 -0700 (Tue, 03 Jan 2006) | 1 line
icon in notification window not always jabber now. MSN if he uses msn etc. thanks stian barmen for helping me test
........
r4989 | nk | 2006-01-03 04:40:44 -0700 (Tue, 03 Jan 2006) | 1 line
all strings I got report about them, are not translatable; pot/po update
........
r4991 | asterix | 2006-01-03 08:08:21 -0700 (Tue, 03 Jan 2006) | 2 lines
don't remove the jid entry in _contacts[account] when we remove a contact
........
r4992 | asterix | 2006-01-03 08:18:30 -0700 (Tue, 03 Jan 2006) | 2 lines
fix logic
........
r4993 | asterix | 2006-01-03 09:04:14 -0700 (Tue, 03 Jan 2006) | 2 lines
a GC_Contact can have a resource if we knoe his real JID
........
r4994 | asterix | 2006-01-03 09:32:58 -0700 (Tue, 03 Jan 2006) | 2 lines
missing argument in create_gc_contact
........
r4995 | asterix | 2006-01-03 10:36:41 -0700 (Tue, 03 Jan 2006) | 2 lines
we save gc_contact vcard instance in instances[self.account]['infos'][Fake_jid]
........
r4996 | asterix | 2006-01-03 11:17:43 -0700 (Tue, 03 Jan 2006) | 2 lines
in DataForm, a field of type 'list-single' can have no <value> element. Create a default one in such a case to prevent TB
........
r4999 | asterix | 2006-01-04 05:52:26 -0700 (Wed, 04 Jan 2006) | 2 lines
prevent TB when we move a contact that was in no group
........
r5003 | asterix | 2006-01-04 09:03:42 -0700 (Wed, 04 Jan 2006) | 2 lines
handle correctly unlabeled option values in DataForms
........
2006-01-05 04:17:36 +01:00
''' returns ' aim ' , ' gg ' , ' irc ' etc
if JID is not from transport returns None '''
2005-08-26 16:44:46 +02:00
#FIXME: jid can be None! one TB I saw had this problem:
# in the code block # it is a groupchat presence in handle_event_notify
# jid was None. Yann why?
if not jid or ( use_config_setting and not config . get ( ' use_transports_iconsets ' ) ) :
2005-08-26 15:11:20 +02:00
return
2006-09-14 18:48:03 +02:00
2006-01-22 00:40:54 +01:00
host = get_server_from_jid ( jid )
2006-09-14 18:48:03 +02:00
if host in transport_type :
return transport_type [ host ]
2006-01-22 00:40:54 +01:00
# host is now f.e. icq.foo.org or just icq (sometimes on hacky transports)
host_splitted = host . split ( ' . ' )
if len ( host_splitted ) != 0 :
# now we support both 'icq.' and 'icq' but not icqsucks.org
host = host_splitted [ 0 ]
2008-07-10 14:18:26 +02:00
if host in ( ' aim ' , ' irc ' , ' icq ' , ' msn ' , ' sms ' , ' tlen ' , ' weather ' , ' yahoo ' ,
2009-06-27 09:50:50 +02:00
' mrim ' , ' facebook ' ) :
2006-11-26 13:56:44 +01:00
return host
2006-01-22 00:40:54 +01:00
elif host == ' gg ' :
2006-09-14 18:48:03 +02:00
return ' gadu-gadu '
2006-02-24 14:07:44 +01:00
elif host == ' jit ' :
return ' icq '
2009-06-27 09:50:50 +02:00
elif host == ' facebook ' :
return ' facebook '
2005-10-24 16:32:13 +02:00
else :
return None
2005-08-26 15:11:20 +02:00
def jid_is_transport ( jid ) :
2006-03-28 13:32:53 +02:00
# if not '@' or '@' starts the jid then it is transport
if jid . find ( ' @ ' ) < = 0 :
return True
2006-05-01 15:26:07 +02:00
return False
2005-09-09 22:52:29 +02:00
def get_jid_from_account ( account_name ) :
2006-02-26 15:13:13 +01:00
''' return the jid we use in the given account '''
2005-09-09 22:52:29 +02:00
name = config . get_per ( ' accounts ' , account_name , ' name ' )
2005-09-09 23:03:53 +02:00
hostname = config . get_per ( ' accounts ' , account_name , ' hostname ' )
2005-09-09 22:52:29 +02:00
jid = name + ' @ ' + hostname
return jid
2005-09-11 02:32:58 +02:00
2006-02-26 15:13:13 +01:00
def get_our_jids ( ) :
''' returns a list of the jids we use in our accounts '''
our_jids = list ( )
for account in contacts . get_accounts ( ) :
our_jids . append ( get_jid_from_account ( account ) )
return our_jids
2005-11-20 14:27:37 +01:00
def get_hostname_from_account ( account_name , use_srv = False ) :
2005-09-11 02:32:58 +02:00
''' returns hostname (if custom hostname is used, that is returned) '''
2005-11-20 14:27:37 +01:00
if use_srv and connections [ account_name ] . connected_hostname :
return connections [ account_name ] . connected_hostname
2005-09-12 08:27:20 +02:00
if config . get_per ( ' accounts ' , account_name , ' use_custom_host ' ) :
return config . get_per ( ' accounts ' , account_name , ' custom_host ' )
return config . get_per ( ' accounts ' , account_name , ' hostname ' )
2005-10-18 11:07:52 +02:00
2006-01-20 18:40:45 +01:00
def get_notification_image_prefix ( jid ) :
''' returns the prefix for the notification images '''
transport_name = get_transport_name_from_jid ( jid )
2009-06-27 09:50:50 +02:00
if transport_name in ( ' aim ' , ' icq ' , ' msn ' , ' yahoo ' , ' facebook ' ) :
2006-01-20 18:40:45 +01:00
prefix = transport_name
else :
prefix = ' jabber '
return prefix
2006-01-20 18:50:01 +01:00
def get_name_from_jid ( account , jid ) :
''' returns from JID ' s shown name and if no contact returns jids '''
contact = contacts . get_first_contact_from_jid ( account , jid )
if contact :
actor = contact . get_shown_name ( )
else :
actor = jid
return actor
2006-10-04 02:10:49 +02:00
def get_priority ( account , show ) :
''' return the priority an account must have '''
if not show :
show = ' online '
2006-10-09 02:27:03 +02:00
if show in ( ' online ' , ' chat ' , ' away ' , ' xa ' , ' dnd ' , ' invisible ' ) and \
config . get_per ( ' accounts ' , account , ' adjust_priority_with_status ' ) :
return config . get_per ( ' accounts ' , account , ' autopriority_ ' + show )
2006-10-04 02:10:49 +02:00
return config . get_per ( ' accounts ' , account , ' priority ' )
2008-07-29 21:49:31 +02:00
2008-08-06 22:19:16 +02:00
# vim: se ts=3: