Browse Source

Fix migrated peers

master
Eduard Kuzmenko 4 years ago
parent
commit
6ce8a2619e
  1. 3
      src/components/avatar.ts
  2. 2
      src/components/chat/bubbles.ts
  3. 3
      src/layer.d.ts
  4. 55
      src/lib/appManagers/appChatsManager.ts
  5. 26
      src/lib/appManagers/appMessagesManager.ts
  6. 5
      src/scripts/in/schema_additional_params.json

3
src/components/avatar.ts

@ -4,6 +4,7 @@ import rootScope from "../lib/rootScope";
import { attachClickEvent, cancelEvent } from "../helpers/dom"; import { attachClickEvent, cancelEvent } from "../helpers/dom";
import AppMediaViewer, { AppMediaViewerAvatar } from "./appMediaViewer"; import AppMediaViewer, { AppMediaViewerAvatar } from "./appMediaViewer";
import { Photo } from "../layer"; import { Photo } from "../layer";
import appPeersManager from "../lib/appManagers/appPeersManager";
//import type { LazyLoadQueueIntersector } from "./lazyLoadQueue"; //import type { LazyLoadQueueIntersector } from "./lazyLoadQueue";
rootScope.on('avatar_update', (e) => { rootScope.on('avatar_update', (e) => {
@ -126,7 +127,7 @@ export default class AvatarElement extends HTMLElement {
return; return;
} }
this.peerId = +newValue; this.peerId = appPeersManager.getPeerMigratedTo(+newValue) || +newValue;
this.update(); this.update();
} else if(name === 'peer-title') { } else if(name === 'peer-title') {
this.peerTitle = newValue; this.peerTitle = newValue;

2
src/components/chat/bubbles.ts

@ -1403,7 +1403,7 @@ export default class ChatBubbles {
} }
} }
const isJump = lastMsgId !== topMessage && topMessage !== 0 && lastMsgId !== 0; const isJump = lastMsgId !== topMessage;
if(samePeer) { if(samePeer) {
const mounted = this.getMountedBubble(lastMsgId); const mounted = this.getMountedBubble(lastMsgId);

3
src/layer.d.ts vendored

@ -592,7 +592,8 @@ export namespace Chat {
version: number, version: number,
migrated_to?: InputChannel, migrated_to?: InputChannel,
admin_rights?: ChatAdminRights, admin_rights?: ChatAdminRights,
default_banned_rights?: ChatBannedRights default_banned_rights?: ChatBannedRights,
rTitle?: string
}; };
export type chatForbidden = { export type chatForbidden = {

55
src/lib/appManagers/appChatsManager.ts

@ -1,7 +1,7 @@
import { MOUNT_CLASS_TO } from "../../config/debug"; import { MOUNT_CLASS_TO } from "../../config/debug";
import { numberThousandSplitter } from "../../helpers/number"; import { numberThousandSplitter } from "../../helpers/number";
import { isObject, safeReplaceObject, copy } from "../../helpers/object"; import { isObject, safeReplaceObject, copy } from "../../helpers/object";
import { ChatAdminRights, ChatBannedRights, ChatFull, ChatParticipants, InputChannel, InputChatPhoto, InputFile, InputPeer, SendMessageAction, Updates } from "../../layer"; import { Chat, ChatAdminRights, ChatBannedRights, ChatFull, ChatParticipants, InputChannel, InputChatPhoto, InputFile, InputPeer, SendMessageAction, Updates } from "../../layer";
import apiManager from '../mtproto/mtprotoworker'; import apiManager from '../mtproto/mtprotoworker';
import { RichTextProcessor } from "../richtextprocessor"; import { RichTextProcessor } from "../richtextprocessor";
import rootScope from "../rootScope"; import rootScope from "../rootScope";
@ -11,63 +11,14 @@ import appProfileManager from "./appProfileManager";
import appStateManager from "./appStateManager"; import appStateManager from "./appStateManager";
import appUsersManager from "./appUsersManager"; import appUsersManager from "./appUsersManager";
export type Channel = { export type Channel = Chat.channel;
_: 'channel',
flags: number,
pFlags: Partial<{
creator: true,
left: true,
broadcast: true,
verified: true,
megagroup: true,
restricted: true,
signatures: true,
min: true,
scam: true,
has_link: true,
has_geo: true,
slowmode_enabled: true
}>,
id: number,
access_hash?: string,
title: string,
username?: string,
photo: any,
date: number,
version: number,
restriction_reason?: any,
admin_rights?: any,
banned_rights?: any,
default_banned_rights?: any,
participants_count: number
};
export type Chat = {
_: 'chat',
flags: number,
pFlags: Partial<{
creator: true,
kicked: true,
left: true,
deactivated: true
}>,
id: number,
title: string,
photo: any,
participants_count: number,
date: number,
version: number,
migrated_to?: any,
admin_rights?: any,
default_banned_rights?: any
};
export type ChatRights = 'send' | 'edit_title' | 'edit_photo' | 'invite' | 'pin' | 'deleteRevoke' | 'delete'; export type ChatRights = 'send' | 'edit_title' | 'edit_photo' | 'invite' | 'pin' | 'deleteRevoke' | 'delete';
export type UserTyping = Partial<{userId: number, action: SendMessageAction, timeout: number}>; export type UserTyping = Partial<{userId: number, action: SendMessageAction, timeout: number}>;
export class AppChatsManager { export class AppChatsManager {
public chats: {[id: number]: Channel | Chat | any} = {}; public chats: {[id: number]: Chat.channel | Chat.chat | any} = {};
//public usernames: any = {}; //public usernames: any = {};
//public channelAccess: any = {}; //public channelAccess: any = {};
//public megagroups: {[id: number]: true} = {}; //public megagroups: {[id: number]: true} = {};

26
src/lib/appManagers/appMessagesManager.ts

@ -22,7 +22,7 @@ import DialogsStorage from "../storages/dialogs";
import FiltersStorage from "../storages/filters"; import FiltersStorage from "../storages/filters";
//import { telegramMeWebService } from "../mtproto/mtproto"; //import { telegramMeWebService } from "../mtproto/mtproto";
import apiUpdatesManager from "./apiUpdatesManager"; import apiUpdatesManager from "./apiUpdatesManager";
import appChatsManager, { Channel } from "./appChatsManager"; import appChatsManager from "./appChatsManager";
import appDocsManager, { MyDocument } from "./appDocsManager"; import appDocsManager, { MyDocument } from "./appDocsManager";
import appDownloadManager from "./appDownloadManager"; import appDownloadManager from "./appDownloadManager";
import appPeersManager from "./appPeersManager"; import appPeersManager from "./appPeersManager";
@ -2884,8 +2884,8 @@ export class AppMessagesManager {
const wasDialogBefore = this.getDialogByPeerId(peerId)[0]; const wasDialogBefore = this.getDialogByPeerId(peerId)[0];
dialog.top_message = mid; dialog.top_message = mid;
dialog.read_inbox_max_id = wasDialogBefore && !dialog.read_inbox_max_id ? wasDialogBefore.read_inbox_max_id : this.generateMessageId(dialog.read_inbox_max_id); dialog.read_inbox_max_id = this.generateMessageId(wasDialogBefore && !dialog.read_inbox_max_id ? wasDialogBefore.read_inbox_max_id : dialog.read_inbox_max_id);
dialog.read_outbox_max_id = wasDialogBefore && !dialog.read_outbox_max_id ? wasDialogBefore.read_outbox_max_id : this.generateMessageId(dialog.read_outbox_max_id); dialog.read_outbox_max_id = this.generateMessageId(wasDialogBefore && !dialog.read_outbox_max_id ? wasDialogBefore.read_outbox_max_id : dialog.read_outbox_max_id);
if(!dialog.hasOwnProperty('folder_id')) { if(!dialog.hasOwnProperty('folder_id')) {
if(dialog._ === 'dialog') { if(dialog._ === 'dialog') {
@ -4573,16 +4573,15 @@ export class AppMessagesManager {
} }
public getHistory(peerId: number, maxId = 0, limit: number, backLimit?: number, threadId?: number): Promise<HistoryResult> | HistoryResult { public getHistory(peerId: number, maxId = 0, limit: number, backLimit?: number, threadId?: number): Promise<HistoryResult> | HistoryResult {
if(this.migratedFromTo[peerId]) { /* if(this.migratedFromTo[peerId]) {
peerId = this.migratedFromTo[peerId]; peerId = this.migratedFromTo[peerId];
} } */
const historyStorage = this.getHistoryStorage(peerId, threadId); const historyStorage = this.getHistoryStorage(peerId, threadId);
let offset = 0; let offset = 0;
let offsetNotFound = false; let offsetNotFound = false;
const isMigrated = !!this.migratedToFrom[peerId];
const reqPeerId = peerId; const reqPeerId = peerId;
if(maxId) { if(maxId) {
@ -4626,9 +4625,9 @@ export class AppMessagesManager {
return this.requestHistory(reqPeerId, maxId, limit, offset, undefined, threadId).then((historyResult) => { return this.requestHistory(reqPeerId, maxId, limit, offset, undefined, threadId).then((historyResult) => {
historyStorage.count = (historyResult as MessagesMessages.messagesMessagesSlice).count || historyResult.messages.length; historyStorage.count = (historyResult as MessagesMessages.messagesMessagesSlice).count || historyResult.messages.length;
if(isMigrated) { /* if(!!this.migratedToFrom[peerId]) {
historyStorage.count++; historyStorage.count++;
} } */
const history = (historyResult.messages as MyMessage[]).map(message => message.mid); const history = (historyResult.messages as MyMessage[]).map(message => message.mid);
return { return {
@ -4660,7 +4659,8 @@ export class AppMessagesManager {
public fillHistoryStorage(peerId: number, maxId: number, fullLimit: number, historyStorage: HistoryStorage, threadId?: number): Promise<boolean> { public fillHistoryStorage(peerId: number, maxId: number, fullLimit: number, historyStorage: HistoryStorage, threadId?: number): Promise<boolean> {
// this.log('fill history storage', peerId, maxId, fullLimit, angular.copy(historyStorage)) // this.log('fill history storage', peerId, maxId, fullLimit, angular.copy(historyStorage))
const offset = (this.migratedFromTo[peerId] && !maxId) ? 1 : 0; //const offset = (this.migratedFromTo[peerId] && !maxId) ? 1 : 0;
const offset = 0;
return this.requestHistory(peerId, maxId, fullLimit, offset, undefined, threadId).then((historyResult) => { return this.requestHistory(peerId, maxId, fullLimit, offset, undefined, threadId).then((historyResult) => {
historyStorage.count = (historyResult as MessagesMessages.messagesMessagesSlice).count || historyResult.messages.length; historyStorage.count = (historyResult as MessagesMessages.messagesMessagesSlice).count || historyResult.messages.length;
@ -4691,17 +4691,17 @@ export class AppMessagesManager {
const totalCount = historyStorage.history.length; const totalCount = historyStorage.history.length;
fullLimit -= (totalCount - wasTotalCount); fullLimit -= (totalCount - wasTotalCount);
const migratedNextPeer = this.migratedFromTo[peerId]; /* const migratedNextPeer = this.migratedFromTo[peerId];
const migratedPrevPeer = this.migratedToFrom[peerId] const migratedPrevPeer = this.migratedToFrom[peerId]
const isMigrated = migratedNextPeer !== undefined || migratedPrevPeer !== undefined; const isMigrated = migratedNextPeer !== undefined || migratedPrevPeer !== undefined;
if(isMigrated) { if(isMigrated) {
historyStorage.count = Math.max(historyStorage.count, totalCount) + 1; historyStorage.count = Math.max(historyStorage.count, totalCount) + 1;
} } */
if(fullLimit > 0) { if(fullLimit > 0) {
maxId = historyStorage.history[totalCount - 1]; maxId = historyStorage.history[totalCount - 1];
if(isMigrated) { /* if(isMigrated) {
if(!historyResult.messages.length) { if(!historyResult.messages.length) {
if(migratedPrevPeer) { if(migratedPrevPeer) {
maxId = 0; maxId = 0;
@ -4713,7 +4713,7 @@ export class AppMessagesManager {
} }
return this.fillHistoryStorage(peerId, maxId, fullLimit, historyStorage, threadId); return this.fillHistoryStorage(peerId, maxId, fullLimit, historyStorage, threadId);
} else if(totalCount < historyStorage.count) { } else */if(totalCount < historyStorage.count) {
return this.fillHistoryStorage(peerId, maxId, fullLimit, historyStorage, threadId); return this.fillHistoryStorage(peerId, maxId, fullLimit, historyStorage, threadId);
} }
} }

5
src/scripts/in/schema_additional_params.json

@ -139,4 +139,9 @@
{"name": "rReply", "type": "string"}, {"name": "rReply", "type": "string"},
{"name": "rMessage", "type": "string"} {"name": "rMessage", "type": "string"}
] ]
}, {
"predicate": "chat",
"params": [
{"name": "rTitle", "type": "string"}
]
}] }]
Loading…
Cancel
Save