handle multiple receivers in messages
This commit is contained in:
parent
8724acd19d
commit
18e02f2fea
11 changed files with 46 additions and 34 deletions
|
|
@ -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.'
|
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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(),
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue