From 18e02f2fea4be9421f6fdf67c29637ec85cbf993 Mon Sep 17 00:00:00 2001 From: Christophe Benz Date: Mon, 22 Nov 2010 15:06:25 +0100 Subject: [PATCH] handle multiple receivers in messages --- weboob/applications/boobmsg/boobmsg.py | 49 ++++++++++++------- weboob/applications/monboob/monboob.py | 2 +- .../applications/qboobmsg/messages_manager.py | 2 +- weboob/applications/qhavesex/contacts.py | 2 +- weboob/backends/aum/backend.py | 4 +- weboob/backends/dlfp/backend.py | 4 +- weboob/backends/fourchan/backend.py | 4 +- weboob/backends/newsfeed/backend.py | 2 +- weboob/backends/sfr/backend.py | 3 -- weboob/backends/sfr/pages/compose.py | 4 +- weboob/capabilities/messages.py | 4 +- 11 files changed, 46 insertions(+), 34 deletions(-) diff --git a/weboob/applications/boobmsg/boobmsg.py b/weboob/applications/boobmsg/boobmsg.py index fbea5518..e1d2b4a9 100644 --- a/weboob/applications/boobmsg/boobmsg.py +++ b/weboob/applications/boobmsg/boobmsg.py @@ -68,30 +68,45 @@ class Boobmsg(ReplApplication): def do_post(self, line): """ - post TO + post TO... - Post a message to the specified receiver. - The receiver can have multiple comma-separated values. + Post a message to the specified receivers. + Multiple receivers are separated by a comma. The content of message is read on stdin. """ + def post_message(receivers, backends=None): + message = Message(thread=None, id=None, content=content, receivers=receivers) + try: + self.do('post_message', message, backends=backends).wait() + except CallErrors, errors: + for backend, error, backtrace in errors: + if isinstance(error, CantSendMessage): + print >>sys.stderr, 'Error: %s' % error + self.logger.debug(backtrace) + else: + self.bcall_error_handler(backend, error, backtrace) + if self.interactive: + print 'Message sent sucessfully to %s' % ','.join(receivers) + if not line: - print >>sys.stderr, 'You must give a receiver.' + print >>sys.stderr, 'You must give at least a receiver.' return - receiver, backend_name = self.parse_id(line.strip()) - names = (backend_name,) if backend_name is not None else None + receivers_by_backend = {} + receivers_without_backend = [] + for receiver in [receiver.strip() for receiver in line.strip().split(',')]: + receiver, backend_name = self.parse_id(receiver) + if backend_name: + if backend_name in receivers_by_backend: + receivers_by_backend[backend_name] = [backend_name] + else: + receivers_by_backend[backend_name].append(backend_name) + else: + receivers_without_backend.append(receiver) if self.interactive: print 'Reading message content from stdin... Type ctrl-D from an empty line to post message.' content = sys.stdin.read() if self.options.skip_empty and not content.strip(): return - message = Message(thread=None, id=None, content=content, receiver=receiver) - try: - self.do('post_message', message, backends=names).wait() - except CallErrors, errors: - for backend, error, backtrace in errors: - if isinstance(error, CantSendMessage): - print >>sys.stderr, 'Error: %s' % error - else: - self.bcall_error_handler(backend, error, backtrace) - if self.interactive: - print 'Message sucessfully sent.' + for backend_name, receivers in receivers_by_backend.iteritems(): + post_message(receivers, [backend_name]) + post_message(receivers_without_backend) diff --git a/weboob/applications/monboob/monboob.py b/weboob/applications/monboob/monboob.py index a304e051..14628a7f 100644 --- a/weboob/applications/monboob/monboob.py +++ b/weboob/applications/monboob/monboob.py @@ -189,7 +189,7 @@ class Monboob(ReplApplication): 0, title=title, sender=None, - receiver=None, + receivers=None, parent=Message(thread, msg_id), content=content) try: diff --git a/weboob/applications/qboobmsg/messages_manager.py b/weboob/applications/qboobmsg/messages_manager.py index 23be9a8d..c9d72354 100644 --- a/weboob/applications/qboobmsg/messages_manager.py +++ b/weboob/applications/qboobmsg/messages_manager.py @@ -219,7 +219,7 @@ class MessagesManager(QWidget): id=0, title=title, sender=None, - receiver=None, + receivers=None, content=text, parent=self.message, flags=flags) diff --git a/weboob/applications/qhavesex/contacts.py b/weboob/applications/qhavesex/contacts.py index 00eb671f..3c1bd495 100644 --- a/weboob/applications/qhavesex/contacts.py +++ b/weboob/applications/qhavesex/contacts.py @@ -169,7 +169,7 @@ class ContactThread(QWidget): id=0, title=u'', sender=None, - receiver=None, + receivers=None, content=text, parent=self.messages[0].message if len(self.messages) > 0 else None) self.process_reply = QtDo(self.weboob, self._postReply_cb, self._postReply_eb) diff --git a/weboob/backends/aum/backend.py b/weboob/backends/aum/backend.py index e1073914..3054e228 100644 --- a/weboob/backends/aum/backend.py +++ b/weboob/backends/aum/backend.py @@ -168,7 +168,7 @@ class AuMBackend(BaseBackend, ICapMessages, ICapMessagesPost, ICapDating, ICapCh id=mail.message_id, title=mail.title, sender=mail.sender, - receiver=mail.name if mail.sender == my_name else my_name, # TODO: me + receivers=[mail.name if mail.sender == my_name else my_name], # TODO: me date=mail.date, content=mail.content, signature=mail.signature, @@ -239,7 +239,7 @@ class AuMBackend(BaseBackend, ICapMessages, ICapMessagesPost, ICapDating, ICapCh id=self.MAGIC_ID_BASKET, title=thread.title, sender=profile.get_name(), - receiver=self.browser.get_my_name(), + receivers=[self.browser.get_my_name()], date=None, # now content='You are taken in her basket!', signature=profile.get_profile_text(), diff --git a/weboob/backends/dlfp/backend.py b/weboob/backends/dlfp/backend.py index 976815d0..52fdcc73 100644 --- a/weboob/backends/dlfp/backend.py +++ b/weboob/backends/dlfp/backend.py @@ -98,7 +98,7 @@ class DLFPBackend(BaseBackend, ICapMessages, ICapMessagesPost): id=0, # root message title=content.title, sender=content.author, - receiver=None, + receivers=None, date=thread.date, #TODO XXX WTF this is None parent=None, content=''.join([content.body, content.part2]), @@ -123,7 +123,7 @@ class DLFPBackend(BaseBackend, ICapMessages, ICapMessagesPost): id=com.id, title=com.title, sender=com.author, - receiver=None, + receivers=None, date=com.date, parent=parent, content=com.body, diff --git a/weboob/backends/fourchan/backend.py b/weboob/backends/fourchan/backend.py index 699fb031..71ff9f9b 100644 --- a/weboob/backends/fourchan/backend.py +++ b/weboob/backends/fourchan/backend.py @@ -69,7 +69,7 @@ class FourChanBackend(BaseBackend, ICapMessages): id=0, # root message title=_thread.filename, sender=_thread.author, - receiver=None, + receivers=None, date=_thread.datetime, parent=None, content=_thread.text, @@ -87,7 +87,7 @@ class FourChanBackend(BaseBackend, ICapMessages): id=comment.id, title=_thread.filename, sender=comment.author, - receiver=None, + receivers=None, date=comment.datetime, parent=parent, content=comment.text, diff --git a/weboob/backends/newsfeed/backend.py b/weboob/backends/newsfeed/backend.py index 2005a666..1aef0eab 100644 --- a/weboob/backends/newsfeed/backend.py +++ b/weboob/backends/newsfeed/backend.py @@ -63,7 +63,7 @@ class NewsfeedBackend(BaseBackend, ICapMessages): id=0, title=entry.title, sender=entry.author, - receiver=None, + receivers=None, date=entry.datetime, parent=None, content=content, diff --git a/weboob/backends/sfr/backend.py b/weboob/backends/sfr/backend.py index 86bc4e4b..3218ce8b 100644 --- a/weboob/backends/sfr/backend.py +++ b/weboob/backends/sfr/backend.py @@ -18,8 +18,6 @@ from __future__ import with_statement -import re - from weboob.capabilities.messages import CantSendMessage, ICapMessages, ICapMessagesPost from weboob.capabilities.account import ICapAccount, StatusField from weboob.tools.backend import BaseBackend @@ -56,6 +54,5 @@ class SfrBackend(BaseBackend, ICapAccount, ICapMessages, ICapMessagesPost): def post_message(self, message): if not message.content.strip(): raise CantSendMessage(u'Message content is empty.') - message.receiver = ','.join(re.sub(' +', '', receiver) for receiver in message.receiver.split(',')) with self.browser: self.browser.post_message(message) diff --git a/weboob/backends/sfr/pages/compose.py b/weboob/backends/sfr/pages/compose.py index b8b3e221..e17ea2ea 100644 --- a/weboob/backends/sfr/pages/compose.py +++ b/weboob/backends/sfr/pages/compose.py @@ -39,12 +39,12 @@ class ComposePage(BasePage): return remaining_regex.match(text).groupdict().get('nb') def post_message(self, message): - receiver_list = [receiver.strip() for receiver in message.receiver.split(',')] + receiver_list = [re.sub(' +', '', receiver) for receiver in message.receivers] for receiver in receiver_list: if self.phone_regex.match(receiver) is None: raise CantSendMessage(u'Invalid receiver: %s' % receiver) self.browser.select_form(nr=0) - self.browser['msisdns'] = message.receiver + self.browser['msisdns'] = ','.join(receiver_list) self.browser['textMessage'] = message.content self.browser.submit() diff --git a/weboob/capabilities/messages.py b/weboob/capabilities/messages.py index c8692785..3665540a 100644 --- a/weboob/capabilities/messages.py +++ b/weboob/capabilities/messages.py @@ -34,7 +34,7 @@ class Message(CapBaseObject): def __init__(self, thread, id, title=NotLoaded, sender=NotLoaded, - receiver=NotLoaded, + receivers=NotLoaded, date=None, parent=NotLoaded, content=NotLoaded, @@ -45,7 +45,7 @@ class Message(CapBaseObject): self.add_field('thread', Thread, thread) self.add_field('title', basestring, title) self.add_field('sender', basestring, sender) - self.add_field('receiver', basestring, receiver) + self.add_field('receivers', list, receivers) self.add_field('date', datetime.datetime, date) self.add_field('parent', Message, parent) self.add_field('content', basestring, content)