From f70b937236a2d91054884f1698c137e6a041ea6c Mon Sep 17 00:00:00 2001 From: Romain Bignon Date: Sun, 4 Jul 2010 16:33:15 +0200 Subject: [PATCH] display messages of the selected contact --- weboob/frontends/qhavesex/contacts.py | 72 ++++++++++-- .../frontends/qhavesex/ui/contact_thread.ui | 84 ++++++++++++++ weboob/frontends/qhavesex/ui/contacts.ui | 17 ++- .../frontends/qhavesex/ui/thread_message.ui | 103 ++++++++++++++++++ 4 files changed, 268 insertions(+), 8 deletions(-) create mode 100644 weboob/frontends/qhavesex/ui/contact_thread.ui create mode 100644 weboob/frontends/qhavesex/ui/thread_message.ui diff --git a/weboob/frontends/qhavesex/contacts.py b/weboob/frontends/qhavesex/contacts.py index c0688e28..6d2c0d37 100644 --- a/weboob/frontends/qhavesex/contacts.py +++ b/weboob/frontends/qhavesex/contacts.py @@ -16,7 +16,8 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. import urllib2 -from PyQt4.QtGui import QWidget, QListWidgetItem, QImage, QIcon, QPixmap +import time +from PyQt4.QtGui import QWidget, QListWidgetItem, QImage, QIcon, QPixmap, QFrame from PyQt4.QtCore import SIGNAL, Qt from weboob.tools.application.qt import QtDo @@ -25,6 +26,55 @@ from weboob.capabilities.chat import ICapChat from weboob.capabilities.messages import ICapMessages from .ui.contacts_ui import Ui_Contacts +from .ui.contact_thread_ui import Ui_ContactThread +from .ui.thread_message_ui import Ui_ThreadMessage + +class ThreadMessage(QFrame): + def __init__(self, message, parent=None): + QFrame.__init__(self, parent) + self.ui = Ui_ThreadMessage() + self.ui.setupUi(self) + + self.date = message.get_date() + + self.ui.nameLabel.setText(message.sender) + self.ui.headerLabel.setText(time.strftime('%Y-%m-%d %H:%M:%S', message.get_date().timetuple())) + if message.is_html: + content = message.content + else: + content = message.content.replace('&', '&').replace('<', '<').replace('>', '>').replace('\n', '
') + self.ui.contentLabel.setText(content) + +class ContactThread(QWidget): + def __init__(self, weboob, contact, parent=None): + QWidget.__init__(self, parent) + self.ui = Ui_ContactThread() + self.ui.setupUi(self) + + self.weboob = weboob + self.contact = contact + self.messages = [] + + self.process = QtDo(self.weboob, self.gotMessage) + self.process.do('iter_messages', thread=self.contact.id) + print self.contact.id + + def gotMessage(self, backend, message): + if not message: + v = self.ui.scrollArea.verticalScrollBar() + print v.minimum(), v.value(), v.maximum(), v.sliderPosition() + self.ui.scrollArea.verticalScrollBar().setValue(self.ui.scrollArea.verticalScrollBar().maximum()) + return + + widget = ThreadMessage(message) + for i, m in enumerate(self.messages): + if widget.date < m.date: + self.ui.scrollAreaContent.layout().insertWidget(i, widget) + self.messages.insert(i, widget) + return + + self.ui.scrollAreaContent.layout().addWidget(widget) + self.messages.append(widget) class IGroup(object): def __init__(self, weboob, id, name): @@ -67,12 +117,17 @@ class ContactsWidget(QWidget): self.connect(self.ui.groupBox, SIGNAL('currentIndexChanged(int)'), self.groupChanged) self.connect(self.ui.contactList, SIGNAL('currentItemChanged(QListWidgetItem*, QListWidgetItem*)'), self.contactChanged) + self.connect(self.ui.refreshButton, SIGNAL('clicked()'), self.refreshContactList) def load(self): self.ui.groupBox.setCurrentIndex(1) def groupChanged(self, i): + self.refreshContactList() + + def refreshContactList(self): self.ui.contactList.clear() + i = self.ui.groupBox.currentIndex() group = self.ui.groupBox.itemData(i).toPyObject() group.iter_contacts(self.addContact) @@ -97,15 +152,18 @@ class ContactsWidget(QWidget): self.ui.contactList.addItem(item) def contactChanged(self, current, previous): - contact = current.data(Qt.UserRole).toPyObject() - self.ui.tabWidget.clear() + self.contact = None + + if not current: + return + + self.contact = current.data(Qt.UserRole).toPyObject() self.ui.tabWidget.addTab(QWidget(), self.tr('Profile')) - if contact.backend.has_caps(ICapMessages): - self.ui.tabWidget.addTab(QWidget(), self.tr('Messages')) - if contact.backend.has_caps(ICapChat): + if self.contact.backend.has_caps(ICapMessages): + self.ui.tabWidget.addTab(ContactThread(self.weboob, self.contact), self.tr('Messages')) + if self.contact.backend.has_caps(ICapChat): self.ui.tabWidget.addTab(QWidget(), self.tr('Chat')) self.ui.tabWidget.addTab(QWidget(), self.tr('Calendar')) self.ui.tabWidget.addTab(QWidget(), self.tr('Notes')) - print contact.backend diff --git a/weboob/frontends/qhavesex/ui/contact_thread.ui b/weboob/frontends/qhavesex/ui/contact_thread.ui new file mode 100644 index 00000000..b52765e5 --- /dev/null +++ b/weboob/frontends/qhavesex/ui/contact_thread.ui @@ -0,0 +1,84 @@ + + + ContactThread + + + + 0 + 0 + 578 + 429 + + + + Form + + + + + + Qt::Vertical + + + + + 0 + 1 + + + + + + + Qt::ScrollBarAsNeeded + + + true + + + Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft + + + + + 0 + 0 + 556 + 187 + + + + QWidget#scrollAreaContent { + background-color: rgb(255, 255, 255); +} + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + + + Send + + + + + + + + + + + + diff --git a/weboob/frontends/qhavesex/ui/contacts.ui b/weboob/frontends/qhavesex/ui/contacts.ui index 4dda35d9..a6632898 100644 --- a/weboob/frontends/qhavesex/ui/contacts.ui +++ b/weboob/frontends/qhavesex/ui/contacts.ui @@ -34,7 +34,22 @@ - + + + + + + + + + + + + ../../../../../../../../usr/share/icons/oxygen/16x16/actions/view-refresh.png../../../../../../../../usr/share/icons/oxygen/16x16/actions/view-refresh.png + + + + diff --git a/weboob/frontends/qhavesex/ui/thread_message.ui b/weboob/frontends/qhavesex/ui/thread_message.ui new file mode 100644 index 00000000..fc98acbe --- /dev/null +++ b/weboob/frontends/qhavesex/ui/thread_message.ui @@ -0,0 +1,103 @@ + + + ThreadMessage + + + + 0 + 0 + 552 + 173 + + + + Frame + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + + + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + 0 + 0 + + + + + + + + + + true + + + + + + + + + + true + + + + + + + Qt::Vertical + + + + 20 + 92 + + + + + + + + + + + +