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