Philipp Hörist pushed to branch master at gajim / gajim
Commits: 78fd6fb0 by lovetox at 2022-09-04T11:00:38+02:00 change: Add requirement for min sqlite version
- - - - - 5dbcf0b2 by lovetox at 2022-09-04T12:01:34+02:00 refactor: Contacts: Move presence change detection to MUC module
- - - - -
4 changed files:
- README.md - gajim/common/modules/contacts.py - gajim/common/modules/muc.py - gajim/gajim.py
Changes:
===================================== README.md ===================================== @@ -19,6 +19,7 @@ ### Runtime Requirements - [GtkSourceView](https://gitlab.gnome.org/GNOME/gtksourceview) - [Pango](https://gitlab.gnome.org/GNOME/pango) (>=1.50.0) - [libsoup](https://gitlab.gnome.org/GNOME/libsoup/) +- [sqlite](https://www.sqlite.org/) (>=3.33.0)
### Optional Runtime Requirements
===================================== gajim/common/modules/contacts.py ===================================== @@ -797,7 +797,7 @@ def is_not_joined(self) -> bool:
def set_not_joined(self) -> None: for contact in self._resources.values(): - contact.update_presence(UNKNOWN_MUC_PRESENCE, notify=False) + contact.update_presence(UNKNOWN_MUC_PRESENCE)
def get_user_nicknames(self) -> list[str]: client = app.get_client(self._account) @@ -922,39 +922,8 @@ def get_avatar(self, return app.app.avatar_storage.get_surface( self, size, scale, show, style=style)
- def update_presence(self, - presence: MUCPresenceData, - *args: Any, - notify: bool = True - ) -> None: - if not notify: - self._presence = presence - return - - if not self._presence.available and presence.available: - self._presence = presence - self.notify('user-joined', *args) - return - - if not presence.available: - self._presence = presence - self.notify('user-left', *args) - return - - signals: list[str] = [] - if self._presence.affiliation != presence.affiliation: - signals.append('user-affiliation-changed') - - if self._presence.role != presence.role: - signals.append('user-role-changed') - - if (self._presence.status != presence.status or - self._presence.show != presence.show): - signals.append('user-status-show-changed') - + def update_presence(self, presence: MUCPresenceData) -> None: self._presence = presence - for signal in signals: - self.notify(signal, *args)
def update_avatar(self, *args: Any) -> None: app.app.avatar_storage.invalidate_cache(self._jid)
===================================== gajim/common/modules/muc.py ===================================== @@ -61,6 +61,7 @@ from gajim.common.modules.bits_of_binary import store_bob_data from gajim.common.modules.base import BaseModule from gajim.common.modules.contacts import GroupchatContact +from gajim.common.modules.contacts import GroupchatParticipant
log = logging.getLogger('gajim.c.m.muc')
@@ -587,7 +588,9 @@ def _on_muc_user_presence(self, self._joined_users[room.jid][nickname] = occupant.presence
presence = self._process_user_presence(properties) - occupant.update_presence(presence, properties) + self._process_occupant_presence_change(properties, + presence, + occupant)
room.notify('user-nickname-changed', occupant, @@ -613,7 +616,9 @@ def _on_muc_user_presence(self, self._start_join_timeout(room_jid)
presence = self._process_user_presence(properties) - occupant.update_presence(presence, properties) + self._process_occupant_presence_change(properties, + presence, + occupant) return
if properties.is_muc_self_presence and properties.is_kicked: @@ -639,7 +644,38 @@ def _on_muc_user_presence(self, log.warning(stanza) return
- occupant.update_presence(presence, properties) + self._process_occupant_presence_change(properties, presence, occupant) + + def _process_occupant_presence_change( + self, + properties: PresenceProperties, + presence: MUCPresenceData, + occupant: GroupchatParticipant) -> None: + + if not occupant.is_available and presence.available: + occupant.update_presence(presence) + occupant.notify('user-joined', properties) + return + + if not presence.available: + occupant.update_presence(presence) + occupant.notify('user-left', properties) + return + + signals: list[str] = [] + if occupant.affiliation != presence.affiliation: + signals.append('user-affiliation-changed') + + if occupant.role != presence.role: + signals.append('user-role-changed') + + if (occupant.status != presence.status or + occupant.show != presence.show): + signals.append('user-status-show-changed') + + occupant.update_presence(presence) + for signal in signals: + occupant.notify(signal, properties)
def _process_user_presence(self, properties: PresenceProperties
===================================== gajim/gajim.py ===================================== @@ -21,6 +21,7 @@ import os import sys import signal +import sqlite3 import platform from ctypes import CDLL, byref, create_string_buffer from ctypes.util import find_library @@ -36,6 +37,7 @@ _MIN_PYGOBJECT_VER = '3.32.0' _MIN_GLIB_VER = '2.60.0' _MIN_PANGO_VER = '1.50.0' +_MIN_SQLITE_VER = '3.33.0'
def check_version(dep_name: str, current_ver: str, min_ver: str) -> None: @@ -92,6 +94,7 @@ def _check_required_deps() -> None: check_version('gtk3', gtk_ver, _MIN_GTK_VER) check_version('glib', glib_ver, _MIN_GLIB_VER) check_version('pango', Pango.version_string(), _MIN_PANGO_VER) + check_version('sqlite', sqlite3.sqlite_version, _MIN_SQLITE_VER)
def _init_gui(gui: str) -> None:
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/compare/af02c6bd53fad4e0065951597bd7ec80...