Accounts presence reflect its status (ie. disabled, in error, ...)
darcs-hash:20071008062636-86b55-3e3745c1f162a7de630beb913a8aec38b677436b.gz
This commit is contained in:
@@ -82,8 +82,13 @@ class AccountPresenceHandler(Handler):
|
||||
|
||||
class AccountPresenceAvailableHandler(AccountPresenceHandler):
|
||||
def get_account_presence(self, stanza, lang_class, _account):
|
||||
show_status = account.ONLINE
|
||||
if _account.in_error:
|
||||
show_status = account.DND
|
||||
elif not _account.enabled:
|
||||
show_status = account.XA
|
||||
return self.component.account_manager.send_presence_available(_account,
|
||||
stanza.get_show(),
|
||||
show_status,
|
||||
lang_class)
|
||||
|
||||
class RootPresenceHandler(AccountPresenceHandler):
|
||||
@@ -109,7 +114,7 @@ class RootPresenceAvailableHandler(RootPresenceHandler, AccountPresenceAvailable
|
||||
from_jid = stanza.get_from()
|
||||
result = self.component.account_manager.send_root_presence(from_jid,
|
||||
"available",
|
||||
stanza.get_show(),
|
||||
"online",
|
||||
str(nb_accounts) +
|
||||
lang_class.message_status)
|
||||
user = account.get_user(unicode(from_jid.bare()))
|
||||
|
||||
@@ -31,7 +31,7 @@ from pyxmpp.message import Message
|
||||
from jcl.jabber.component import JCLComponent
|
||||
from jcl.jabber.presence import DefaultSubscribeHandler, \
|
||||
DefaultUnsubscribeHandler, DefaultPresenceHandler, \
|
||||
RootPresenceAvailableHandler
|
||||
RootPresenceAvailableHandler, AccountPresenceAvailableHandler
|
||||
from jcl.model.account import User, LegacyJID, Account
|
||||
from jcl.lang import Lang
|
||||
|
||||
@@ -179,6 +179,87 @@ class RootPresenceAvailableHandler_TestCase(JCLTestCase):
|
||||
self.assertTrue(isinstance(result[0], Presence))
|
||||
self.assertEquals(result[0].get_to(), "user1@test.com")
|
||||
self.assertEquals(result[0].get_from(), "jcl.test.com")
|
||||
self.assertEquals(result[0].get_show(), "online")
|
||||
self.assertEquals(result[0].get_status(), "2" + Lang.en.message_status)
|
||||
|
||||
class AccountPresenceAvailableHandler_TestCase(JCLTestCase):
|
||||
def setUp(self):
|
||||
JCLTestCase.setUp(self, tables=[User, LegacyJID, Account])
|
||||
self.config = ConfigParser()
|
||||
self.config_file = tempfile.mktemp(".conf", "jcltest", "/tmp")
|
||||
self.config.read(self.config_file)
|
||||
self.config.add_section("component")
|
||||
self.config.set("component", "motd", "Message Of The Day")
|
||||
self.comp = JCLComponent("jcl.test.com",
|
||||
"password",
|
||||
"localhost",
|
||||
"5347",
|
||||
self.config)
|
||||
self.handler = AccountPresenceAvailableHandler(self.comp)
|
||||
|
||||
def tearDown(self):
|
||||
JCLTestCase.tearDown(self)
|
||||
if os.path.exists(self.config_file):
|
||||
os.unlink(self.config_file)
|
||||
|
||||
def test_get_account_presence(self):
|
||||
user1 = User(jid="user1@test.com")
|
||||
account11 = Account(user=user1,
|
||||
name="account11",
|
||||
jid="account11@jcl.test.com")
|
||||
account12 = Account(user=user1,
|
||||
name="account12",
|
||||
jid="account12@jcl.test.com")
|
||||
presence = Presence(stanza_type="available",
|
||||
from_jid="user1@test.com",
|
||||
to_jid="account11@jcl.test.com")
|
||||
result = self.handler.get_account_presence(presence, Lang.en, account11)
|
||||
self.assertEquals(len(result), 1)
|
||||
self.assertTrue(isinstance(result[0], Presence))
|
||||
self.assertEquals(result[0].get_to(), "user1@test.com")
|
||||
self.assertEquals(result[0].get_from(), "account11@jcl.test.com")
|
||||
self.assertEquals(result[0].get_show(), "online")
|
||||
self.assertEquals(result[0].get_status(), "account11")
|
||||
|
||||
def test_get_disabled_account_presence(self):
|
||||
user1 = User(jid="user1@test.com")
|
||||
account11 = Account(user=user1,
|
||||
name="account11",
|
||||
jid="account11@jcl.test.com")
|
||||
account11.enabled = False
|
||||
account12 = Account(user=user1,
|
||||
name="account12",
|
||||
jid="account12@jcl.test.com")
|
||||
presence = Presence(stanza_type="available",
|
||||
from_jid="user1@test.com",
|
||||
to_jid="account11@jcl.test.com")
|
||||
result = self.handler.get_account_presence(presence, Lang.en, account11)
|
||||
self.assertEquals(len(result), 1)
|
||||
self.assertTrue(isinstance(result[0], Presence))
|
||||
self.assertEquals(result[0].get_to(), "user1@test.com")
|
||||
self.assertEquals(result[0].get_from(), "account11@jcl.test.com")
|
||||
self.assertEquals(result[0].get_show(), "xa")
|
||||
self.assertEquals(result[0].get_status(), Lang.en.account_disabled)
|
||||
|
||||
def test_get_inerror_account_presence(self):
|
||||
user1 = User(jid="user1@test.com")
|
||||
account11 = Account(user=user1,
|
||||
name="account11",
|
||||
jid="account11@jcl.test.com")
|
||||
account11.in_error = True
|
||||
account12 = Account(user=user1,
|
||||
name="account12",
|
||||
jid="account12@jcl.test.com")
|
||||
presence = Presence(stanza_type="available",
|
||||
from_jid="user1@test.com",
|
||||
to_jid="account11@jcl.test.com")
|
||||
result = self.handler.get_account_presence(presence, Lang.en, account11)
|
||||
self.assertEquals(len(result), 1)
|
||||
self.assertTrue(isinstance(result[0], Presence))
|
||||
self.assertEquals(result[0].get_to(), "user1@test.com")
|
||||
self.assertEquals(result[0].get_from(), "account11@jcl.test.com")
|
||||
self.assertEquals(result[0].get_show(), "dnd")
|
||||
self.assertEquals(result[0].get_status(), Lang.en.account_error)
|
||||
|
||||
def suite():
|
||||
test_suite = unittest.TestSuite()
|
||||
@@ -186,6 +267,7 @@ def suite():
|
||||
test_suite.addTest(unittest.makeSuite(DefaultUnsubscribeHandler_TestCase, 'test'))
|
||||
test_suite.addTest(unittest.makeSuite(DefaultPresenceHandler_TestCase, 'test'))
|
||||
test_suite.addTest(unittest.makeSuite(RootPresenceAvailableHandler_TestCase, 'test'))
|
||||
test_suite.addTest(unittest.makeSuite(AccountPresenceAvailableHandler_TestCase, 'test'))
|
||||
return test_suite
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
@@ -234,6 +234,9 @@ class Lang:
|
||||
|
||||
welcome_message_subject = u"Welcome"
|
||||
|
||||
account_disabled = u"This account is disabled"
|
||||
account_error = u"This account has an error"
|
||||
|
||||
class fr:
|
||||
component_name = u"composant générique Jabber Component Library"
|
||||
register_title = u"Enregistrement d'un nouveau compte"
|
||||
@@ -413,6 +416,9 @@ class Lang:
|
||||
|
||||
welcome_message_subject = u"Bienvenue"
|
||||
|
||||
account_disabled = u"Ce compte est désactivé"
|
||||
account_error = u"Ce compte est en erreur"
|
||||
|
||||
class nl:
|
||||
# TODO: when finish, delete this line and uncomment in tests/lang.py the makeSuite(Language_nl_TestCase, 'test') line
|
||||
register_title = u"Registratie van verbindingen voor Jabber Mail"
|
||||
|
||||
@@ -39,6 +39,8 @@ import jcl.model as model
|
||||
|
||||
OFFLINE = "offline"
|
||||
ONLINE = "online"
|
||||
DND = "dnd"
|
||||
XA = "xa"
|
||||
|
||||
def default_post_func(field_value, default_func, bare_from_jid):
|
||||
"""Default post process function: do nothing"""
|
||||
@@ -109,12 +111,36 @@ class Account(InheritableSQLObject):
|
||||
|
||||
long_name = property(get_long_name)
|
||||
|
||||
def get_status_msg(self):
|
||||
def get_status_msg(self, lang_class=Lang.en):
|
||||
"""Return current status"""
|
||||
mapping = {"online": self.get_online_status_msg,
|
||||
"chat": self.get_chat_status_msg,
|
||||
"away": self.get_away_status_msg,
|
||||
"xa": self.get_xa_status_msg,
|
||||
"dnd": self.get_dnd_status_msg,
|
||||
"offline": self.get_offline_status_msg}
|
||||
if mapping.has_key(self.status):
|
||||
return mapping[self.status](lang_class)
|
||||
return self.name
|
||||
|
||||
status_msg = property(get_status_msg)
|
||||
|
||||
def get_default_status_msg(self, lang_class):
|
||||
return self.name
|
||||
|
||||
def get_disabled_status_msg(self, lang_class):
|
||||
return lang_class.account_disabled
|
||||
|
||||
def get_error_status_msg(self, lang_class):
|
||||
return lang_class.account_error
|
||||
|
||||
get_online_status_msg = get_default_status_msg
|
||||
get_chat_status_msg = get_default_status_msg
|
||||
get_away_status_msg = get_default_status_msg
|
||||
get_xa_status_msg = get_disabled_status_msg
|
||||
get_dnd_status_msg = get_error_status_msg
|
||||
get_offline_status_msg = get_default_status_msg
|
||||
|
||||
def get_status(self):
|
||||
"""Return current Jabber status"""
|
||||
return self._status
|
||||
|
||||
@@ -236,6 +236,9 @@ class Language_TestCase(unittest.TestCase):
|
||||
|
||||
self.assertNotEquals(self.lang_class.welcome_message_subject, None)
|
||||
|
||||
self.assertNotEquals(self.lang_class.account_disabled, None)
|
||||
self.assertNotEquals(self.lang_class.account_error, None)
|
||||
|
||||
class Language_fr_TestCase(Language_TestCase):
|
||||
def setUp(self):
|
||||
self.lang_class = Lang.fr
|
||||
|
||||
Reference in New Issue
Block a user