# HG changeset patch # User Goffi # Date 1468769566 -7200 # Node ID 90134b2e3dc4c6839b258cbc3cf772abc3548748 # Parent 8a749ec21c50d7d26919f1766dc7a4c47b6b5ee1 primitivus, quick_frontends: show global notifications counter in contact_list + method to get these notifications in QuickApp diff -r 8a749ec21c50 -r 90134b2e3dc4 frontends/src/primitivus/contact_list.py --- a/frontends/src/primitivus/contact_list.py Sun Jul 17 17:12:42 2016 +0200 +++ b/frontends/src/primitivus/contact_list.py Sun Jul 17 17:32:46 2016 +0200 @@ -49,6 +49,8 @@ urwid.connect_signal(self, 'click', on_click, user_data) if on_change: urwid.connect_signal(self, 'change', on_change, user_data) + self.host.addListener('notification', self.onNotification, [self.profile]) + self.host.addListener('notificationsClear', self.onNotification, [self.profile]) def update(self, entities=None, type_=None, profile=None): """Update display, keep focus""" @@ -151,6 +153,14 @@ self.host.modeHint(C.MODE_INSERTION) self._emit('click', entity) + def onNotification(self, entity, notif, profile): + notifs = self.host.getNotifs(C.ENTITY_ALL, profile=self.profile) + if notifs: + self.title_dynamic = u"({})".format(len(notifs)) + else: + self.title_dynamic = None + self.host.redraw() # FIXME: should not be necessary + # Methods to build the widget def _buildEntityWidget(self, entity, keys=None, use_bare_jid=False, with_notifs=True, with_show_attr=True, markup_prepend=None, markup_append = None): diff -r 8a749ec21c50 -r 90134b2e3dc4 frontends/src/quick_frontend/quick_app.py --- a/frontends/src/quick_frontend/quick_app.py Sun Jul 17 17:12:42 2016 +0200 +++ b/frontends/src/quick_frontend/quick_app.py Sun Jul 17 17:32:46 2016 +0200 @@ -607,18 +607,24 @@ def getNotifs(self, entity, type_=None, profile=C.PROF_KEY_NONE): """return notifications for given entity - @param entity(jid.JID, None): bare jid of the entity to check + @param entity(jid.JID, None, C.ENTITY_ALL): bare jid of the entity to check None to get general notifications + C.ENTITY_ALL to get all notifications @param type_(unicode, None): notification type to filter None to get all notifications @return (list[dict]): list of notifications """ notif_dict = self.profiles[profile].notifications + ret = [] + if entity == C.ENTITY_ALL: + for type_notifs in notif_dict.itervalues(): + for notifs_list in type_notifs.itervalues(): + ret.extend(notifs_list) + return ret key = '' if entity is None else entity.bare key_notifs = notif_dict.setdefault(key, {}) if type_ is not None: - return key_notifs.get(type_, []) - ret = [] + return key_notifs.get(type_, ret) for notifs_list in key_notifs.itervalues(): ret.extend(notifs_list) return ret