Fix broken chatlist due to certain service message
This commit is contained in:
parent
b2f5c08934
commit
5f9d12c3d8
@ -106,7 +106,7 @@ export default class DropdownHover extends EventListenerBase<{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if((this.element.style.display && enable === undefined) || enable) {
|
if((this.element.style.display && enable === undefined) || enable) {
|
||||||
const res = this.dispatchEvent('open');
|
const res = this.dispatchResultableEvent('open');
|
||||||
await Promise.all(res);
|
await Promise.all(res);
|
||||||
|
|
||||||
this.element.style.display = '';
|
this.element.style.display = '';
|
||||||
|
@ -107,16 +107,13 @@ export default class EventListenerBase<Listeners extends Record<string, Function
|
|||||||
}
|
}
|
||||||
|
|
||||||
// * must be protected, but who cares
|
// * must be protected, but who cares
|
||||||
public dispatchEvent<T extends keyof Listeners>(name: T, ...args: ArgumentTypes<Listeners[T]>) {
|
private _dispatchEvent<T extends keyof Listeners>(name: T, collectResults: boolean, ...args: ArgumentTypes<Listeners[T]>) {
|
||||||
if(this.reuseResults) {
|
if(this.reuseResults) {
|
||||||
this.listenerResults[name] = args;
|
this.listenerResults[name] = args;
|
||||||
}
|
}
|
||||||
|
|
||||||
const arr: Array<SuperReturnType<Listeners[typeof name]>> = [];
|
const arr: Array<SuperReturnType<Listeners[typeof name]>> = collectResults && [];
|
||||||
|
|
||||||
/* let a = e.wm.get(this)[name];
|
|
||||||
if(!a) return arr;
|
|
||||||
const listeners = [...a]; */
|
|
||||||
const listeners = this.listeners[name];
|
const listeners = this.listeners[name];
|
||||||
if(listeners) {
|
if(listeners) {
|
||||||
// ! this one will guarantee execution even if delete another listener during setting
|
// ! this one will guarantee execution even if delete another listener during setting
|
||||||
@ -127,28 +124,35 @@ export default class EventListenerBase<Listeners extends Record<string, Function
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
arr.push(listener.callback(...args));
|
let result: any;
|
||||||
|
try {
|
||||||
|
result = listener.callback(...args);
|
||||||
|
} catch(err) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(arr) {
|
||||||
|
arr.push(result);
|
||||||
|
}
|
||||||
|
|
||||||
if((listener.options as AddEventListenerOptions)?.once) {
|
if((listener.options as AddEventListenerOptions)?.once) {
|
||||||
this.removeEventListener(name, listener.callback);
|
this.removeEventListener(name, listener.callback);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/* for(let i = 0, length = listeners.length; i < length; ++i) {
|
|
||||||
const listener = listeners[i];
|
|
||||||
arr.push(listener.callback(...args));
|
|
||||||
|
|
||||||
if(listener.once) {
|
|
||||||
listeners.splice(i, 1);
|
|
||||||
--i;
|
|
||||||
--length;
|
|
||||||
}
|
|
||||||
} */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return arr;
|
return arr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public dispatchResultableEvent<T extends keyof Listeners>(name: T, ...args: ArgumentTypes<Listeners[T]>) {
|
||||||
|
return this._dispatchEvent(name, true, ...args);
|
||||||
|
}
|
||||||
|
|
||||||
|
// * must be protected, but who cares
|
||||||
|
public dispatchEvent<T extends keyof Listeners>(name: T, ...args: ArgumentTypes<Listeners[T]>) {
|
||||||
|
this._dispatchEvent(name, false, ...args);
|
||||||
|
}
|
||||||
|
|
||||||
public cleanup() {
|
public cleanup() {
|
||||||
this.listeners = {};
|
this.listeners = {};
|
||||||
this.listenerResults = {};
|
this.listenerResults = {};
|
||||||
|
@ -2933,10 +2933,7 @@ export class AppMessagesManager {
|
|||||||
return el;
|
return el;
|
||||||
}
|
}
|
||||||
|
|
||||||
public wrapMessageActionTextNew(message: MyMessage, plain: true): string;
|
private wrapMessageActionTextNewUnsafe(message: MyMessage, plain?: boolean) {
|
||||||
public wrapMessageActionTextNew(message: MyMessage, plain?: false): HTMLElement;
|
|
||||||
public wrapMessageActionTextNew(message: MyMessage, plain: boolean): HTMLElement | string;
|
|
||||||
public wrapMessageActionTextNew(message: MyMessage, plain?: boolean): HTMLElement | string {
|
|
||||||
const element: HTMLElement = plain ? undefined : document.createElement('span');
|
const element: HTMLElement = plain ? undefined : document.createElement('span');
|
||||||
const action = 'action' in message && message.action;
|
const action = 'action' in message && message.action;
|
||||||
|
|
||||||
@ -3134,7 +3131,7 @@ export class AppMessagesManager {
|
|||||||
|
|
||||||
if(users.length > 1) {
|
if(users.length > 1) {
|
||||||
const joined = join(
|
const joined = join(
|
||||||
users.map((userId: UserId) => (getNameDivHTML(userId.toPeerId(), plain) as string).trim()),
|
users.map((userId: UserId) => getNameDivHTML(userId.toPeerId(), plain)),
|
||||||
false,
|
false,
|
||||||
plain
|
plain
|
||||||
);
|
);
|
||||||
@ -3190,6 +3187,18 @@ export class AppMessagesManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public wrapMessageActionTextNew(message: MyMessage, plain: true): string;
|
||||||
|
public wrapMessageActionTextNew(message: MyMessage, plain?: false): HTMLElement;
|
||||||
|
public wrapMessageActionTextNew(message: MyMessage, plain: boolean): HTMLElement | string;
|
||||||
|
public wrapMessageActionTextNew(message: MyMessage, plain?: boolean): HTMLElement | string {
|
||||||
|
try {
|
||||||
|
return this.wrapMessageActionTextNewUnsafe(message, plain);
|
||||||
|
} catch(err) {
|
||||||
|
this.log.error('wrapMessageActionTextNewUnsafe error:', err);
|
||||||
|
return plain ? '' : document.createElement('span');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public reportMessages(peerId: PeerId, mids: number[], reason: ReportReason['_'], message?: string) {
|
public reportMessages(peerId: PeerId, mids: number[], reason: ReportReason['_'], message?: string) {
|
||||||
return apiManager.invokeApiSingle('messages.report', {
|
return apiManager.invokeApiSingle('messages.report', {
|
||||||
peer: appPeersManager.getInputPeerById(peerId),
|
peer: appPeersManager.getInputPeerById(peerId),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user