Improve things and attempt to fix issue #49

This commit is contained in:
Tulir Asokan
2018-02-08 23:11:55 +02:00
parent a4a7cb2472
commit edd290e27f
+37 -24
View File
@@ -46,7 +46,7 @@ class Portal:
by_tgid = {} by_tgid = {}
def __init__(self, tgid, peer_type, tg_receiver=None, mxid=None, username=None, title=None, def __init__(self, tgid, peer_type, tg_receiver=None, mxid=None, username=None, title=None,
about=None, photo_id=None): about=None, photo_id=None, save_to_cache=True):
self.mxid = mxid self.mxid = mxid
self.tgid = tgid self.tgid = tgid
self.tg_receiver = tg_receiver or tgid self.tg_receiver = tg_receiver or tgid
@@ -60,10 +60,11 @@ class Portal:
self._dedup = deque() self._dedup = deque()
self._dedup_mxid = {} self._dedup_mxid = {}
if tgid: if save_to_cache:
self.by_tgid[self.tgid_full] = self if tgid:
if mxid: self.by_tgid[self.tgid_full] = self
self.by_mxid[mxid] = self if mxid:
self.by_mxid[mxid] = self
@property @property
def tgid_full(self): def tgid_full(self):
@@ -698,7 +699,8 @@ class Portal:
if duplicate_found: if duplicate_found:
mxid, other_tg_space = duplicate_found mxid, other_tg_space = duplicate_found
if tg_space != other_tg_space: if tg_space != other_tg_space:
self.db.add(DBMessage(tgid=evt.id, mx_room=self.mxid, mxid=mxid, tg_space=tg_space)) self.db.add(
DBMessage(tgid=evt.id, mx_room=self.mxid, mxid=mxid, tg_space=tg_space))
self.db.commit() self.db.commit()
return return
@@ -794,17 +796,24 @@ class Portal:
elif isinstance(participant, (ChatParticipantCreator, ChannelParticipantCreator)): elif isinstance(participant, (ChatParticipantCreator, ChannelParticipantCreator)):
new_level = 95 new_level = 95
update_user_level = (user and (user.mxid in levels["users"] or new_level > 0) user_levels = levels["users"]
and levels["users"][user.mxid] != new_level)
if update_user_level:
levels["users"][user.mxid] = new_level
changed = True
update_puppet_level = (puppet and (puppet.mxid in levels["users"] or new_level > 0) if user:
and levels["users"][puppet.mxid] != new_level) user_level_defined = user.mxid in user_levels
if update_puppet_level: user_has_right_level = (user_levels[user.mxid] != new_level
levels["users"][puppet.mxid] = new_level if user_level_defined else new_level == 0)
changed = True if not user_has_right_level:
levels["users"][user.mxid] = new_level
changed = True
if puppet:
puppet_level_defined = puppet.mxid in user_levels
puppet_has_right_level = (user_levels[puppet.mxid] != new_level
if puppet_level_defined else new_level == 0)
if not puppet_has_right_level:
levels["users"][puppet.mxid] = new_level
changed = True
if changed: if changed:
self.main_intent.set_power_levels(self.mxid, levels) self.main_intent.set_power_levels(self.mxid, levels)
@@ -819,11 +828,13 @@ class Portal:
# endregion # endregion
# region Database conversion # region Database conversion
def to_db(self): def to_db(self, merge=True):
return self.db.merge( portal = DBPortal(tgid=self.tgid, tg_receiver=self.tg_receiver, peer_type=self.peer_type,
DBPortal(tgid=self.tgid, tg_receiver=self.tg_receiver, peer_type=self.peer_type, mxid=self.mxid, username=self.username, title=self.title,
mxid=self.mxid, username=self.username, title=self.title, about=self.about, photo_id=self.photo_id)
about=self.about, photo_id=self.photo_id)) if merge:
return self.db.merge(portal)
return portal
def migrate_and_save(self, new_id): def migrate_and_save(self, new_id):
existing = DBPortal.query.get(self.tgid_full) existing = DBPortal.query.get(self.tgid_full)
@@ -883,9 +894,11 @@ class Portal:
return cls.from_db(portal) return cls.from_db(portal)
if peer_type: if peer_type:
portal = Portal(tgid, peer_type=peer_type, tg_receiver=tg_receiver) portal = Portal(tgid, peer_type=peer_type, tg_receiver=tg_receiver,
cls.db.add(portal.to_db()) save_to_cache=False)
portal.save() cls.db.add(portal.to_db(merge=False))
cls.db.commit()
cls.by_tgid[portal.tgid_full] = portal
return portal return portal
return None return None