Improve things and attempt to fix issue #49
This commit is contained in:
+37
-24
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user