fix(mobile): pull-refresh loader below the Dynamic Island; in-chat video player
Bug 1: .ptr-ind used top:8px so the pull-to-refresh spinner sat under the notch/Dynamic Island. Now top:calc(var(--sat)+8px) clears the safe-area inset. Bug 2: video attachments rendered as a plain download link that re-downloaded on every tap. Server now sends isVideo/isAudio on message attachments; videos render as an in-chat player — masked poster with a DOWNLOAD button that loads the file ONCE (preload=none -> load on tap), then becomes a PLAY button; playing hands off to native inline controls, so no repeat downloads. build batch155. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+1
-1
@@ -101,7 +101,7 @@ function buildMsgDTO(m, names, userId){
|
||||
}
|
||||
if (m.attachment_id) {
|
||||
const a = R.attachments.byId(m.attachment_id);
|
||||
if (a) d.attachment = { id: a.id, name: a.name, mime: a.mime, size: a.size, isImage: /^image\//.test(a.mime || '') };
|
||||
if (a) d.attachment = { id: a.id, name: a.name, mime: a.mime, size: a.size, isImage: /^image\//.test(a.mime || ''), isVideo: /^video\//.test(a.mime || ''), isAudio: /^audio\//.test(a.mime || '') };
|
||||
}
|
||||
if (m.poll_id) { const p = R.polls.byId(m.poll_id); if (p) d.poll = buildPollDTO(p, userId); }
|
||||
if (m.msg_type) d.byName = (names && names[m.sender_id]) || '';
|
||||
|
||||
Reference in New Issue
Block a user