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: class FollowingManager:
lock = asyncio.Lock() lock = asyncio.Lock()
followers_by_kind = {}
data = {"author": [], "topic": [], "shout": [], "community": []} data = {"author": [], "topic": [], "shout": [], "community": []}
@staticmethod @staticmethod
async def register(kind, uid): async def register(kind, uid):
async with FollowingManager.lock: 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 @staticmethod
async def remove(kind, uid): async def remove(kind, uid):
async with FollowingManager.lock: 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 @staticmethod
async def push(kind, payload): async def push(kind, payload):
try: try:
async with FollowingManager.lock: 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: if payload.shout["created_by"] == entity.uid:
entity.queue.put_nowait(payload) entity.queue.put_nowait(payload)
except Exception as e: except Exception as e: