group_leave. Chat/group feature helper or route handler. This docstring was expanded to make future maintenance easier. Args: gid: Parameter. Returns: Varies.
(gid: int)
| 14464 | pass |
| 14465 | |
| 14466 | @app.route("/dm/voice/<int:vid>") |
| 14467 | @login_required |
| 14468 | def dm_voice_stream(vid: int): |
| 14469 | """Stream a DM voice message.""" |
| 14470 | me = current_user() |
| 14471 | conn = db_connect() |
| 14472 | row = conn.execute(""" |
| 14473 | SELECT v.id, v.mime, v.stored_path, m.sender, m.recipient |
| 14474 | FROM dm_voice v |
| 14475 | JOIN dm_messages m ON m.id=v.dm_id |
| 14476 | WHERE v.id=? |
| 14477 | """, (vid,)).fetchone() |
| 14478 | conn.close() |
| 14479 | if not row or (me != row["sender"] and me != row["recipient"]): |
| 14480 | abort(404) |
| 14481 | peer = row["recipient"] if row["sender"] == me else row["sender"] |
| 14482 | if not _chat_lock_is_unlocked(me, "dm", peer): |
| 14483 | return redirect(url_for("chat_with", username=peer)) |
| 14484 | sp = row["stored_path"] |
| 14485 | if not sp or not os.path.exists(sp): |
| 14486 | abort(404) |
| 14487 | |
| 14488 | mime = row["mime"] or "audio/webm" |
| 14489 | try: |
| 14490 | if is_encrypted_file(sp): |
| 14491 | gen = aesgcm_decrypt_generator(sp) |
nothing calls this directly
no test coverage detected