Move message format from Feeder to Sender class
darcs-hash:20070515154957-86b55-3ad909492a4251f2f9620ee30818bd038babc986.gz
This commit is contained in:
2
jmc.xml
2
jmc.xml
@@ -17,6 +17,6 @@
|
||||
<spooldir>./spool/jabber</spooldir>
|
||||
<pidfile>./run/jabber/jmc.pid</pidfile>
|
||||
<!-- default check interval in minutes -->
|
||||
<check_interval>5</check_interval>
|
||||
<check_interval>1</check_interval>
|
||||
<mail_default_encoding>iso-8859-1</mail_default_encoding>
|
||||
</config>
|
||||
|
||||
@@ -26,7 +26,7 @@ import logging
|
||||
from pyxmpp.message import Message
|
||||
|
||||
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.lang import Lang
|
||||
@@ -68,19 +68,18 @@ class MailFeeder(Feeder):
|
||||
"""For live email checking account, mark emails received while
|
||||
offline as read.
|
||||
Return a boolean to continue mail checking or not (if waiting for password)"""
|
||||
result = []
|
||||
if _account.password is None:
|
||||
if not _account.waiting_password_reply:
|
||||
result.extend(self.component.account_manager.ask_password(_account, \
|
||||
_account.default_lang_class))
|
||||
return (False, result)
|
||||
self.component.send_stanzas(self.component.account_manager.ask_password(_account, \
|
||||
_account.default_lang_class))
|
||||
return False
|
||||
try:
|
||||
_account.connect()
|
||||
_account.mark_all_as_read()
|
||||
_account.disconnect()
|
||||
_account.first_check = False
|
||||
_account.in_error = False
|
||||
return (True, result)
|
||||
return True
|
||||
except Exception, e:
|
||||
if _account.connected:
|
||||
try:
|
||||
@@ -88,8 +87,8 @@ class MailFeeder(Feeder):
|
||||
except:
|
||||
# We have done everything we could
|
||||
_account.connected = False
|
||||
result.extend(self.component.account_manager.send_error(_account, e))
|
||||
return (False, result)
|
||||
self.component.send_error(_account, e)
|
||||
return False
|
||||
|
||||
def feed(self, _account):
|
||||
"""Check for new emails for given MailAccount and return a list of
|
||||
@@ -97,8 +96,7 @@ class MailFeeder(Feeder):
|
||||
self.__logger.debug("MailFeeder.feed")
|
||||
result = []
|
||||
if _account.first_check and _account.live_email_only:
|
||||
(continue_checking, to_send) = self.initialize_live_email(_account)
|
||||
result.extend(to_send)
|
||||
continue_checking = self.initialize_live_email(_account)
|
||||
if not continue_checking:
|
||||
return result
|
||||
_account.lastcheck += 1
|
||||
@@ -108,8 +106,8 @@ class MailFeeder(Feeder):
|
||||
if action != PresenceAccount.DO_NOTHING:
|
||||
try:
|
||||
if _account.password is None:
|
||||
result.extend(self.component.account_manager.ask_password(_account, \
|
||||
_account.default_lang_class))
|
||||
self.component.send_stanzas(self.component.account_manager.ask_password(_account, \
|
||||
_account.default_lang_class))
|
||||
return result
|
||||
self.__logger.debug("Checking " + _account.name)
|
||||
self.__logger.debug("\t" + _account.login \
|
||||
@@ -121,10 +119,8 @@ class MailFeeder(Feeder):
|
||||
mail_index = _account.get_next_mail_index(mail_list)
|
||||
while mail_index is not None:
|
||||
(body, email_from) = _account.get_mail(mail_index)
|
||||
result.append(Message(from_jid = _account.jid, \
|
||||
to_jid = _account.user_jid, \
|
||||
subject = _account.default_lang_class.new_mail_subject % (email_from), \
|
||||
body = body))
|
||||
result.append((_account.default_lang_class.new_mail_subject % (email_from), \
|
||||
body))
|
||||
mail_index = _account.get_next_mail_index(mail_list)
|
||||
elif action == MailAccount.DIGEST:
|
||||
body = ""
|
||||
@@ -137,11 +133,8 @@ class MailFeeder(Feeder):
|
||||
mail_index = _account.get_next_mail_index(mail_list)
|
||||
new_mail_count += 1
|
||||
if body != "":
|
||||
result.append(Message(from_jid = _account.jid, \
|
||||
to_jid = _account.user_jid, \
|
||||
stanza_type = "headline", \
|
||||
subject = _account.default_lang_class.new_digest_subject % (new_mail_count), \
|
||||
body = body))
|
||||
result.append((_account.default_lang_class.new_digest_subject % (new_mail_count), \
|
||||
body))
|
||||
else:
|
||||
raise Exception("Unkown action: " + str(action)
|
||||
+ "\nPlease reconfigure account.")
|
||||
@@ -155,13 +148,16 @@ class MailFeeder(Feeder):
|
||||
except:
|
||||
# We have done everything we could
|
||||
_account.connected = False
|
||||
result.extend(self.component.account_manager.send_error(_account, e))
|
||||
self.component.send_error(_account, e)
|
||||
return result
|
||||
|
||||
class MailSender(Sender):
|
||||
class MailSender(MessageSender, HeadlineSender):
|
||||
"""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"""
|
||||
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)
|
||||
|
||||
|
||||
@@ -182,9 +182,11 @@ class MailComponent_TestCase(unittest.TestCase):
|
||||
account11.live_email_only = True
|
||||
account11.password = None
|
||||
result = self.comp.feeder.feed(account11)
|
||||
self.assertEquals(len(result), 1)
|
||||
self.assertEquals(result[0].get_to(), "test1@test.com")
|
||||
self.assertEquals(result[0].get_from(), "account11@jmc.test.com")
|
||||
self.assertEquals(len(result), 0)
|
||||
sent = self.comp.stream.sent
|
||||
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.waiting_password_reply)
|
||||
self.assertFalse(account11.in_error)
|
||||
@@ -257,9 +259,11 @@ class MailComponent_TestCase(unittest.TestCase):
|
||||
self.assertFalse(account11.waiting_password_reply)
|
||||
result = self.comp.feeder.feed(account11)
|
||||
self.assertFalse(account11.in_error)
|
||||
self.assertEquals(len(result), 1)
|
||||
self.assertEquals(result[0].get_to(), "test1@test.com")
|
||||
self.assertEquals(result[0].get_from(), "account11@jmc.test.com")
|
||||
self.assertEquals(len(result), 0)
|
||||
sent = self.comp.stream.sent
|
||||
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.assertFalse(account11.connected)
|
||||
self.assertFalse(account11.has_connected)
|
||||
@@ -279,9 +283,11 @@ class MailComponent_TestCase(unittest.TestCase):
|
||||
account11.get_mail_list = lambda: []
|
||||
result = self.comp.feeder.feed(account11)
|
||||
self.assertTrue(account11.in_error)
|
||||
self.assertEquals(len(result), 1)
|
||||
self.assertEquals(result[0].get_to(), "test1@test.com")
|
||||
self.assertEquals(result[0].get_from(), "account11@jmc.test.com")
|
||||
self.assertEquals(len(result), 0)
|
||||
sent = self.comp.stream.sent
|
||||
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.assertFalse(account11.connected)
|
||||
self.assertTrue(account11.has_connected)
|
||||
@@ -331,20 +337,14 @@ class MailComponent_TestCase(unittest.TestCase):
|
||||
self.assertTrue(account11.has_connected)
|
||||
self.assertEquals(len(self.comp.stream.sent), 0)
|
||||
self.assertEquals(len(result), 2)
|
||||
self.assertEquals(result[0].get_from(), "account11@jmc.test.com")
|
||||
self.assertEquals(result[0].get_to(), "test1@test.com")
|
||||
self.assertEquals(result[0].stanza_type, "message")
|
||||
self.assertEquals(result[0].get_subject(), \
|
||||
self.assertEquals(result[0][0], \
|
||||
account11.default_lang_class.new_mail_subject \
|
||||
% ("from1@test.com"))
|
||||
self.assertEquals(result[0].get_body(), "body1")
|
||||
self.assertEquals(result[1].get_from(), "account11@jmc.test.com")
|
||||
self.assertEquals(result[1].get_to(), "test1@test.com")
|
||||
self.assertEquals(result[1].stanza_type, "message")
|
||||
self.assertEquals(result[1].get_subject(), \
|
||||
self.assertEquals(result[0][1], "body1")
|
||||
self.assertEquals(result[1][0], \
|
||||
account11.default_lang_class.new_mail_subject \
|
||||
% ("from2@test.com"))
|
||||
self.assertEquals(result[1].get_body(), "body2")
|
||||
self.assertEquals(result[1][1], "body2")
|
||||
del account.hub.threadConnection
|
||||
|
||||
def test_feed_digest_no_mail(self):
|
||||
@@ -391,13 +391,10 @@ class MailComponent_TestCase(unittest.TestCase):
|
||||
self.assertTrue(account11.has_connected)
|
||||
self.assertEquals(len(self.comp.stream.sent), 0)
|
||||
self.assertEquals(len(result), 1)
|
||||
self.assertEquals(result[0].get_from(), "account11@jmc.test.com")
|
||||
self.assertEquals(result[0].get_to(), "test1@test.com")
|
||||
self.assertEquals(result[0].stanza_type, "message")
|
||||
self.assertEquals(result[0].get_subject(), \
|
||||
self.assertEquals(result[0][0], \
|
||||
account11.default_lang_class.new_digest_subject \
|
||||
% (2))
|
||||
self.assertEquals(result[0].get_body(), \
|
||||
self.assertEquals(result[0][1], \
|
||||
"body1\n----------------------------------\nbody2\n----------------------------------\n")
|
||||
del account.hub.threadConnection
|
||||
|
||||
@@ -414,9 +411,8 @@ class MailComponent_TestCase(unittest.TestCase):
|
||||
self.assertFalse(account11.in_error)
|
||||
account11.live_email_only = True
|
||||
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(result, [])
|
||||
self.assertFalse(account11.first_check)
|
||||
self.assertFalse(account11.waiting_password_reply)
|
||||
self.assertFalse(account11.in_error)
|
||||
@@ -438,11 +434,12 @@ class MailComponent_TestCase(unittest.TestCase):
|
||||
self.assertFalse(account11.in_error)
|
||||
account11.live_email_only = True
|
||||
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(len(result), 1)
|
||||
self.assertEquals(result[0].get_to(), "test1@test.com")
|
||||
self.assertEquals(result[0].get_from(), "account11@jmc.test.com")
|
||||
sent = self.comp.stream.sent
|
||||
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.assertFalse(account11.waiting_password_reply)
|
||||
self.assertTrue(account11.in_error)
|
||||
@@ -464,11 +461,12 @@ class MailComponent_TestCase(unittest.TestCase):
|
||||
self.assertFalse(account11.in_error)
|
||||
account11.live_email_only = True
|
||||
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(len(result), 1)
|
||||
self.assertEquals(result[0].get_to(), "test1@test.com")
|
||||
self.assertEquals(result[0].get_from(), "account11@jmc.test.com")
|
||||
sent = self.comp.stream.sent
|
||||
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.assertFalse(account11.waiting_password_reply)
|
||||
self.assertTrue(account11.in_error)
|
||||
@@ -490,10 +488,12 @@ class MailComponent_TestCase(unittest.TestCase):
|
||||
self.assertFalse(account11.in_error)
|
||||
account11.live_email_only = True
|
||||
account11.password = "password"
|
||||
(continue_checking, result) = self.comp.feeder.initialize_live_email(account11)
|
||||
self.assertEquals(len(result), 1)
|
||||
self.assertEquals(result[0].get_to(), "test1@test.com")
|
||||
self.assertEquals(result[0].get_from(), "account11@jmc.test.com")
|
||||
continue_checking = self.comp.feeder.initialize_live_email(account11)
|
||||
self.assertFalse(continue_checking)
|
||||
sent = self.comp.stream.sent
|
||||
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.assertTrue(account11.first_check)
|
||||
self.assertFalse(account11.waiting_password_reply)
|
||||
|
||||
Reference in New Issue
Block a user