feat: improve media viewer and push delivery stability
- add unified Android media viewer with swipe navigation, pinch-to-zoom and swipe-to-dismiss\n- move circle videos out of media gallery and surface them in voice/chat info flows\n- align web chat info handling for circle videos and media viewer exclusions\n- stabilize realtime and tablet chat shell updates already staged in this batch\n- fix Celery push delivery loop handling so FCM jobs can read tokens reliably in worker processes
This commit is contained in:
@@ -15,6 +15,19 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
_firebase_app: firebase_admin.App | None = None
|
||||
_worker_loop: asyncio.AbstractEventLoop | None = None
|
||||
|
||||
|
||||
def _get_worker_loop() -> asyncio.AbstractEventLoop:
|
||||
global _worker_loop
|
||||
if _worker_loop is None or _worker_loop.is_closed():
|
||||
_worker_loop = asyncio.new_event_loop()
|
||||
return _worker_loop
|
||||
|
||||
|
||||
def _run_async(coro):
|
||||
loop = _get_worker_loop()
|
||||
return loop.run_until_complete(coro)
|
||||
|
||||
|
||||
def _get_firebase_app() -> firebase_admin.App | None:
|
||||
@@ -63,7 +76,7 @@ def _send_fcm_to_user(user_id: int, title: str, body: str, data: dict[str, Any])
|
||||
logger.info("Skipping FCM send for user=%s: Firebase disabled", user_id)
|
||||
return
|
||||
|
||||
tokens = asyncio.run(_load_tokens(user_id))
|
||||
tokens = _run_async(_load_tokens(user_id))
|
||||
if not tokens:
|
||||
return
|
||||
|
||||
@@ -83,9 +96,9 @@ def _send_fcm_to_user(user_id: int, title: str, body: str, data: dict[str, Any])
|
||||
try:
|
||||
messaging.send(message, app=app)
|
||||
except messaging.UnregisteredError:
|
||||
asyncio.run(_delete_invalid_token(user_id=user_id, platform=platform, token=token))
|
||||
_run_async(_delete_invalid_token(user_id=user_id, platform=platform, token=token))
|
||||
except messaging.SenderIdMismatchError:
|
||||
asyncio.run(_delete_invalid_token(user_id=user_id, platform=platform, token=token))
|
||||
_run_async(_delete_invalid_token(user_id=user_id, platform=platform, token=token))
|
||||
except Exception:
|
||||
logger.exception("FCM send failed for user=%s platform=%s", user_id, platform)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user