commands 'list' and 'show' (not really finished)
This commit is contained in:
parent
912d3496c9
commit
8ea375669a
1 changed files with 139 additions and 1 deletions
|
|
@ -19,20 +19,98 @@
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from weboob.core import CallErrors
|
from weboob.core import CallErrors
|
||||||
from weboob.capabilities.messages import CantSendMessage, ICapMessages, Message
|
from weboob.capabilities.messages import CantSendMessage, ICapMessages, Message, Thread
|
||||||
from weboob.capabilities.account import ICapAccount
|
from weboob.capabilities.account import ICapAccount
|
||||||
from weboob.tools.application.repl import ReplApplication
|
from weboob.tools.application.repl import ReplApplication
|
||||||
|
from weboob.tools.application.formatters.iformatter import IFormatter
|
||||||
from weboob.tools.misc import html2text
|
from weboob.tools.misc import html2text
|
||||||
|
|
||||||
|
|
||||||
__all__ = ['Boobmsg']
|
__all__ = ['Boobmsg']
|
||||||
|
|
||||||
|
|
||||||
|
class MessageFormatter(IFormatter):
|
||||||
|
def flush(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def format_dict(self, item):
|
||||||
|
result = u'%sTitle:%s %s\n' % (ReplApplication.BOLD, ReplApplication.NC, item['title'])
|
||||||
|
result += u'%sDate:%s %s\n' % (ReplApplication.BOLD, ReplApplication.NC, item['date'])
|
||||||
|
result += u'%sFrom:%s %s\n' % (ReplApplication.BOLD, ReplApplication.NC, item['sender'])
|
||||||
|
result += u'%sTo:%s %s\n' % (ReplApplication.BOLD, ReplApplication.NC, ', '.join(item['receivers']))
|
||||||
|
|
||||||
|
result += '\n%s' % item['content']
|
||||||
|
return result
|
||||||
|
|
||||||
|
class MessagesListFormatter(IFormatter):
|
||||||
|
MANDATORY_FIELDS = ()
|
||||||
|
count = 0
|
||||||
|
_list_messages = False
|
||||||
|
|
||||||
|
def flush(self):
|
||||||
|
self.count = 0
|
||||||
|
|
||||||
|
def format_dict(self, item):
|
||||||
|
if not self._list_messages:
|
||||||
|
return self.format_dict_thread(item)
|
||||||
|
else:
|
||||||
|
return self.format_dict_messages(item)
|
||||||
|
|
||||||
|
def format_dict_thread(self, item):
|
||||||
|
self.count += 1
|
||||||
|
if item['nb_unread'] and item['nb_unread'] > 0:
|
||||||
|
unread = '[N]'
|
||||||
|
else:
|
||||||
|
unread = ' '
|
||||||
|
if self.interactive:
|
||||||
|
backend = item['id'].split('@', 1)[1]
|
||||||
|
result = u'%s* (%d) %s %s (%s)%s' % (ReplApplication.BOLD, self.count, unread, item['title'], backend, ReplApplication.NC)
|
||||||
|
else:
|
||||||
|
result = u'%s* (%s) %s %s%s' % (ReplApplication.BOLD, item['id'], unread, item['title'], ReplApplication.NC)
|
||||||
|
if item['date']:
|
||||||
|
result += u'\n %s' % item['date']
|
||||||
|
return result
|
||||||
|
|
||||||
|
def format_dict_messages(self, item):
|
||||||
|
backend = item['id'].split('@', 1)[1]
|
||||||
|
if item['flags'] == Thread.IS_THREADS:
|
||||||
|
depth = 0
|
||||||
|
else:
|
||||||
|
depth = -1
|
||||||
|
|
||||||
|
result = self.format_message(backend, item['root'], depth)
|
||||||
|
return result
|
||||||
|
|
||||||
|
def format_message(self, backend, message, depth=0):
|
||||||
|
if not message:
|
||||||
|
return u''
|
||||||
|
self.count += 1
|
||||||
|
if self.interactive:
|
||||||
|
result = u'%s%s* (%d)%s <%s> %s (%s)\n' % (depth * ' ', ReplApplication.BOLD, self.count,
|
||||||
|
ReplApplication.NC, message.sender, message.title,
|
||||||
|
backend)
|
||||||
|
else:
|
||||||
|
result = u'%s%s* (%s@%s)%s <%s> %s\n' % (depth * ' ', ReplApplication.BOLD, message.id, backend,
|
||||||
|
ReplApplication.NC, message.sender, message.title)
|
||||||
|
if message.children:
|
||||||
|
if depth >= 0:
|
||||||
|
depth += 1
|
||||||
|
for m in message.children:
|
||||||
|
result += self.format_message(backend, m, depth)
|
||||||
|
return result
|
||||||
|
|
||||||
class Boobmsg(ReplApplication):
|
class Boobmsg(ReplApplication):
|
||||||
APPNAME = 'boobmsg'
|
APPNAME = 'boobmsg'
|
||||||
VERSION = '0.4'
|
VERSION = '0.4'
|
||||||
COPYRIGHT = 'Copyright(C) 2010 Christophe Benz'
|
COPYRIGHT = 'Copyright(C) 2010 Christophe Benz'
|
||||||
CAPS = ICapMessages
|
CAPS = ICapMessages
|
||||||
|
EXTRA_FORMATTERS = {'msglist': MessagesListFormatter,
|
||||||
|
'msg': MessageFormatter,
|
||||||
|
}
|
||||||
|
COMMANDS_FORMATTERS = {'list': 'msglist',
|
||||||
|
'show': 'msg',
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def add_application_options(self, group):
|
def add_application_options(self, group):
|
||||||
group.add_option('-e', '--skip-empty', action='store_true', help='Don\'t send messages with an empty body.')
|
group.add_option('-e', '--skip-empty', action='store_true', help='Don\'t send messages with an empty body.')
|
||||||
|
|
@ -114,3 +192,63 @@ class Boobmsg(ReplApplication):
|
||||||
'enabled backends (%s)' % (','.join(receivers_without_backend),
|
'enabled backends (%s)' % (','.join(receivers_without_backend),
|
||||||
','.join(backend.name for backend in self.enabled_backends)))
|
','.join(backend.name for backend in self.enabled_backends)))
|
||||||
post_message(receivers_without_backend)
|
post_message(receivers_without_backend)
|
||||||
|
|
||||||
|
threads = []
|
||||||
|
messages = []
|
||||||
|
|
||||||
|
def do_list(self, arg):
|
||||||
|
"""
|
||||||
|
list
|
||||||
|
|
||||||
|
Display all threads.
|
||||||
|
"""
|
||||||
|
if len(arg) > 0:
|
||||||
|
try:
|
||||||
|
thread = self.threads[int(arg) - 1]
|
||||||
|
except (IndexError,ValueError):
|
||||||
|
id, backend_name = self.parse_id(arg)
|
||||||
|
else:
|
||||||
|
id = thread.id
|
||||||
|
backend_name = thread.backend
|
||||||
|
|
||||||
|
self.messages = []
|
||||||
|
cmd = self.do('get_thread', id, backends=backend_name)
|
||||||
|
self.formatter._list_messages = True
|
||||||
|
else:
|
||||||
|
self.threads = []
|
||||||
|
cmd = self.do('iter_threads')
|
||||||
|
self.formatter._list_messages = False
|
||||||
|
|
||||||
|
for backend, thread in cmd:
|
||||||
|
if len(arg) > 0:
|
||||||
|
for m in thread.iter_all_messages():
|
||||||
|
if not m.backend:
|
||||||
|
m.backend = thread.backend
|
||||||
|
self.messages.append(m)
|
||||||
|
else:
|
||||||
|
self.threads.append(thread)
|
||||||
|
self.format(thread)
|
||||||
|
self.flush()
|
||||||
|
|
||||||
|
def do_show(self, arg):
|
||||||
|
"""
|
||||||
|
show MESSAGE
|
||||||
|
|
||||||
|
Read a message
|
||||||
|
"""
|
||||||
|
if len(arg) == 0:
|
||||||
|
print 'Please give a message ID.'
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
message = self.messages[int(arg) - 1]
|
||||||
|
except (IndexError,ValueError):
|
||||||
|
id, backend_name = self.parse_id(arg)
|
||||||
|
else:
|
||||||
|
self.format(message)
|
||||||
|
return
|
||||||
|
|
||||||
|
if not self.interactive:
|
||||||
|
print 'Oops, you need to be in interactive mode to read messages'
|
||||||
|
else:
|
||||||
|
print 'Message not found'
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue