Fix playing timestamp on album item
Fix wrapping message in grouped documents
This commit is contained in:
parent
2b661d4ca2
commit
a6364eba57
|
@ -133,6 +133,7 @@ import {PopupPeerCheckboxOptions} from '../popups/peer';
|
||||||
import toggleDisability from '../../helpers/dom/toggleDisability';
|
import toggleDisability from '../../helpers/dom/toggleDisability';
|
||||||
import {copyTextToClipboard} from '../../helpers/clipboard';
|
import {copyTextToClipboard} from '../../helpers/clipboard';
|
||||||
import liteMode from '../../helpers/liteMode';
|
import liteMode from '../../helpers/liteMode';
|
||||||
|
import getMediaDurationFromMessage from '../../lib/appManagers/utils/messages/getMediaDurationFromMessage';
|
||||||
|
|
||||||
export const USER_REACTIONS_INLINE = false;
|
export const USER_REACTIONS_INLINE = false;
|
||||||
const USE_MEDIA_TAILS = false;
|
const USE_MEDIA_TAILS = false;
|
||||||
|
@ -735,7 +736,8 @@ export default class ChatBubbles {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
return {bubble: result.bubble, message, changedResults};
|
// can be .document-container
|
||||||
|
return {bubble: findUpClassName(result.bubble, 'bubble'), message, changedResults};
|
||||||
});
|
});
|
||||||
|
|
||||||
let top: number;
|
let top: number;
|
||||||
|
@ -3303,15 +3305,22 @@ export default class ChatBubbles {
|
||||||
return {cached, promise: setPeerPromise};
|
return {cached, promise: setPeerPromise};
|
||||||
}
|
}
|
||||||
|
|
||||||
public playMediaWithTimestamp(bubble: HTMLElement, timestamp: number) {
|
public playMediaWithTimestamp(element: HTMLElement, timestamp: number) {
|
||||||
const attachment = bubble.querySelector<HTMLElement>('.attachment');
|
const bubble = findUpClassName(element, 'bubble');
|
||||||
|
const groupedItem = findUpClassName(element, 'grouped-item');
|
||||||
|
const albumItemMid = groupedItem ? +groupedItem.dataset.mid : +bubble.dataset.textMid;
|
||||||
|
let attachment = bubble.querySelector<HTMLElement>('.attachment');
|
||||||
if(attachment) {
|
if(attachment) {
|
||||||
|
if(albumItemMid) {
|
||||||
|
attachment = attachment.querySelector(`[data-mid="${albumItemMid}"]`);
|
||||||
|
}
|
||||||
|
|
||||||
const media = attachment.querySelector<HTMLElement>('img, video, canvas');
|
const media = attachment.querySelector<HTMLElement>('img, video, canvas');
|
||||||
this.checkTargetForMediaViewer(media, undefined, timestamp);
|
this.checkTargetForMediaViewer(media, undefined, timestamp);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const audio = bubble.querySelector<AudioElement>('.audio');
|
const audio = (groupedItem || bubble).querySelector<AudioElement>('.audio');
|
||||||
if(audio) {
|
if(audio) {
|
||||||
audio.playWithTimestamp(timestamp);
|
audio.playWithTimestamp(timestamp);
|
||||||
return;
|
return;
|
||||||
|
@ -3874,10 +3883,10 @@ export default class ChatBubbles {
|
||||||
|
|
||||||
let messageMedia: MessageMedia = isMessage && message.media;
|
let messageMedia: MessageMedia = isMessage && message.media;
|
||||||
let needToSetHTML = true;
|
let needToSetHTML = true;
|
||||||
let messageMessage: string, totalEntities: MessageEntity[];
|
let messageMessage: string, totalEntities: MessageEntity[], albumTextMessage: Message.message;
|
||||||
if(isMessage) {
|
if(isMessage) {
|
||||||
if(groupedId && albumMustBeRenderedFull) {
|
if(groupedId && albumMustBeRenderedFull) {
|
||||||
const t = getAlbumText(albumMessages);
|
const t = albumTextMessage = getAlbumText(albumMessages);
|
||||||
messageMessage = t?.message || '';
|
messageMessage = t?.message || '';
|
||||||
// totalEntities = t.entities;
|
// totalEntities = t.entities;
|
||||||
totalEntities = t?.totalEntities || [];
|
totalEntities = t?.totalEntities || [];
|
||||||
|
@ -3925,9 +3934,12 @@ export default class ChatBubbles {
|
||||||
|
|
||||||
customEmojiSize ??= this.chat.appImManager.customEmojiSize;
|
customEmojiSize ??= this.chat.appImManager.customEmojiSize;
|
||||||
|
|
||||||
const doc = (messageMedia as MessageMedia.messageMediaDocument)?.document as MyDocument;
|
const maxMediaTimestamp = needToSetHTML && getMediaDurationFromMessage(albumTextMessage || message as Message.message);
|
||||||
|
if(albumTextMessage && needToSetHTML) {
|
||||||
|
bubble.dataset.textMid = '' + albumTextMessage.mid;
|
||||||
|
}
|
||||||
|
|
||||||
const richText = wrapRichText(messageMessage, {
|
const richTextOptions: Parameters<typeof wrapRichText>[1] = {
|
||||||
entities: totalEntities,
|
entities: totalEntities,
|
||||||
passEntities: this.passEntities,
|
passEntities: this.passEntities,
|
||||||
loadPromises,
|
loadPromises,
|
||||||
|
@ -3935,8 +3947,10 @@ export default class ChatBubbles {
|
||||||
customEmojiSize,
|
customEmojiSize,
|
||||||
middleware,
|
middleware,
|
||||||
animationGroup: this.chat.animationGroup,
|
animationGroup: this.chat.animationGroup,
|
||||||
maxMediaTimestamp: ((['voice', 'audio', 'video'] as MyDocument['type'][]).includes(doc?.type) && doc.duration) || undefined
|
maxMediaTimestamp
|
||||||
});
|
};
|
||||||
|
|
||||||
|
const richText = messageMessage ? wrapRichText(messageMessage, richTextOptions) : '';
|
||||||
|
|
||||||
let canHaveTail = true;
|
let canHaveTail = true;
|
||||||
let isStandaloneMedia = false;
|
let isStandaloneMedia = false;
|
||||||
|
@ -4621,7 +4635,8 @@ export default class ChatBubbles {
|
||||||
} : undefined,
|
} : undefined,
|
||||||
sizeType: 'documentName',
|
sizeType: 'documentName',
|
||||||
fontSize: rootScope.settings.messagesTextSize,
|
fontSize: rootScope.settings.messagesTextSize,
|
||||||
richTextFragment: richText,
|
richTextFragment: typeof(richText) === 'string' ? undefined : richText,
|
||||||
|
richTextOptions,
|
||||||
canTranscribeVoice: true
|
canTranscribeVoice: true
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -8,12 +8,32 @@ import setInnerHTML from '../../helpers/dom/setInnerHTML';
|
||||||
import {MediaSizeType} from '../../helpers/mediaSizes';
|
import {MediaSizeType} from '../../helpers/mediaSizes';
|
||||||
import {Message} from '../../layer';
|
import {Message} from '../../layer';
|
||||||
import {AppManagers} from '../../lib/appManagers/managers';
|
import {AppManagers} from '../../lib/appManagers/managers';
|
||||||
|
import getMediaDurationFromMessage from '../../lib/appManagers/utils/messages/getMediaDurationFromMessage';
|
||||||
|
import wrapRichText from '../../lib/richTextProcessor/wrapRichText';
|
||||||
import {MediaSearchContext} from '../appMediaPlaybackController';
|
import {MediaSearchContext} from '../appMediaPlaybackController';
|
||||||
import Chat from '../chat/chat';
|
import Chat from '../chat/chat';
|
||||||
import LazyLoadQueue from '../lazyLoadQueue';
|
import LazyLoadQueue from '../lazyLoadQueue';
|
||||||
import wrapDocument from './document';
|
import wrapDocument from './document';
|
||||||
|
|
||||||
export default async function wrapGroupedDocuments({albumMustBeRenderedFull, message, bubble, messageDiv, chat, loadPromises, autoDownloadSize, lazyLoadQueue, searchContext, useSearch, sizeType, managers, fontWeight, fontSize, richTextFragment, canTranscribeVoice}: {
|
export default async function wrapGroupedDocuments({
|
||||||
|
albumMustBeRenderedFull,
|
||||||
|
message,
|
||||||
|
bubble,
|
||||||
|
messageDiv,
|
||||||
|
chat,
|
||||||
|
loadPromises,
|
||||||
|
autoDownloadSize,
|
||||||
|
lazyLoadQueue,
|
||||||
|
searchContext,
|
||||||
|
useSearch,
|
||||||
|
sizeType,
|
||||||
|
managers,
|
||||||
|
fontWeight,
|
||||||
|
fontSize,
|
||||||
|
richTextFragment,
|
||||||
|
richTextOptions,
|
||||||
|
canTranscribeVoice
|
||||||
|
}: {
|
||||||
albumMustBeRenderedFull: boolean,
|
albumMustBeRenderedFull: boolean,
|
||||||
message: any,
|
message: any,
|
||||||
messageDiv: HTMLElement,
|
messageDiv: HTMLElement,
|
||||||
|
@ -30,6 +50,7 @@ export default async function wrapGroupedDocuments({albumMustBeRenderedFull, mes
|
||||||
fontWeight?: number,
|
fontWeight?: number,
|
||||||
fontSize?: number,
|
fontSize?: number,
|
||||||
richTextFragment?: DocumentFragment,
|
richTextFragment?: DocumentFragment,
|
||||||
|
richTextOptions?: Parameters<typeof wrapRichText>[1]
|
||||||
canTranscribeVoice?: boolean
|
canTranscribeVoice?: boolean
|
||||||
}) {
|
}) {
|
||||||
let nameContainer: HTMLElement;
|
let nameContainer: HTMLElement;
|
||||||
|
@ -65,7 +86,17 @@ export default async function wrapGroupedDocuments({albumMustBeRenderedFull, mes
|
||||||
const messageDiv = document.createElement('div');
|
const messageDiv = document.createElement('div');
|
||||||
messageDiv.classList.add('document-message');
|
messageDiv.classList.add('document-message');
|
||||||
|
|
||||||
setInnerHTML(messageDiv, richTextFragment);
|
let fragment = richTextFragment;
|
||||||
|
if(!fragment) {
|
||||||
|
fragment = wrapRichText(message.message, {
|
||||||
|
...richTextOptions,
|
||||||
|
entities: message.totalEntities,
|
||||||
|
maxMediaTimestamp: getMediaDurationFromMessage(message)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
setInnerHTML(messageDiv, fragment);
|
||||||
|
|
||||||
wrapper.append(messageDiv);
|
wrapper.append(messageDiv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -630,7 +630,7 @@ export class AppImManager extends EventListenerBase<{
|
||||||
const timestamp = +element.dataset.timestamp;
|
const timestamp = +element.dataset.timestamp;
|
||||||
const bubble = findUpClassName(element, 'bubble');
|
const bubble = findUpClassName(element, 'bubble');
|
||||||
if(bubble) {
|
if(bubble) {
|
||||||
this.chat.bubbles.playMediaWithTimestamp(bubble, timestamp);
|
this.chat.bubbles.playMediaWithTimestamp(element, timestamp);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
import {Document, Message, MessageMedia} from '../../../../layer';
|
||||||
|
|
||||||
|
export default function getMediaDurationFromMessage(message: Message.message) {
|
||||||
|
const doc = (message.media as MessageMedia.messageMediaDocument)?.document as Document.document;
|
||||||
|
const duration = ((['voice', 'audio', 'video'] as Document.document['type'][]).includes(doc?.type) && doc.duration) || undefined;
|
||||||
|
return duration;
|
||||||
|
}
|
Loading…
Reference in New Issue