following-fix

This commit is contained in:
Untone 2024-01-23 02:37:18 +03:00
parent 6c5ce12b7e
commit 5548d6d1f7

View File

@ -18,23 +18,28 @@ class Following:
class FollowingManager:
lock = asyncio.Lock()
followers_by_kind = {}
data = {"author": [], "topic": [], "shout": [], "community": []}
@staticmethod
async def register(kind, uid):
async with FollowingManager.lock:
FollowingManager[kind].append(uid)
FollowingManager.followers_by_kind[kind] = FollowingManager.followers_by_kind.get(kind, [])
FollowingManager.followers_by_kind[kind].append(uid)
@staticmethod
async def remove(kind, uid):
async with FollowingManager.lock:
FollowingManager[kind].remove(uid)
followings = FollowingManager.followers_by_kind.get(kind)
if followings:
followings.remove(uid)
FollowingManager.followers_by_kind[kind] = followings
@staticmethod
async def push(kind, payload):
try:
async with FollowingManager.lock:
for entity in FollowingManager[kind]:
for entity in FollowingManager.followers_by_kind.get(kind, []):
if payload.shout["created_by"] == entity.uid:
entity.queue.put_nowait(payload)
except Exception as e: