Fix stuck history when reaching top
Fix document layout in media attacher Get audio duration on sending Wrap audio as audio in media attacher
This commit is contained in:
parent
205f5e9dec
commit
72d7c4df08
|
@ -2079,7 +2079,7 @@ export default class ChatInput {
|
||||||
]).then(([webpage, canEmbedLinks]) => {
|
]).then(([webpage, canEmbedLinks]) => {
|
||||||
if(this.getWebPagePromise === promise) this.getWebPagePromise = undefined;
|
if(this.getWebPagePromise === promise) this.getWebPagePromise = undefined;
|
||||||
if(this.lastUrl !== url) return;
|
if(this.lastUrl !== url) return;
|
||||||
if(webpage._ === 'webPage' && canEmbedLinks) {
|
if(webpage?._ === 'webPage' && canEmbedLinks) {
|
||||||
this.setTopInfo('webpage', () => {}, webpage.site_name || webpage.title || 'Webpage', webpage.description || webpage.url || '');
|
this.setTopInfo('webpage', () => {}, webpage.site_name || webpage.title || 'Webpage', webpage.description || webpage.url || '');
|
||||||
delete this.noWebPage;
|
delete this.noWebPage;
|
||||||
this.willSendWebPage = webpage;
|
this.willSendWebPage = webpage;
|
||||||
|
|
|
@ -36,7 +36,7 @@ import {AnimationItemGroup} from '../animationIntersector';
|
||||||
import scaleMediaElement from '../../helpers/canvas/scaleMediaElement';
|
import scaleMediaElement from '../../helpers/canvas/scaleMediaElement';
|
||||||
import {doubleRaf} from '../../helpers/schedulers';
|
import {doubleRaf} from '../../helpers/schedulers';
|
||||||
import defineNotNumerableProperties from '../../helpers/object/defineNotNumerableProperties';
|
import defineNotNumerableProperties from '../../helpers/object/defineNotNumerableProperties';
|
||||||
import {Photo, PhotoSize} from '../../layer';
|
import {DocumentAttribute, Photo, PhotoSize} from '../../layer';
|
||||||
import {getPreviewBytesFromURL} from '../../helpers/bytes/getPreviewURLFromBytes';
|
import {getPreviewBytesFromURL} from '../../helpers/bytes/getPreviewURLFromBytes';
|
||||||
import {renderImageFromUrlPromise} from '../../helpers/dom/renderImageFromUrl';
|
import {renderImageFromUrlPromise} from '../../helpers/dom/renderImageFromUrl';
|
||||||
import ButtonMenuToggle from '../buttonMenuToggle';
|
import ButtonMenuToggle from '../buttonMenuToggle';
|
||||||
|
@ -740,8 +740,10 @@ export default class PopupNewMedia extends PopupElement {
|
||||||
params.objectURL ||= await apiManagerProxy.invoke('createObjectURL', file);
|
params.objectURL ||= await apiManagerProxy.invoke('createObjectURL', file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const attributes: DocumentAttribute[] = [];
|
||||||
|
|
||||||
let img: HTMLImageElement;
|
let img: HTMLImageElement;
|
||||||
if(isPhoto) {
|
if(isPhoto && params.objectURL) {
|
||||||
img = new Image();
|
img = new Image();
|
||||||
await renderImageFromUrlPromise(img, params.objectURL);
|
await renderImageFromUrlPromise(img, params.objectURL);
|
||||||
const scaled = await this.scaleImageForTelegram(img, params.file.type);
|
const scaled = await this.scaleImageForTelegram(img, params.file.type);
|
||||||
|
@ -750,13 +752,40 @@ export default class PopupNewMedia extends PopupElement {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const doc = {
|
if(isAudio && params.objectURL) {
|
||||||
|
try {
|
||||||
|
// * get audio duration
|
||||||
|
const audio = new Audio();
|
||||||
|
audio.src = params.objectURL;
|
||||||
|
audio.muted = true;
|
||||||
|
audio.autoplay = true;
|
||||||
|
await onMediaLoad(audio);
|
||||||
|
params.duration = audio.duration;
|
||||||
|
attributes.push({
|
||||||
|
_: 'documentAttributeAudio',
|
||||||
|
duration: params.duration,
|
||||||
|
pFlags: {}
|
||||||
|
});
|
||||||
|
} catch(err) {
|
||||||
|
console.error('audio loading error', err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const doc: MyDocument = {
|
||||||
_: 'document',
|
_: 'document',
|
||||||
file: file,
|
file,
|
||||||
file_name: file.name || '',
|
file_name: file.name || '',
|
||||||
size: file.size,
|
size: file.size,
|
||||||
type: isPhoto ? 'photo' : 'doc'
|
type: isAudio ? 'audio' : (isPhoto ? 'photo' : undefined),
|
||||||
} as MyDocument;
|
access_hash: 0,
|
||||||
|
attributes,
|
||||||
|
date: 0,
|
||||||
|
dc_id: 0,
|
||||||
|
file_reference: [],
|
||||||
|
id: 0,
|
||||||
|
pFlags: {},
|
||||||
|
duration: params.duration
|
||||||
|
};
|
||||||
|
|
||||||
let cacheContext: ThumbCache;
|
let cacheContext: ThumbCache;
|
||||||
if(params.objectURL) {
|
if(params.objectURL) {
|
||||||
|
|
|
@ -819,7 +819,7 @@ export class AppMessagesManager extends AppManager {
|
||||||
voice: options.isVoiceMessage || undefined
|
voice: options.isVoiceMessage || undefined
|
||||||
},
|
},
|
||||||
waveform: options.waveform,
|
waveform: options.waveform,
|
||||||
duration: options.duration || 0
|
duration: options.duration || undefined
|
||||||
};
|
};
|
||||||
|
|
||||||
attributes.push(attribute);
|
attributes.push(attribute);
|
||||||
|
@ -5908,7 +5908,7 @@ export class AppMessagesManager extends AppManager {
|
||||||
const {offset_id_offset, messages} = historyResult as MessagesMessages.messagesMessagesSlice;
|
const {offset_id_offset, messages} = historyResult as MessagesMessages.messagesMessagesSlice;
|
||||||
|
|
||||||
const count = (historyResult as MessagesMessages.messagesMessagesSlice).count || messages.length;
|
const count = (historyResult as MessagesMessages.messagesMessagesSlice).count || messages.length;
|
||||||
const offsetIdOffset = offset_id_offset || 0;
|
const offsetIdOffset = offset_id_offset ?? count - 1;
|
||||||
|
|
||||||
const topWasMeantToLoad = add_offset < 0 ? limit + add_offset : limit;
|
const topWasMeantToLoad = add_offset < 0 ? limit + add_offset : limit;
|
||||||
|
|
||||||
|
|
|
@ -235,16 +235,29 @@
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.document {
|
.document,
|
||||||
--padding: .25rem;
|
.audio {
|
||||||
--icon-size: 4.5rem;
|
|
||||||
--icon-margin: .5rem;
|
--icon-margin: .5rem;
|
||||||
max-width: 100%;
|
--icon-size: 3rem;
|
||||||
overflow: hidden;
|
--padding: .25rem;
|
||||||
cursor: default;
|
|
||||||
height: 5rem;
|
|
||||||
margin: 0 .25rem;
|
margin: 0 .25rem;
|
||||||
border-radius: $border-radius-medium;
|
border-radius: $border-radius-medium;
|
||||||
|
cursor: default;
|
||||||
|
height: 3.5rem;
|
||||||
|
|
||||||
|
@include hover-background-effect() {
|
||||||
|
--message-background-color: var(--light-filled-secondary-text-color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.document {
|
||||||
|
max-width: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
&.document-with-thumb {
|
||||||
|
--icon-size: 4.5rem;
|
||||||
|
height: 5rem;
|
||||||
|
}
|
||||||
|
|
||||||
&-name {
|
&-name {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
@ -263,8 +276,6 @@
|
||||||
border-radius: #{math.div($border-radius-medium, 2)};
|
border-radius: #{math.div($border-radius-medium, 2)};
|
||||||
}
|
}
|
||||||
|
|
||||||
@include hover-background-effect();
|
|
||||||
|
|
||||||
/* &.photo {
|
/* &.photo {
|
||||||
.document-ico {
|
.document-ico {
|
||||||
border-radius: $border-radius;
|
border-radius: $border-radius;
|
||||||
|
|
Loading…
Reference in New Issue