diff --git a/app/media/service.py b/app/media/service.py index b848bf9..a2d7bfc 100644 --- a/app/media/service.py +++ b/app/media/service.py @@ -23,6 +23,8 @@ ALLOWED_MIME_TYPES = { "video/webm", "audio/mpeg", "audio/ogg", + "audio/mp4", + "audio/x-m4a", "audio/webm", "audio/wav", "application/pdf", diff --git a/docs/core-checklist-status.md b/docs/core-checklist-status.md index 8997bdb..4c5732e 100644 --- a/docs/core-checklist-status.md +++ b/docs/core-checklist-status.md @@ -23,7 +23,7 @@ Legend: 14. Delivery Status - `DONE` (sent/delivered/read + reconnect reconciliation after backend restarts) 15. Typing Realtime - `DONE` (typing start/stop + recording voice start/stop + recording video start/stop in circle-video send flow) 16. Media & Attachments - `DONE` (upload/preview/download/gallery; sticker/GIF inline media no longer opens photo viewer on click) -17. Voice Messages - `PARTIAL` (record/send/play/seek + global speed 1x/1.5x/2x; recorder uses improved mime priority for better duration metadata; audio store tracks duration via `durationchange/seekable` fallback; websocket send/recorder stop race on fast chat switch is guarded; UX still being polished) +17. Voice Messages - `PARTIAL` (record/send/play/seek + global speed 1x/1.5x/2x; recorder uses improved mime priority for better duration metadata; backend media allowlist includes `audio/mp4`/`audio/x-m4a`; audio store tracks duration via `durationchange/seekable` fallback; websocket send/recorder stop race on fast chat switch is guarded; UX still being polished) 18. Circle Video Messages - `PARTIAL` (send/play present, recording UX basic) 19. Stickers - `PARTIAL` (web sticker picker with preset pack + favorites) 20. GIF - `PARTIAL` (web GIF picker with Tenor search + preset fallback + favorites)