tweb/src/lib/appManagers/appMessagesIDsManager.ts

65 lines
1.7 KiB
TypeScript

export class AppMessagesIDsManager {
public channelLocals = {} as any;
public channelsByLocals = {} as any;
public channelCurLocal = 0;
public fullMsgIDModulus = 4294967296;
public getFullMessageID(msgID: number, channelID: number): number {
if(!channelID || msgID <= 0) {
return msgID;
}
msgID = this.getMessageLocalID(msgID);
var localStart = this.channelLocals[channelID];
if(!localStart) {
localStart = (++this.channelCurLocal) * this.fullMsgIDModulus;
this.channelsByLocals[localStart] = channelID;
this.channelLocals[channelID] = localStart;
}
return localStart + msgID;
}
public getMessageIDInfo(fullMsgID: number) {
if (fullMsgID < this.fullMsgIDModulus) {
return [fullMsgID, 0];
}
var msgID = fullMsgID % this.fullMsgIDModulus;
var channelID = this.channelsByLocals[fullMsgID - msgID];
return [msgID, channelID];
}
public getMessageLocalID(fullMsgID: number) {
if (!fullMsgID) {
return 0;
}
return fullMsgID % this.fullMsgIDModulus;
}
public splitMessageIDsByChannels (mids: any[]) {
var msgIDsByChannels: any = {};
var midsByChannels: any = {};
var i;
var mid, msgChannel;
var channelID;
for(i = 0; i < mids.length; i++) {
mid = mids[i];
msgChannel = this.getMessageIDInfo(mid);
channelID = msgChannel[1];
if(msgIDsByChannels[channelID] === undefined) {
msgIDsByChannels[channelID] = [];
midsByChannels[channelID] = [];
}
msgIDsByChannels[channelID].push(msgChannel[0]);
midsByChannels[channelID].push(mid);
}
return {
msgIDs: msgIDsByChannels,
mids: midsByChannels
};
}
}
export default new AppMessagesIDsManager();