diff --git a/weboob/applications/qboobmsg/messages_manager.py b/weboob/applications/qboobmsg/messages_manager.py
index efd02034..c0353c68 100644
--- a/weboob/applications/qboobmsg/messages_manager.py
+++ b/weboob/applications/qboobmsg/messages_manager.py
@@ -16,11 +16,12 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
import time
+import logging
-from PyQt4.QtGui import QWidget, QTreeWidgetItem, QListWidgetItem
+from PyQt4.QtGui import QWidget, QTreeWidgetItem, QListWidgetItem, QMessageBox
from PyQt4.QtCore import SIGNAL, Qt
-from weboob.capabilities.messages import ICapMessages
+from weboob.capabilities.messages import ICapMessages, Message
from weboob.tools.application.qt import QtDo
from .ui.messages_manager_ui import Ui_MessagesManager
@@ -44,11 +45,18 @@ class MessagesManager(QWidget):
self.ui.backendsList.setCurrentRow(0)
self.backend = None
+ self.thread = None
+ self.message = None
+
+ self.ui.replyButton.setEnabled(False)
+ self.ui.replyWidget.hide()
self.connect(self.ui.backendsList, SIGNAL('itemSelectionChanged()'), self._backendChanged)
self.connect(self.ui.threadsList, SIGNAL('itemSelectionChanged()'), self._threadChanged)
self.connect(self.ui.messagesTree, SIGNAL('itemClicked(QTreeWidgetItem *, int)'), self._messageSelected)
self.connect(self.ui.messagesTree, SIGNAL('itemActivated(QTreeWidgetItem *, int)'), self._messageSelected)
+ self.connect(self.ui.replyButton, SIGNAL('clicked()'), self._replyPressed)
+ self.connect(self.ui.sendButton, SIGNAL('clicked()'), self._sendPressed)
def load(self):
self.refreshThreads()
@@ -66,12 +74,19 @@ class MessagesManager(QWidget):
self.ui.messagesTree.clear()
self.ui.threadsList.clear()
+ self.hideReply()
+ self.ui.replyButton.setEnabled(False)
+ self.ui.backendsList.setEnabled(False)
+ self.ui.threadsList.setEnabled(False)
+
self.process_threads = QtDo(self.weboob, self._gotThread)
self.process_threads.do('iter_threads', backends=self.backend, caps=ICapMessages)
def _gotThread(self, backend, thread):
if not backend:
self.process_threads = None
+ self.ui.backendsList.setEnabled(True)
+ self.ui.threadsList.setEnabled(True)
return
item = QListWidgetItem(thread.title)
@@ -85,12 +100,14 @@ class MessagesManager(QWidget):
return
t = selection[0].data(Qt.UserRole).toPyObject()
- print t
self.refreshThreadMessages(*t)
def refreshThreadMessages(self, backend, id):
+ self.ui.messagesTree.clear()
self.ui.backendsList.setEnabled(False)
self.ui.threadsList.setEnabled(False)
+ self.ui.replyButton.setEnabled(False)
+ self.hideReply()
self.process = QtDo(self.weboob, self._gotThreadMessages)
self.process.do('get_thread', id, backends=backend)
@@ -102,11 +119,13 @@ class MessagesManager(QWidget):
self.process = None
return
+ self.thread = thread
+ self.showMessage(thread.root)
self._insert_message(thread.root, self.ui.messagesTree.invisibleRootItem())
def _insert_message(self, message, top):
- item = QTreeWidgetItem(None, [time.strftime('%Y-%m-%d %H:%M:%S', message.date.timetuple()),
- message.sender, message.title])
+ item = QTreeWidgetItem(None, [message.title, message.sender,
+ time.strftime('%Y-%m-%d %H:%M:%S', message.date.timetuple())])
item.setData(0, Qt.UserRole, message)
top.addChild(item)
@@ -116,12 +135,101 @@ class MessagesManager(QWidget):
def _messageSelected(self, item, column):
message = item.data(0, Qt.UserRole).toPyObject()
+
+ self.showMessage(message)
+
+ def showMessage(self, message):
+ self.ui.replyButton.setEnabled(True)
+ self.message = message
+
+ if message.title.startswith('Re:'):
+ self.ui.titleEdit.setText(message.title)
+ else:
+ self.ui.titleEdit.setText('Re: %s' % message.title)
+
if message.flags & message.IS_HTML:
content = message.content
else:
content = message.content.replace('&', '&').replace('<', '<').replace('>', '>')
+
+ extra = u''
+ if message.flags & message.IS_NOT_ACCUSED:
+ extra += u'Status: Unread
'
+ elif message.flags & message.IS_ACCUSED:
+ extra += u'Status: Read
'
+ elif message.flags & message.IS_UNREAD:
+ extra += u'Status: New
'
+
self.ui.messageBody.setText("
%s
" - % (message.title, str(message.date), message.sender, content)) + % (message.title, str(message.date), message.sender, extra, content)) + + def displayReply(self): + self.ui.replyButton.setText(self.tr('Cancel')) + self.ui.replyWidget.show() + + def hideReply(self): + self.ui.replyButton.setText(self.tr('Reply')) + self.ui.replyWidget.hide() + self.ui.replyEdit.clear() + self.ui.titleEdit.clear() + + def _replyPressed(self): + if self.ui.replyWidget.isVisible(): + self.hideReply() + else: + self.displayReply() + + def _sendPressed(self): + if not self.ui.replyWidget.isVisible(): + return + + text = unicode(self.ui.replyEdit.toPlainText()) + title = unicode(self.ui.titleEdit.text()) + + self.ui.replyButton.setEnabled(False) + self.ui.titleEdit.setEnabled(False) + self.ui.replyEdit.setEnabled(False) + self.ui.sendButton.setEnabled(False) + self.ui.sendButton.setText(self.tr('Sending...')) + m = Message(thread=self.thread, + id=0, + title=title, + sender=None, + receiver=None, + content=text, + parent=self.message) + self.process_reply = QtDo(self.weboob, self._postReply_cb, self._postReply_eb) + self.process_reply.do('post_message', m, backends=self.thread.backend) + + def _postReply_cb(self, backend, ignored): + self.ui.replyButton.setEnabled(True) + self.ui.titleEdit.setEnabled(True) + self.ui.titleEdit.clear() + self.ui.replyEdit.setEnabled(True) + self.ui.replyEdit.clear() + self.ui.sendButton.setEnabled(True) + self.ui.sendButton.setText(self.tr('Send')) + self.hideReply() + self.process_reply = None + self.refreshThreadMessages(backend.name, self.thread.id) + + def _postReply_eb(self, backend, error, backtrace): + content = unicode(self.tr('Unable to send message:\n%s\n')) % error + if logging.root.level == logging.DEBUG: + content += '\n%s\n' % backtrace + QMessageBox.critical(self, self.tr('Error while posting reply'), + content, QMessageBox.Ok) + self.ui.replyButton.setEnabled(True) + self.ui.titleEdit.setEnabled(True) + self.ui.titleEdit.clear() + self.ui.replyEdit.setEnabled(True) + self.ui.replyEdit.clear() + self.ui.sendButton.setEnabled(True) + self.ui.sendButton.setText(self.tr('Send')) + self.process_reply = None + + diff --git a/weboob/applications/qboobmsg/ui/messages_manager.ui b/weboob/applications/qboobmsg/ui/messages_manager.ui index 7af558c2..1cbe3f60 100644 --- a/weboob/applications/qboobmsg/ui/messages_manager.ui +++ b/weboob/applications/qboobmsg/ui/messages_manager.ui @@ -13,29 +13,29 @@