Philipp Hörist pushed to branch archive_cache at gajim / gajim
Commits: fe8954cc by lovetox at 2022-08-28T23:44:57+02:00 fix: Convert Enums to json
- - - - -
3 changed files:
- gajim/common/storage/base.py - gajim/common/storage/events.py - gajim/gtk/control.py
Changes:
===================================== gajim/common/storage/base.py ===================================== @@ -30,11 +30,15 @@
from gi.repository import GLib
+import nbxmpp.const from nbxmpp.protocol import Iq from nbxmpp.protocol import JID from nbxmpp.structs import RosterItem from nbxmpp.structs import DiscoInfo from nbxmpp.structs import CommonError +from nbxmpp.const import Role +from nbxmpp.const import Affiliation +from nbxmpp.const import StatusCode from nbxmpp.modules.discovery import parse_disco_info
@@ -99,7 +103,7 @@ def _adapt_disco_info(disco_info: DiscoInfo) -> str:
def _convert_json(json_string: bytes) -> dict[str, Any]: - return json.loads(json_string) + return json.loads(json_string, object_hook=json_decoder)
sqlite3.register_converter('JSON', _convert_json) @@ -118,6 +122,10 @@ def default(self, o: Any) -> Any: dct['__type'] = 'RosterItem' return dct
+ if isinstance(o, (Affiliation, Role, StatusCode)): + return {'value': o.value, + '__type': o.__class__.__name__} + return json.JSONEncoder.default(self, o)
@@ -125,8 +133,10 @@ def json_decoder(dct: dict[str, Any]) -> Any: type_ = dct.get('__type') if type_ is None: return dct + if type_ == 'JID': return JID.from_string(dct['value']) + if type_ == 'RosterItem': return RosterItem(jid=dct['jid'], name=dct['name'], @@ -134,6 +144,10 @@ def json_decoder(dct: dict[str, Any]) -> Any: subscription=dct['subscription'], approved=dct['approved'], groups=set(dct['groups'])) + + if type_ in ('Affiliation', 'Role', 'StatusCode'): + return getattr(nbxmpp.const, type_)(dct['value']) + return dct
===================================== gajim/common/storage/events.py ===================================== @@ -27,6 +27,7 @@
from gajim.common import events from gajim.common.storage.base import SqliteStorage +from gajim.common.storage.base import Encoder from gajim.common.types import ChatContactT
@@ -109,7 +110,7 @@ def store(self, contact.jid, name, timestamp, - json.dumps(event_dict))) + json.dumps(event_dict, cls=Encoder)))
def load(self, contact: ChatContactT,
===================================== gajim/gtk/control.py ===================================== @@ -627,35 +627,37 @@ def _fetch_n_lines_history(self, if isinstance(event, events.MUCUserJoined): self._process_muc_user_joined(event)
- if isinstance(event, events.MUCUserLeft): + elif isinstance(event, events.MUCUserLeft): self._process_muc_user_left(event)
- if isinstance(event, events.MUCNicknameChanged): + elif isinstance(event, events.MUCNicknameChanged): self._process_muc_nickname_changed(event)
- if isinstance(event, events.MUCRoomKicked): + elif isinstance(event, events.MUCRoomKicked): self._process_muc_room_kicked(event)
- if isinstance(event, events.MUCUserAffiliationChanged): + elif isinstance(event, events.MUCUserAffiliationChanged): self._process_muc_user_affiliation_changed(event)
- if isinstance(event, events.MUCUserRoleChanged): + elif isinstance(event, events.MUCUserRoleChanged): self._process_muc_user_role_changed(event)
- if isinstance(event, events.MUCUserStatusShowChanged): + elif isinstance(event, events.MUCUserStatusShowChanged): self._process_muc_user_status_show_changed(event)
- if isinstance(event, events.MUCRoomConfigChanged): + elif isinstance(event, events.MUCRoomConfigChanged): self._process_muc_room_config_changed(event)
- if isinstance(event, events.MUCRoomConfigFinished): + elif isinstance(event, events.MUCRoomConfigFinished): self._process_muc_room_config_finished(event)
- if isinstance(event, events.MUCRoomPresenceError): + elif isinstance(event, events.MUCRoomPresenceError): self._process_muc_room_presence_error(event)
- if isinstance(event, events.MUCRoomDestroyed): + elif isinstance(event, events.MUCRoomDestroyed): self._process_muc_room_destroyed(event) + else: + raise ValueError('Unknown event: %s' % event)
self._scrolled_view.block_signals(False)
@@ -833,12 +835,11 @@ def _on_user_affiliation_changed(self,
self._process_muc_user_affiliation_changed(event)
- def _process_muc_user_affiliation_changed(self, - event: events.MUCUserAffiliationChanged - ) -> None: + def _process_muc_user_affiliation_changed( + self, + event: events.MUCUserAffiliationChanged) -> None:
affiliation = helpers.get_uf_affiliation(event.affiliation) - nick = event.name
reason = event.reason reason = '' if reason is None else f': {reason}' @@ -857,7 +858,7 @@ def _process_muc_user_affiliation_changed(self, else: message = _('** Affiliation of {nick} has been set to ' '{affiliation}{actor}{reason}').format( - nick=nick, + nick=event.nick, affiliation=affiliation, actor=actor, reason=reason) @@ -908,9 +909,9 @@ def _on_user_status_show_changed(self,
self._process_muc_user_status_show_changed(event)
- def _process_muc_user_status_show_changed(self, - event: events.MUCUserStatusShowChanged - ) -> None: + def _process_muc_user_status_show_changed( + self, + event: events.MUCUserStatusShowChanged) -> None:
nick = event.nick status = event.status
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/commit/fe8954ccde14467ebf0e87b2ed5eb17c2...