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
##
2012-01-11 22:20:34 +01:00
## Copyright (C) 2003-2012 Yann Leboulanger <asterix AT lagaule.org>
2008-08-15 05:20:23 +02:00
## 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
2008-04-21 00:58:47 +02:00
import xmpp
2010-10-18 22:05:41 +02:00
import defs
import common . ged
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
2010-10-18 22:05:41 +02:00
ged = common . ged . GlobalEventsDispatcher ( ) # Global Events Dispatcher
2008-08-18 18:35:14 +02:00
nec = None # Network Events Controller
plugin_manager = None # Plugins Manager
2010-01-19 21:32:45 +01: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
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 ' ]
2009-12-28 23:04:23 +01:00
MY_CACERTS = gajimpaths [ ' MY_CACERTS ' ]
2010-08-11 08:46:53 +02:00
MY_PEER_CERTS_PATH = gajimpaths [ ' MY_PEER_CERTS ' ]
2006-11-04 19:15:38 +01:00
TMP = gajimpaths [ ' TMP ' ]
DATA_DIR = gajimpaths [ ' DATA ' ]
2009-11-27 16:42:32 +01:00
ICONS_DIR = gajimpaths [ ' ICONS ' ]
2006-11-04 19:15:38 +01:00
HOME_DIR = gajimpaths [ ' HOME ' ]
2008-06-02 01:33:51 +02:00
PLUGINS_DIRS = [ gajimpaths [ ' PLUGINS_BASE ' ] ,
2010-07-19 19:53:29 +02:00
gajimpaths [ ' PLUGINS_USER ' ] ]
2008-07-29 21:09:28 +02:00
PLUGINS_CONFIG_DIR = gajimpaths [ ' PLUGINS_CONFIG_DIR ' ]
2010-08-11 08:46:53 +02:00
MY_CERT_DIR = gajimpaths [ ' MY_CERT ' ]
2006-02-10 14:03:32 +01:00
2006-04-22 10:53:01 +02:00
try :
2010-02-08 15:08:40 +01:00
LANG = locale . getdefaultlocale ( ) [ 0 ] # en_US, fr_FR, el_GR etc..
2006-04-22 10:53:01 +02:00
except ( ValueError , locale . Error ) :
2010-02-08 15:08:40 +01:00
# unknown locale, use en is better than fail
LANG = None
2006-02-10 14:18:33 +01:00
if LANG is None :
2010-02-08 15:08:40 +01:00
LANG = ' en '
2006-02-10 14:18:33 +01:00
else :
2010-02-08 15:08:40 +01:00
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
2009-12-01 23:31:17 +01:00
from contacts import LegacyContactsAPI
2009-10-27 20:31:09 +01:00
from events import Events
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
2010-02-08 15:08:40 +01:00
# {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
2009-12-01 23:31:17 +01:00
contacts = LegacyContactsAPI ( )
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 ( )
2011-05-04 14:02:38 +02:00
notification = None
2011-05-01 22:09:50 +02:00
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 ' ,
2010-02-08 15:08:40 +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 :
2010-12-18 09:11:58 +01:00
__import__ ( ' avahi ' )
2009-03-16 09:43:13 +01:00
except ImportError :
2010-02-08 15:08:40 +01:00
try :
2010-12-18 09:11:58 +01:00
__import__ ( ' pybonjour ' )
2010-02-08 15:08:40 +01:00
except Exception : # Linux raises ImportError, Windows raises WindowsError
HAVE_ZEROCONF = False
2009-03-16 09:43:13 +01:00
2007-12-12 09:44:46 +01:00
HAVE_PYCRYPTO = True
try :
2010-12-18 09:11:58 +01:00
__import__ ( ' Crypto ' )
2007-12-12 09:44:46 +01:00
except ImportError :
2010-02-08 15:08:40 +01:00
HAVE_PYCRYPTO = False
2007-12-12 09:44:46 +01:00
2007-12-28 19:49:28 +01:00
HAVE_GPG = True
try :
2010-12-18 09:11:58 +01:00
__import__ ( ' gnupg ' , globals ( ) , locals ( ) , [ ] , - 1 )
2007-12-28 19:49:28 +01:00
except ImportError :
2010-02-08 15:08:40 +01:00
HAVE_GPG = False
2007-12-28 19:49:28 +01:00
else :
2011-08-31 11:25:47 +02:00
import os
2011-12-17 18:07:56 +01:00
import subprocess
2011-08-31 11:25:47 +02:00
if os . name == ' nt ' :
2011-08-31 14:38:26 +02:00
gpg_cmd = ' gpg -h >nul 2>&1 '
2011-08-31 11:25:47 +02:00
else :
gpg_cmd = ' gpg -h >/dev/null 2>&1 '
2011-12-17 18:07:56 +01:00
if subprocess . call ( gpg_cmd , shell = True ) :
2010-02-08 15:08:40 +01:00
HAVE_GPG = False
2007-12-28 19:49:28 +01:00
2012-04-01 19:49:52 +02:00
HAVE_FARSTREAM = True
2009-09-20 20:46:03 +02:00
try :
2012-04-01 19:49:52 +02:00
farstream = __import__ ( ' farstream ' )
2011-06-22 20:29:15 +02:00
import gst
import glib
try :
conference = gst . element_factory_make ( ' fsrtpconference ' )
2012-04-01 19:49:52 +02:00
session = conference . new_session ( farstream . MEDIA_TYPE_AUDIO )
2011-06-22 20:29:15 +02:00
del session
del conference
except glib . GError :
2012-04-01 19:49:52 +02:00
HAVE_FARSTREAM = False
2011-06-22 20:29:15 +02:00
2009-09-20 20:46:03 +02:00
except ImportError :
2012-04-01 19:49:52 +02:00
HAVE_FARSTREAM = False
2011-08-24 11:04:31 +02:00
HAVE_UPNP_IGD = True
try :
import gupnp . igd
gupnp_igd = gupnp . igd . Simple ( )
except ImportError :
HAVE_UPNP_IGD = False
2011-11-13 15:10:38 +01:00
HAVE_PYCURL = True
try :
__import__ ( ' pycurl ' )
except ImportError :
HAVE_PYCURL = False
2011-08-24 11:04:31 +02:00
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 ,
2010-02-08 15:08:40 +01:00
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 ' ,
' sslc2s ' , ' stringprep ' , xmpp . NS_PING , xmpp . NS_TIME_REVISED , xmpp . NS_SSN ,
2012-01-16 01:37:00 +01:00
xmpp . NS_MOOD , xmpp . NS_ACTIVITY , xmpp . NS_NICK , xmpp . NS_ROSTERX , xmpp . NS_SECLABEL ,
xmpp . NS_HASHES , xmpp . NS_HASHES_MD5 , xmpp . NS_HASHES_SHA1 ,
xmpp . NS_HASHES_SHA256 , xmpp . NS_HASHES_SHA512 ]
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
2009-12-10 20:06:46 +01:00
import caps_cache
caps_cache . initialize ( logger )
2009-10-30 23:01:25 +01:00
2005-07-22 16:30:35 +02:00
def get_nick_from_jid ( jid ) :
2010-02-08 15:08:40 +01:00
pos = jid . find ( ' @ ' )
return jid [ : pos ]
2005-07-22 16:30:35 +02:00
2005-09-11 17:02:22 +02:00
def get_server_from_jid ( jid ) :
2010-02-08 15:08:40 +01:00
pos = jid . find ( ' @ ' ) + 1 # after @
return jid [ pos : ]
2005-09-11 17:02:22 +02:00
2006-10-09 02:27:03 +02:00
def get_name_and_server_from_jid ( jid ) :
2010-02-08 15:08:40 +01:00
name = get_nick_from_jid ( jid )
server = get_server_from_jid ( jid )
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 ) :
2010-02-08 15:08:40 +01:00
# fake jid is the jid for a contact in a room
# gaim@conference.jabber.no/nick/nick-continued
# return ('gaim@conference.jabber.no', 'nick/nick-continued')
l = jid . split ( ' / ' , 1 )
if len ( l ) == 1 : # No nick
l . append ( ' ' )
return l
2005-11-02 09:12:54 +01:00
def get_real_jid_from_fjid ( account , fjid ) :
2010-02-08 15:08:40 +01:00
"""
Return real jid or returns None , if we don ' t know the real jid
"""
room_jid , nick = get_room_and_nick_from_fjid ( fjid )
if not nick : # It's not a fake_jid, it is a real jid
return fjid # we return the real jid
real_jid = fjid
if interface . msg_win_mgr . get_gc_control ( room_jid , account ) :
# It's a pm, so if we have real jid it's in contact.jid
gc_contact = contacts . get_gc_contact ( account , room_jid , nick )
if not gc_contact :
return
# gc_contact.jid is None when it's not a real jid (we don't know real jid)
real_jid = gc_contact . jid
return real_jid
2005-11-02 09:12:54 +01:00
2005-09-27 00:29:52 +02:00
def get_room_from_fjid ( jid ) :
2010-02-08 15:08:40 +01:00
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 ) :
2010-02-08 15:08:40 +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 ) :
2010-02-08 15:08:40 +01:00
return jid . split ( ' / ' ) [ 0 ]
2005-07-22 16:30:35 +02:00
def construct_fjid ( room_jid , nick ) :
2010-02-08 15:08:40 +01:00
"""
Nick is in UTF - 8 ( taken from treeview ) ; room_jid is in unicode
"""
# fake jid is the jid for a contact in a room
# gaim@conference.jabber.org/nick
if isinstance ( nick , str ) :
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 ) :
2010-02-08 15:08:40 +01: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
2005-08-03 15:46:48 +02:00
def get_number_of_accounts ( ) :
2010-02-08 15:08:40 +01:00
"""
Return the number of ALL accounts
"""
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 ) :
2010-02-08 15:08:40 +01:00
"""
Returns the number of CONNECTED accounts . Uou 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
for account in accounts :
if account_is_connected ( account ) :
connected_accounts = connected_accounts + 1
return connected_accounts
2006-04-08 12:28:53 +02:00
2006-10-04 02:10:49 +02:00
def account_is_connected ( account ) :
2010-02-08 15:08:40 +01:00
if account not in connections :
return False
if connections [ account ] . connected > 1 : # 0 is offline, 1 is connecting
return True
else :
return False
2006-10-04 02:10:49 +02:00
def account_is_disconnected ( account ) :
2010-02-08 15:08:40 +01:00
return not account_is_connected ( account )
2006-10-04 02:10:49 +02:00
2008-06-13 04:18:16 +02:00
def zeroconf_is_connected ( ) :
2010-02-08 15:08:40 +01:00
return account_is_connected ( ZEROCONF_ACC_NAME ) and \
config . get_per ( ' accounts ' , ZEROCONF_ACC_NAME , ' is_zeroconf ' )
2008-06-13 04:18:16 +02:00
2006-10-04 02:10:49 +02:00
def get_number_of_securely_connected_accounts ( ) :
2010-02-08 15:08:40 +01:00
"""
Return the number of the accounts that are SSL / TLS connected
"""
num_of_secured = 0
for account in connections . keys ( ) :
if account_is_securely_connected ( account ) :
num_of_secured + = 1
return num_of_secured
2006-10-04 02:10:49 +02:00
def account_is_securely_connected ( account ) :
2010-02-08 15:08:40 +01:00
if account_is_connected ( account ) and \
account in con_types and con_types [ account ] in ( ' tls ' , ' ssl ' ) :
return True
else :
return False
2006-10-04 02:10:49 +02:00
2005-08-26 15:15:16 +02:00
def get_transport_name_from_jid ( jid , use_config_setting = True ) :
2010-02-08 15:08:40 +01:00
"""
Returns ' aim ' , ' gg ' , ' irc ' etc
If JID is not from transport returns None .
"""
#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 ' ) ) :
return
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_splitted = host . split ( ' . ' )
if len ( host_splitted ) != 0 :
# now we support both 'icq.' and 'icq' but not icqsucks.org
host = host_splitted [ 0 ]
if host in ( ' aim ' , ' irc ' , ' icq ' , ' msn ' , ' sms ' , ' tlen ' , ' weather ' , ' yahoo ' ,
' mrim ' , ' facebook ' ) :
return host
elif host == ' gg ' :
return ' gadu-gadu '
elif host == ' jit ' :
return ' icq '
elif host == ' facebook ' :
return ' facebook '
else :
return None
2005-08-26 15:11:20 +02:00
def jid_is_transport ( jid ) :
2010-02-08 15:08:40 +01:00
# if not '@' or '@' starts the jid then it is transport
if jid . find ( ' @ ' ) < = 0 :
return True
return False
2005-09-09 22:52:29 +02:00
def get_jid_from_account ( account_name ) :
2010-02-08 15:08:40 +01:00
"""
Return the jid we use in the given account
"""
name = config . get_per ( ' accounts ' , account_name , ' name ' )
hostname = config . get_per ( ' accounts ' , account_name , ' hostname ' )
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 ( ) :
2010-02-08 15:08:40 +01:00
"""
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
2006-02-26 15:13:13 +01:00
2005-11-20 14:27:37 +01:00
def get_hostname_from_account ( account_name , use_srv = False ) :
2010-02-08 15:08:40 +01:00
"""
Returns hostname ( if custom hostname is used , that is returned )
"""
if use_srv and connections [ account_name ] . connected_hostname :
return connections [ account_name ] . connected_hostname
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 ) :
2010-02-08 15:08:40 +01:00
"""
Returns the prefix for the notification images
"""
transport_name = get_transport_name_from_jid ( jid )
if transport_name in ( ' aim ' , ' icq ' , ' msn ' , ' yahoo ' , ' facebook ' ) :
prefix = transport_name
else :
prefix = ' jabber '
return prefix
2006-01-20 18:40:45 +01:00
2006-01-20 18:50:01 +01:00
def get_name_from_jid ( account , jid ) :
2010-02-08 15:08:40 +01:00
"""
Return 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 ) :
2010-02-08 15:08:40 +01:00
"""
Return the priority an account must have
"""
if not show :
show = ' online '
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 )
return config . get_per ( ' accounts ' , account , ' priority ' )