handle multiple receivers in messages

This commit is contained in:
Christophe Benz 2010-11-22 15:06:25 +01:00
commit 18e02f2fea
11 changed files with 46 additions and 34 deletions

View file

@ -68,30 +68,45 @@ class Boobmsg(ReplApplication):
def do_post(self, line): def do_post(self, line):
""" """
post TO post TO...
Post a message to the specified receiver. Post a message to the specified receivers.
The receiver can have multiple comma-separated values. Multiple receivers are separated by a comma.
The content of message is read on stdin. 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: if not line:
print >>sys.stderr, 'You must give a receiver.' print >>sys.stderr, 'You must give at least a receiver.'
return return
receiver, backend_name = self.parse_id(line.strip()) receivers_by_backend = {}
names = (backend_name,) if backend_name is not None else None 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: if self.interactive:
print 'Reading message content from stdin... Type ctrl-D from an empty line to post message.' print 'Reading message content from stdin... Type ctrl-D from an empty line to post message.'
content = sys.stdin.read() content = sys.stdin.read()
if self.options.skip_empty and not content.strip(): if self.options.skip_empty and not content.strip():
return return
message = Message(thread=None, id=None, content=content, receiver=receiver) for backend_name, receivers in receivers_by_backend.iteritems():
try: post_message(receivers, [backend_name])
self.do('post_message', message, backends=names).wait() post_message(receivers_without_backend)
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.'

View file

@ -189,7 +189,7 @@ class Monboob(ReplApplication):
0, 0,
title=title, title=title,
sender=None, sender=None,
receiver=None, receivers=None,
parent=Message(thread, msg_id), parent=Message(thread, msg_id),
content=content) content=content)
try: try:

View file

@ -219,7 +219,7 @@ class MessagesManager(QWidget):
id=0, id=0,
title=title, title=title,
sender=None, sender=None,
receiver=None, receivers=None,
content=text, content=text,
parent=self.message, parent=self.message,
flags=flags) flags=flags)

View file

@ -169,7 +169,7 @@ class ContactThread(QWidget):
id=0, id=0,
title=u'', title=u'',
sender=None, sender=None,
receiver=None, receivers=None,
content=text, content=text,
parent=self.messages[0].message if len(self.messages) > 0 else None) parent=self.messages[0].message if len(self.messages) > 0 else None)
self.process_reply = QtDo(self.weboob, self._postReply_cb, self._postReply_eb) self.process_reply = QtDo(self.weboob, self._postReply_cb, self._postReply_eb)

View file

@ -168,7 +168,7 @@ class AuMBackend(BaseBackend, ICapMessages, ICapMessagesPost, ICapDating, ICapCh
id=mail.message_id, id=mail.message_id,
title=mail.title, title=mail.title,
sender=mail.sender, 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, date=mail.date,
content=mail.content, content=mail.content,
signature=mail.signature, signature=mail.signature,
@ -239,7 +239,7 @@ class AuMBackend(BaseBackend, ICapMessages, ICapMessagesPost, ICapDating, ICapCh
id=self.MAGIC_ID_BASKET, id=self.MAGIC_ID_BASKET,
title=thread.title, title=thread.title,
sender=profile.get_name(), sender=profile.get_name(),
receiver=self.browser.get_my_name(), receivers=[self.browser.get_my_name()],
date=None, # now date=None, # now
content='You are taken in her basket!', content='You are taken in her basket!',
signature=profile.get_profile_text(), signature=profile.get_profile_text(),

View file

@ -98,7 +98,7 @@ class DLFPBackend(BaseBackend, ICapMessages, ICapMessagesPost):
id=0, # root message id=0, # root message
title=content.title, title=content.title,
sender=content.author, sender=content.author,
receiver=None, receivers=None,
date=thread.date, #TODO XXX WTF this is None date=thread.date, #TODO XXX WTF this is None
parent=None, parent=None,
content=''.join([content.body, content.part2]), content=''.join([content.body, content.part2]),
@ -123,7 +123,7 @@ class DLFPBackend(BaseBackend, ICapMessages, ICapMessagesPost):
id=com.id, id=com.id,
title=com.title, title=com.title,
sender=com.author, sender=com.author,
receiver=None, receivers=None,
date=com.date, date=com.date,
parent=parent, parent=parent,
content=com.body, content=com.body,

View file

@ -69,7 +69,7 @@ class FourChanBackend(BaseBackend, ICapMessages):
id=0, # root message id=0, # root message
title=_thread.filename, title=_thread.filename,
sender=_thread.author, sender=_thread.author,
receiver=None, receivers=None,
date=_thread.datetime, date=_thread.datetime,
parent=None, parent=None,
content=_thread.text, content=_thread.text,
@ -87,7 +87,7 @@ class FourChanBackend(BaseBackend, ICapMessages):
id=comment.id, id=comment.id,
title=_thread.filename, title=_thread.filename,
sender=comment.author, sender=comment.author,
receiver=None, receivers=None,
date=comment.datetime, date=comment.datetime,
parent=parent, parent=parent,
content=comment.text, content=comment.text,

View file

@ -63,7 +63,7 @@ class NewsfeedBackend(BaseBackend, ICapMessages):
id=0, id=0,
title=entry.title, title=entry.title,
sender=entry.author, sender=entry.author,
receiver=None, receivers=None,
date=entry.datetime, date=entry.datetime,
parent=None, parent=None,
content=content, content=content,

View file

@ -18,8 +18,6 @@
from __future__ import with_statement from __future__ import with_statement
import re
from weboob.capabilities.messages import CantSendMessage, ICapMessages, ICapMessagesPost from weboob.capabilities.messages import CantSendMessage, ICapMessages, ICapMessagesPost
from weboob.capabilities.account import ICapAccount, StatusField from weboob.capabilities.account import ICapAccount, StatusField
from weboob.tools.backend import BaseBackend from weboob.tools.backend import BaseBackend
@ -56,6 +54,5 @@ class SfrBackend(BaseBackend, ICapAccount, ICapMessages, ICapMessagesPost):
def post_message(self, message): def post_message(self, message):
if not message.content.strip(): if not message.content.strip():
raise CantSendMessage(u'Message content is empty.') raise CantSendMessage(u'Message content is empty.')
message.receiver = ','.join(re.sub(' +', '', receiver) for receiver in message.receiver.split(','))
with self.browser: with self.browser:
self.browser.post_message(message) self.browser.post_message(message)

View file

@ -39,12 +39,12 @@ class ComposePage(BasePage):
return remaining_regex.match(text).groupdict().get('nb') return remaining_regex.match(text).groupdict().get('nb')
def post_message(self, message): 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: for receiver in receiver_list:
if self.phone_regex.match(receiver) is None: if self.phone_regex.match(receiver) is None:
raise CantSendMessage(u'Invalid receiver: %s' % receiver) raise CantSendMessage(u'Invalid receiver: %s' % receiver)
self.browser.select_form(nr=0) self.browser.select_form(nr=0)
self.browser['msisdns'] = message.receiver self.browser['msisdns'] = ','.join(receiver_list)
self.browser['textMessage'] = message.content self.browser['textMessage'] = message.content
self.browser.submit() self.browser.submit()

View file

@ -34,7 +34,7 @@ class Message(CapBaseObject):
def __init__(self, thread, id, def __init__(self, thread, id,
title=NotLoaded, title=NotLoaded,
sender=NotLoaded, sender=NotLoaded,
receiver=NotLoaded, receivers=NotLoaded,
date=None, date=None,
parent=NotLoaded, parent=NotLoaded,
content=NotLoaded, content=NotLoaded,
@ -45,7 +45,7 @@ class Message(CapBaseObject):
self.add_field('thread', Thread, thread) self.add_field('thread', Thread, thread)
self.add_field('title', basestring, title) self.add_field('title', basestring, title)
self.add_field('sender', basestring, sender) 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('date', datetime.datetime, date)
self.add_field('parent', Message, parent) self.add_field('parent', Message, parent)
self.add_field('content', basestring, content) self.add_field('content', basestring, content)