Move message format from Feeder to Sender class

darcs-hash:20070515154957-86b55-3ad909492a4251f2f9620ee30818bd038babc986.gz
This commit is contained in:
David Rousselie
2007-05-15 17:49:57 +02:00
parent 0f95cc4678
commit 1ff9c4c1f7
3 changed files with 60 additions and 64 deletions

View File

@@ -17,6 +17,6 @@
<spooldir>./spool/jabber</spooldir> <spooldir>./spool/jabber</spooldir>
<pidfile>./run/jabber/jmc.pid</pidfile> <pidfile>./run/jabber/jmc.pid</pidfile>
<!-- default check interval in minutes --> <!-- default check interval in minutes -->
<check_interval>5</check_interval> <check_interval>1</check_interval>
<mail_default_encoding>iso-8859-1</mail_default_encoding> <mail_default_encoding>iso-8859-1</mail_default_encoding>
</config> </config>

View File

@@ -26,7 +26,7 @@ import logging
from pyxmpp.message import Message from pyxmpp.message import Message
from jcl.model.account import PresenceAccount from jcl.model.account import PresenceAccount
from jcl.jabber.feeder import FeederComponent, Feeder, Sender from jcl.jabber.feeder import FeederComponent, Feeder, MessageSender, HeadlineSender
from jmc.model.account import MailAccount, IMAPAccount, POP3Account from jmc.model.account import MailAccount, IMAPAccount, POP3Account
from jmc.lang import Lang from jmc.lang import Lang
@@ -68,19 +68,18 @@ class MailFeeder(Feeder):
"""For live email checking account, mark emails received while """For live email checking account, mark emails received while
offline as read. offline as read.
Return a boolean to continue mail checking or not (if waiting for password)""" Return a boolean to continue mail checking or not (if waiting for password)"""
result = []
if _account.password is None: if _account.password is None:
if not _account.waiting_password_reply: if not _account.waiting_password_reply:
result.extend(self.component.account_manager.ask_password(_account, \ self.component.send_stanzas(self.component.account_manager.ask_password(_account, \
_account.default_lang_class)) _account.default_lang_class))
return (False, result) return False
try: try:
_account.connect() _account.connect()
_account.mark_all_as_read() _account.mark_all_as_read()
_account.disconnect() _account.disconnect()
_account.first_check = False _account.first_check = False
_account.in_error = False _account.in_error = False
return (True, result) return True
except Exception, e: except Exception, e:
if _account.connected: if _account.connected:
try: try:
@@ -88,8 +87,8 @@ class MailFeeder(Feeder):
except: except:
# We have done everything we could # We have done everything we could
_account.connected = False _account.connected = False
result.extend(self.component.account_manager.send_error(_account, e)) self.component.send_error(_account, e)
return (False, result) return False
def feed(self, _account): def feed(self, _account):
"""Check for new emails for given MailAccount and return a list of """Check for new emails for given MailAccount and return a list of
@@ -97,8 +96,7 @@ class MailFeeder(Feeder):
self.__logger.debug("MailFeeder.feed") self.__logger.debug("MailFeeder.feed")
result = [] result = []
if _account.first_check and _account.live_email_only: if _account.first_check and _account.live_email_only:
(continue_checking, to_send) = self.initialize_live_email(_account) continue_checking = self.initialize_live_email(_account)
result.extend(to_send)
if not continue_checking: if not continue_checking:
return result return result
_account.lastcheck += 1 _account.lastcheck += 1
@@ -108,8 +106,8 @@ class MailFeeder(Feeder):
if action != PresenceAccount.DO_NOTHING: if action != PresenceAccount.DO_NOTHING:
try: try:
if _account.password is None: if _account.password is None:
result.extend(self.component.account_manager.ask_password(_account, \ self.component.send_stanzas(self.component.account_manager.ask_password(_account, \
_account.default_lang_class)) _account.default_lang_class))
return result return result
self.__logger.debug("Checking " + _account.name) self.__logger.debug("Checking " + _account.name)
self.__logger.debug("\t" + _account.login \ self.__logger.debug("\t" + _account.login \
@@ -121,10 +119,8 @@ class MailFeeder(Feeder):
mail_index = _account.get_next_mail_index(mail_list) mail_index = _account.get_next_mail_index(mail_list)
while mail_index is not None: while mail_index is not None:
(body, email_from) = _account.get_mail(mail_index) (body, email_from) = _account.get_mail(mail_index)
result.append(Message(from_jid = _account.jid, \ result.append((_account.default_lang_class.new_mail_subject % (email_from), \
to_jid = _account.user_jid, \ body))
subject = _account.default_lang_class.new_mail_subject % (email_from), \
body = body))
mail_index = _account.get_next_mail_index(mail_list) mail_index = _account.get_next_mail_index(mail_list)
elif action == MailAccount.DIGEST: elif action == MailAccount.DIGEST:
body = "" body = ""
@@ -137,11 +133,8 @@ class MailFeeder(Feeder):
mail_index = _account.get_next_mail_index(mail_list) mail_index = _account.get_next_mail_index(mail_list)
new_mail_count += 1 new_mail_count += 1
if body != "": if body != "":
result.append(Message(from_jid = _account.jid, \ result.append((_account.default_lang_class.new_digest_subject % (new_mail_count), \
to_jid = _account.user_jid, \ body))
stanza_type = "headline", \
subject = _account.default_lang_class.new_digest_subject % (new_mail_count), \
body = body))
else: else:
raise Exception("Unkown action: " + str(action) raise Exception("Unkown action: " + str(action)
+ "\nPlease reconfigure account.") + "\nPlease reconfigure account.")
@@ -155,13 +148,16 @@ class MailFeeder(Feeder):
except: except:
# We have done everything we could # We have done everything we could
_account.connected = False _account.connected = False
result.extend(self.component.account_manager.send_error(_account, e)) self.component.send_error(_account, e)
return result return result
class MailSender(Sender): class MailSender(MessageSender, HeadlineSender):
"""Send emails messages to jabber users""" """Send emails messages to jabber users"""
def send(self, to_account, data): def send(self, to_account, subject, body):
"""Send given emails (in data) as Jabber messages""" """Send given emails (in data) as Jabber messages"""
pass if to_account.action == MailAccount.RETRIEVE:
MessageSender.send(self, to_account, subject, body)
elif to_account.action == MailAccount.DIGEST:
HeadlineSender.send(self, to_account, subject, body)

View File

@@ -182,9 +182,11 @@ class MailComponent_TestCase(unittest.TestCase):
account11.live_email_only = True account11.live_email_only = True
account11.password = None account11.password = None
result = self.comp.feeder.feed(account11) result = self.comp.feeder.feed(account11)
self.assertEquals(len(result), 1) self.assertEquals(len(result), 0)
self.assertEquals(result[0].get_to(), "test1@test.com") sent = self.comp.stream.sent
self.assertEquals(result[0].get_from(), "account11@jmc.test.com") self.assertEquals(len(sent), 1)
self.assertEquals(sent[0].get_to(), "test1@test.com")
self.assertEquals(sent[0].get_from(), "account11@jmc.test.com")
self.assertTrue(account11.first_check) self.assertTrue(account11.first_check)
self.assertTrue(account11.waiting_password_reply) self.assertTrue(account11.waiting_password_reply)
self.assertFalse(account11.in_error) self.assertFalse(account11.in_error)
@@ -257,9 +259,11 @@ class MailComponent_TestCase(unittest.TestCase):
self.assertFalse(account11.waiting_password_reply) self.assertFalse(account11.waiting_password_reply)
result = self.comp.feeder.feed(account11) result = self.comp.feeder.feed(account11)
self.assertFalse(account11.in_error) self.assertFalse(account11.in_error)
self.assertEquals(len(result), 1) self.assertEquals(len(result), 0)
self.assertEquals(result[0].get_to(), "test1@test.com") sent = self.comp.stream.sent
self.assertEquals(result[0].get_from(), "account11@jmc.test.com") self.assertEquals(len(sent), 1)
self.assertEquals(sent[0].get_to(), "test1@test.com")
self.assertEquals(sent[0].get_from(), "account11@jmc.test.com")
self.assertEquals(account11.lastcheck, 0) self.assertEquals(account11.lastcheck, 0)
self.assertFalse(account11.connected) self.assertFalse(account11.connected)
self.assertFalse(account11.has_connected) self.assertFalse(account11.has_connected)
@@ -279,9 +283,11 @@ class MailComponent_TestCase(unittest.TestCase):
account11.get_mail_list = lambda: [] account11.get_mail_list = lambda: []
result = self.comp.feeder.feed(account11) result = self.comp.feeder.feed(account11)
self.assertTrue(account11.in_error) self.assertTrue(account11.in_error)
self.assertEquals(len(result), 1) self.assertEquals(len(result), 0)
self.assertEquals(result[0].get_to(), "test1@test.com") sent = self.comp.stream.sent
self.assertEquals(result[0].get_from(), "account11@jmc.test.com") self.assertEquals(len(sent), 1)
self.assertEquals(sent[0].get_to(), "test1@test.com")
self.assertEquals(sent[0].get_from(), "account11@jmc.test.com")
self.assertEquals(account11.lastcheck, 0) self.assertEquals(account11.lastcheck, 0)
self.assertFalse(account11.connected) self.assertFalse(account11.connected)
self.assertTrue(account11.has_connected) self.assertTrue(account11.has_connected)
@@ -331,20 +337,14 @@ class MailComponent_TestCase(unittest.TestCase):
self.assertTrue(account11.has_connected) self.assertTrue(account11.has_connected)
self.assertEquals(len(self.comp.stream.sent), 0) self.assertEquals(len(self.comp.stream.sent), 0)
self.assertEquals(len(result), 2) self.assertEquals(len(result), 2)
self.assertEquals(result[0].get_from(), "account11@jmc.test.com") self.assertEquals(result[0][0], \
self.assertEquals(result[0].get_to(), "test1@test.com")
self.assertEquals(result[0].stanza_type, "message")
self.assertEquals(result[0].get_subject(), \
account11.default_lang_class.new_mail_subject \ account11.default_lang_class.new_mail_subject \
% ("from1@test.com")) % ("from1@test.com"))
self.assertEquals(result[0].get_body(), "body1") self.assertEquals(result[0][1], "body1")
self.assertEquals(result[1].get_from(), "account11@jmc.test.com") self.assertEquals(result[1][0], \
self.assertEquals(result[1].get_to(), "test1@test.com")
self.assertEquals(result[1].stanza_type, "message")
self.assertEquals(result[1].get_subject(), \
account11.default_lang_class.new_mail_subject \ account11.default_lang_class.new_mail_subject \
% ("from2@test.com")) % ("from2@test.com"))
self.assertEquals(result[1].get_body(), "body2") self.assertEquals(result[1][1], "body2")
del account.hub.threadConnection del account.hub.threadConnection
def test_feed_digest_no_mail(self): def test_feed_digest_no_mail(self):
@@ -391,13 +391,10 @@ class MailComponent_TestCase(unittest.TestCase):
self.assertTrue(account11.has_connected) self.assertTrue(account11.has_connected)
self.assertEquals(len(self.comp.stream.sent), 0) self.assertEquals(len(self.comp.stream.sent), 0)
self.assertEquals(len(result), 1) self.assertEquals(len(result), 1)
self.assertEquals(result[0].get_from(), "account11@jmc.test.com") self.assertEquals(result[0][0], \
self.assertEquals(result[0].get_to(), "test1@test.com")
self.assertEquals(result[0].stanza_type, "message")
self.assertEquals(result[0].get_subject(), \
account11.default_lang_class.new_digest_subject \ account11.default_lang_class.new_digest_subject \
% (2)) % (2))
self.assertEquals(result[0].get_body(), \ self.assertEquals(result[0][1], \
"body1\n----------------------------------\nbody2\n----------------------------------\n") "body1\n----------------------------------\nbody2\n----------------------------------\n")
del account.hub.threadConnection del account.hub.threadConnection
@@ -414,9 +411,8 @@ class MailComponent_TestCase(unittest.TestCase):
self.assertFalse(account11.in_error) self.assertFalse(account11.in_error)
account11.live_email_only = True account11.live_email_only = True
account11.password = "password" account11.password = "password"
(continue_checking, result) = self.comp.feeder.initialize_live_email(account11) continue_checking = self.comp.feeder.initialize_live_email(account11)
self.assertEquals(continue_checking, True) self.assertEquals(continue_checking, True)
self.assertEquals(result, [])
self.assertFalse(account11.first_check) self.assertFalse(account11.first_check)
self.assertFalse(account11.waiting_password_reply) self.assertFalse(account11.waiting_password_reply)
self.assertFalse(account11.in_error) self.assertFalse(account11.in_error)
@@ -438,11 +434,12 @@ class MailComponent_TestCase(unittest.TestCase):
self.assertFalse(account11.in_error) self.assertFalse(account11.in_error)
account11.live_email_only = True account11.live_email_only = True
account11.password = "password" account11.password = "password"
(continue_checking, result) = self.comp.feeder.initialize_live_email(account11) continue_checking = self.comp.feeder.initialize_live_email(account11)
self.assertEquals(continue_checking, False) self.assertEquals(continue_checking, False)
self.assertEquals(len(result), 1) sent = self.comp.stream.sent
self.assertEquals(result[0].get_to(), "test1@test.com") self.assertEquals(len(sent), 1)
self.assertEquals(result[0].get_from(), "account11@jmc.test.com") self.assertEquals(sent[0].get_to(), "test1@test.com")
self.assertEquals(sent[0].get_from(), "account11@jmc.test.com")
self.assertTrue(account11.first_check) self.assertTrue(account11.first_check)
self.assertFalse(account11.waiting_password_reply) self.assertFalse(account11.waiting_password_reply)
self.assertTrue(account11.in_error) self.assertTrue(account11.in_error)
@@ -464,11 +461,12 @@ class MailComponent_TestCase(unittest.TestCase):
self.assertFalse(account11.in_error) self.assertFalse(account11.in_error)
account11.live_email_only = True account11.live_email_only = True
account11.password = "password" account11.password = "password"
(continue_checking, result) = self.comp.feeder.initialize_live_email(account11) continue_checking = self.comp.feeder.initialize_live_email(account11)
self.assertEquals(continue_checking, False) self.assertEquals(continue_checking, False)
self.assertEquals(len(result), 1) sent = self.comp.stream.sent
self.assertEquals(result[0].get_to(), "test1@test.com") self.assertEquals(len(sent), 1)
self.assertEquals(result[0].get_from(), "account11@jmc.test.com") self.assertEquals(sent[0].get_to(), "test1@test.com")
self.assertEquals(sent[0].get_from(), "account11@jmc.test.com")
self.assertTrue(account11.first_check) self.assertTrue(account11.first_check)
self.assertFalse(account11.waiting_password_reply) self.assertFalse(account11.waiting_password_reply)
self.assertTrue(account11.in_error) self.assertTrue(account11.in_error)
@@ -490,10 +488,12 @@ class MailComponent_TestCase(unittest.TestCase):
self.assertFalse(account11.in_error) self.assertFalse(account11.in_error)
account11.live_email_only = True account11.live_email_only = True
account11.password = "password" account11.password = "password"
(continue_checking, result) = self.comp.feeder.initialize_live_email(account11) continue_checking = self.comp.feeder.initialize_live_email(account11)
self.assertEquals(len(result), 1) self.assertFalse(continue_checking)
self.assertEquals(result[0].get_to(), "test1@test.com") sent = self.comp.stream.sent
self.assertEquals(result[0].get_from(), "account11@jmc.test.com") self.assertEquals(len(sent), 1)
self.assertEquals(sent[0].get_to(), "test1@test.com")
self.assertEquals(sent[0].get_from(), "account11@jmc.test.com")
self.assertEquals(continue_checking, False) self.assertEquals(continue_checking, False)
self.assertTrue(account11.first_check) self.assertTrue(account11.first_check)
self.assertFalse(account11.waiting_password_reply) self.assertFalse(account11.waiting_password_reply)