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
+
+
+
+
+
+
+
+
+
+
+
+