Telegram Web K with changes to work inside I2P https://web.telegram.i2p/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

76 lines
2.5 KiB

/*
* https://github.com/morethanwords/tweb
* Copyright (C) 2019-2021 Eduard Kuzmenko
* https://github.com/morethanwords/tweb/blob/master/LICENSE
*/
import {MESSAGE_ID_OFFSET} from '../mtproto/mtproto_config';
import getServerMessageId from './utils/messageId/getServerMessageId';
export class AppMessagesIdsManager {
// private channelLocals: {[channelId: ChatId]: number} = {};
// private channelsByLocals: {[local: number]: ChatId} = {};
// private channelCurLocal = 0;
public generateTempMessageId(messageId: number, channelId: ChatId) {
return +(this.generateMessageId(messageId, channelId) + 0.0001).toFixed(4);
}
public generateMessageId(messageId: number, channelId: ChatId) {
if(
!channelId ||
!Number.isInteger(messageId) ||
messageId <= 0
) {
return messageId;
}
messageId = getServerMessageId(messageId);
// let localStart = this.channelLocals[channelId];
const localStart = MESSAGE_ID_OFFSET;
// if(!localStart) {
// localStart = ++this.channelCurLocal * MESSAGE_ID_OFFSET;
// this.channelsByLocals[localStart] = channelId;
// this.channelLocals[channelId] = localStart;
// }
return localStart + messageId;
}
public isLegacyMessageId(messageId: number) {
return typeof(messageId) === 'number' && messageId < MESSAGE_ID_OFFSET;
}
public incrementMessageId(messageId: number, increment: number) {
return this.generateMessageId(getServerMessageId(messageId) + increment, this.isLegacyMessageId(messageId) ? 1 : 0);
}
public getMessageIdInfo(mid: number, channelId?: ChatId) {
const messageId = getServerMessageId(mid);
return {messageId, channelId: mid === messageId ? undefined : channelId};
// if(mid === messageId) {
// return {messageId, channelId: undefined as number};
// }
// const channelId = this.channelsByLocals[mid - messageId];
// return {messageId, channelId};
}
public splitMessageIdsByChannels(mids: number[], _channelId?: ChatId) {
const out: Array<[ChatId, {mids: number[], messageIds: number[]}]> = [];
let prevItem: typeof out[0];
for(let i = 0, length = mids.length; i < length; ++i) {
const mid = mids[i];
const {messageId, channelId} = this.getMessageIdInfo(mid, _channelId);
if(!prevItem || prevItem[0] !== channelId) {
prevItem = [channelId, {mids: [], messageIds: []}];
out.push(prevItem);
}
prevItem[1].mids.push(mid);
prevItem[1].messageIds.push(messageId);
}
return out;
}
}