diff --git a/weboob/applications/qhavesex/contacts.py b/weboob/applications/qhavesex/contacts.py
index d1aaf6af..eb16c242 100644
--- a/weboob/applications/qhavesex/contacts.py
+++ b/weboob/applications/qhavesex/contacts.py
@@ -43,6 +43,9 @@ class ThreadMessage(QFrame):
self.ui = Ui_ThreadMessage()
self.ui.setupUi(self)
+ self.set_message(message)
+
+ def set_message(self, message):
self.message = message
self.ui.nameLabel.setText(message.sender)
@@ -58,6 +61,7 @@ class ThreadMessage(QFrame):
content = message.content.replace('&', '&').replace('<', '<').replace('>', '>').replace('\n', '
')
self.ui.contentLabel.setText(content)
+
def __eq__(self, m):
return self.message == m.message
@@ -76,6 +80,7 @@ class ContactThread(QWidget):
self.thread = None
self.messages = []
self.process_msg = None
+ self.connect(self.ui.refreshButton, SIGNAL('clicked()'), self.refreshMessages)
if support_reply:
self.connect(self.ui.sendButton, SIGNAL('clicked()'), self.postReply)
@@ -84,12 +89,12 @@ class ContactThread(QWidget):
self.refreshMessages()
- def refreshMessages(self):
+ def refreshMessages(self, fillobj=False):
if self.process_msg:
return
self.process_msg = QtDo(self.weboob, self.gotThread, self.gotError)
- if self.thread:
+ if fillobj and self.thread:
self.process_msg.do('fillobj', self.thread, ['root'], backends=self.contact.backend)
else:
self.process_msg.do('get_thread', self.contact.id, backends=self.contact.backend)
@@ -120,6 +125,9 @@ class ContactThread(QWidget):
def _insert_message(self, message):
widget = ThreadMessage(message)
if widget in self.messages:
+ old_widget = self.messages[self.messages.index(widget)]
+ if old_widget.message.flags != widget.message.flags:
+ old_widget.set_message(widget.message)
return
for i, m in enumerate(self.messages):
@@ -148,7 +156,7 @@ class ContactThread(QWidget):
button.hide()
button.deleteLater()
- self.refreshMessages()
+ self.refreshMessages(fillobj=True)
def postReply(self):
text = unicode(self.ui.textEdit.toPlainText())
@@ -306,7 +314,7 @@ class ContactsWidget(QWidget):
self.ui.groupBox.setCurrentIndex(1)
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.contactList, SIGNAL('itemClicked(QListWidgetItem*)'), self.contactChanged)
self.connect(self.ui.refreshButton, SIGNAL('clicked()'), self.refreshContactList)
def load(self):
@@ -369,18 +377,17 @@ class ContactsWidget(QWidget):
self.ui.contactList.addItem(item)
- def contactChanged(self, current, previous):
- self.ui.tabWidget.clear()
- self.contact = None
-
+ def contactChanged(self, current):
if not current:
return
- self.contact = current.data(Qt.UserRole).toPyObject()
+ contact = current.data(Qt.UserRole).toPyObject()
- if not self.contact:
+ if not contact or contact == self.contact:
return
+ self.ui.tabWidget.clear()
+ self.contact = contact
backend = self.weboob.get_backend(self.contact.backend)
self.ui.tabWidget.addTab(ContactProfile(self.weboob, self.contact), self.tr('Profile'))
diff --git a/weboob/applications/qhavesex/ui/contact_thread.ui b/weboob/applications/qhavesex/ui/contact_thread.ui
index 37a6a062..3387f01c 100644
--- a/weboob/applications/qhavesex/ui/contact_thread.ui
+++ b/weboob/applications/qhavesex/ui/contact_thread.ui
@@ -13,13 +13,19 @@
Form
-
+
-
Qt::Vertical
+
+
+ 0
+ 0
+
+
QFrame::StyledPanel
@@ -52,41 +58,81 @@
-
+
-
+
0
- 1
+ 5
-
-
-
-
- Qt::ScrollBarAsNeeded
-
-
- true
-
-
- Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft
-
-
-
-
- 0
- 0
- 556
- 187
-
+
+
+ 0
-
- QWidget#scrollAreaContent {
+ -
+
+
-
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+
+ ../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../usr/share/icons/oxygen/16x16/actions/view-refresh.png../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../usr/share/icons/oxygen/16x16/actions/view-refresh.png
+
+
+
+
+
+ -
+
+
+
+ 0
+ 1
+
+
+
+
+
+
+ Qt::ScrollBarAsNeeded
+
+
+ true
+
+
+ Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft
+
+
+
+
+ 0
+ 0
+ 556
+ 154
+
+
+
+ QWidget#scrollAreaContent {
background-color: rgb(255, 255, 255);
}
-
-
-
+
+
+
+
+
+
diff --git a/weboob/capabilities/base.py b/weboob/capabilities/base.py
index b98381f4..9bf786e4 100644
--- a/weboob/capabilities/base.py
+++ b/weboob/capabilities/base.py
@@ -118,6 +118,12 @@ class CapBaseObject(object):
for attrstr in self.FIELDS:
yield attrstr, getattr(self, attrstr)
+ def __eq__(self, obj):
+ if isinstance(obj, CapBaseObject):
+ return self.backend == obj.backend and self.id == obj.id
+ else:
+ return False
+
class _AttribValue(object):
def __init__(self, type, value):
self.type = type