Avoid conflicting actions during sync

More is likely need for this to work well
This commit is contained in:
Andrew Ferrazzutti 2021-06-30 03:05:49 -04:00
parent 8c2c0126c9
commit 1fddc563e2
2 changed files with 7 additions and 1 deletions

View File

@ -74,4 +74,5 @@ class MatrixHandler(BaseMatrixHandler):
#if await DBMessage.is_last_by_mxid(event_id, portal.mxid):
# Viewing a chat by updating it whole-hog, lest a ninja arrives
await user.sync_portal(portal)
if not user.is_syncing:
await user.sync_portal(portal)

View File

@ -42,6 +42,7 @@ class User(DBUser, BaseUser):
client: Optional[Client]
intent: Optional[IntentAPI]
is_real_user = True
is_syncing: bool
_notice_room_lock: asyncio.Lock
_connection_check_task: Optional[asyncio.Task]
@ -56,6 +57,7 @@ class User(DBUser, BaseUser):
self._connection_check_task = None
self.client = None
self.intent = None
self.is_syncing = False
@classmethod
def init_cls(cls, bridge: 'MessagesBridge') -> None:
@ -130,6 +132,8 @@ class User(DBUser, BaseUser):
await asyncio.sleep(5)
async def sync(self) -> None:
# TODO Use some kind of async lock / event to queue syncing actions
self.is_syncing = True
if self._connection_check_task:
self._connection_check_task.cancel()
self._connection_check_task = self.loop.create_task(self._check_connection_loop())
@ -155,6 +159,7 @@ class User(DBUser, BaseUser):
num_created += 1
await self.send_bridge_notice("Synchronization complete")
await self.client.resume()
self.is_syncing = False
async def sync_portal(self, portal: 'po.Portal') -> None:
chat_id = portal.chat_id