From 4c42091926b4ccf9377aede60bd50831a286501c Mon Sep 17 00:00:00 2001 From: morethanwords Date: Thu, 11 Mar 2021 07:06:44 +0400 Subject: [PATCH] Notification exceptions --- src/components/chat/bubbles.ts | 6 +- src/components/chat/chat.ts | 7 +- src/components/chat/input.ts | 5 +- src/components/chat/topbar.ts | 15 ++--- .../sidebarLeft/tabs/notifications.ts | 3 +- .../sidebarRight/tabs/sharedMedia.ts | 9 +-- src/lib/appManagers/appDialogsManager.ts | 20 +++--- src/lib/appManagers/appImManager.ts | 3 +- src/lib/appManagers/appMessagesManager.ts | 34 +++++----- .../appManagers/appNotificationsManager.ts | 65 +++++++++++++++---- src/lib/appManagers/appPeersManager.ts | 15 ++--- src/lib/rootScope.ts | 7 +- 12 files changed, 117 insertions(+), 72 deletions(-) diff --git a/src/components/chat/bubbles.ts b/src/components/chat/bubbles.ts index 8def39b5..378f7e0a 100644 --- a/src/components/chat/bubbles.ts +++ b/src/components/chat/bubbles.ts @@ -460,10 +460,8 @@ export default class ChatBubbles { } }); - this.listenerSetter.add(rootScope, 'dialog_notify_settings', (e) => { - const peerId = e; - - if(this.peerId === peerId) { + this.listenerSetter.add(rootScope, 'dialog_notify_settings', (dialog) => { + if(this.peerId === dialog.peerId) { this.chat.input.setUnreadCount(); } }); diff --git a/src/components/chat/chat.ts b/src/components/chat/chat.ts index 89e8406c..8a6563ee 100644 --- a/src/components/chat/chat.ts +++ b/src/components/chat/chat.ts @@ -1,3 +1,4 @@ +import type { AppNotificationsManager } from "../../lib/appManagers/appNotificationsManager"; import type { AppChatsManager } from "../../lib/appManagers/appChatsManager"; import type { AppDocsManager } from "../../lib/appManagers/appDocsManager"; import type { AppImManager } from "../../lib/appManagers/appImManager"; @@ -53,7 +54,7 @@ export default class Chat extends EventListenerBase<{ public type: ChatType = 'chat'; - constructor(public appImManager: AppImManager, public appChatsManager: AppChatsManager, public appDocsManager: AppDocsManager, public appInlineBotsManager: AppInlineBotsManager, public appMessagesManager: AppMessagesManager, public appPeersManager: AppPeersManager, public appPhotosManager: AppPhotosManager, public appProfileManager: AppProfileManager, public appStickersManager: AppStickersManager, public appUsersManager: AppUsersManager, public appWebPagesManager: AppWebPagesManager, public appPollsManager: AppPollsManager, public apiManager: ApiManagerProxy, public appDraftsManager: AppDraftsManager, public serverTimeManager: ServerTimeManager, public storage: typeof sessionStorage) { + constructor(public appImManager: AppImManager, public appChatsManager: AppChatsManager, public appDocsManager: AppDocsManager, public appInlineBotsManager: AppInlineBotsManager, public appMessagesManager: AppMessagesManager, public appPeersManager: AppPeersManager, public appPhotosManager: AppPhotosManager, public appProfileManager: AppProfileManager, public appStickersManager: AppStickersManager, public appUsersManager: AppUsersManager, public appWebPagesManager: AppWebPagesManager, public appPollsManager: AppPollsManager, public apiManager: ApiManagerProxy, public appDraftsManager: AppDraftsManager, public serverTimeManager: ServerTimeManager, public storage: typeof sessionStorage, public appNotificationsManager: AppNotificationsManager) { super(); this.container = document.createElement('div'); @@ -113,9 +114,9 @@ export default class Chat extends EventListenerBase<{ public init(peerId: number) { this.initPeerId = peerId; - this.topbar = new ChatTopbar(this, appSidebarRight, this.appMessagesManager, this.appPeersManager, this.appChatsManager); + this.topbar = new ChatTopbar(this, appSidebarRight, this.appMessagesManager, this.appPeersManager, this.appChatsManager, this.appNotificationsManager); this.bubbles = new ChatBubbles(this, this.appMessagesManager, this.appStickersManager, this.appUsersManager, this.appInlineBotsManager, this.appPhotosManager, this.appDocsManager, this.appPeersManager, this.appChatsManager, this.storage); - this.input = new ChatInput(this, this.appMessagesManager, this.appDocsManager, this.appChatsManager, this.appPeersManager, this.appWebPagesManager, this.appImManager, this.appDraftsManager, this.serverTimeManager); + this.input = new ChatInput(this, this.appMessagesManager, this.appDocsManager, this.appChatsManager, this.appPeersManager, this.appWebPagesManager, this.appImManager, this.appDraftsManager, this.serverTimeManager, this.appNotificationsManager); this.selection = new ChatSelection(this, this.bubbles, this.input, this.appMessagesManager); this.contextMenu = new ChatContextMenu(this.bubbles.bubblesContainer, this, this.appMessagesManager, this.appChatsManager, this.appPeersManager, this.appPollsManager); diff --git a/src/components/chat/input.ts b/src/components/chat/input.ts index cdd26ca2..ae3ba178 100644 --- a/src/components/chat/input.ts +++ b/src/components/chat/input.ts @@ -1,3 +1,4 @@ +import type { AppNotificationsManager } from '../../lib/appManagers/appNotificationsManager'; import type { AppChatsManager } from '../../lib/appManagers/appChatsManager'; import type { AppDocsManager, MyDocument } from "../../lib/appManagers/appDocsManager"; import type { AppMessagesManager } from "../../lib/appManagers/appMessagesManager"; @@ -114,7 +115,7 @@ export default class ChatInput { public saveDraftDebounced: () => void; - constructor(private chat: Chat, private appMessagesManager: AppMessagesManager, private appDocsManager: AppDocsManager, private appChatsManager: AppChatsManager, private appPeersManager: AppPeersManager, private appWebPagesManager: AppWebPagesManager, private appImManager: AppImManager, private appDraftsManager: AppDraftsManager, private serverTimeManager: ServerTimeManager) { + constructor(private chat: Chat, private appMessagesManager: AppMessagesManager, private appDocsManager: AppDocsManager, private appChatsManager: AppChatsManager, private appPeersManager: AppPeersManager, private appWebPagesManager: AppWebPagesManager, private appImManager: AppImManager, private appDraftsManager: AppDraftsManager, private serverTimeManager: ServerTimeManager, private appNotificationsManager: AppNotificationsManager) { this.listenerSetter = new ListenerSetter(); } @@ -552,7 +553,7 @@ export default class ChatInput { const dialog = this.appMessagesManager.getDialogByPeerId(this.chat.peerId)[0]; const count = dialog?.unread_count; this.goDownUnreadBadge.innerText = '' + (count || ''); - this.goDownUnreadBadge.classList.toggle('badge-gray', this.appMessagesManager.isPeerMuted(this.chat.peerId)); + this.goDownUnreadBadge.classList.toggle('badge-gray', this.appNotificationsManager.isPeerLocalMuted(this.chat.peerId, true)); } public saveDraft() { diff --git a/src/components/chat/topbar.ts b/src/components/chat/topbar.ts index 3e937336..750f33bf 100644 --- a/src/components/chat/topbar.ts +++ b/src/components/chat/topbar.ts @@ -1,3 +1,4 @@ +import type { AppNotificationsManager } from "../../lib/appManagers/appNotificationsManager"; import type { AppChatsManager, Channel } from "../../lib/appManagers/appChatsManager"; import type { AppMessagesManager } from "../../lib/appManagers/appMessagesManager"; import type { AppPeersManager } from "../../lib/appManagers/appPeersManager"; @@ -47,7 +48,7 @@ export default class ChatTopbar { public menuButtons: (ButtonMenuItemOptions & {verify: () => boolean})[] = []; - constructor(private chat: Chat, private appSidebarRight: AppSidebarRight, private appMessagesManager: AppMessagesManager, private appPeersManager: AppPeersManager, private appChatsManager: AppChatsManager) { + constructor(private chat: Chat, private appSidebarRight: AppSidebarRight, private appMessagesManager: AppMessagesManager, private appPeersManager: AppPeersManager, private appChatsManager: AppChatsManager, private appNotificationsManager: AppNotificationsManager) { this.listenerSetter = new ListenerSetter(); } @@ -190,14 +191,14 @@ export default class ChatTopbar { onClick: () => { this.appMessagesManager.mutePeer(this.peerId); }, - verify: () => this.chat.type === 'chat' && rootScope.myId !== this.peerId && !this.appMessagesManager.isPeerMuted(this.peerId) + verify: () => this.chat.type === 'chat' && rootScope.myId !== this.peerId && !this.appNotificationsManager.isPeerLocalMuted(this.peerId, false) }, { icon: 'unmute', text: 'Unmute', onClick: () => { this.appMessagesManager.mutePeer(this.peerId); }, - verify: () => this.chat.type === 'chat' && rootScope.myId !== this.peerId && this.appMessagesManager.isPeerMuted(this.peerId) + verify: () => this.chat.type === 'chat' && rootScope.myId !== this.peerId && this.appNotificationsManager.isPeerLocalMuted(this.peerId, false) }, { icon: 'select', text: 'Select Messages', @@ -280,10 +281,8 @@ export default class ChatTopbar { } }); - this.listenerSetter.add(rootScope, 'dialog_notify_settings', (e) => { - const peerId = e; - - if(peerId === this.peerId) { + this.listenerSetter.add(rootScope, 'dialog_notify_settings', (dialog) => { + if(dialog.peerId === this.peerId) { this.setMutedState(); } }); @@ -487,7 +486,7 @@ export default class ChatTopbar { if(!this.btnMute) return; const peerId = this.peerId; - let muted = this.appMessagesManager.isPeerMuted(peerId); + let muted = this.appNotificationsManager.isPeerLocalMuted(peerId, false); if(this.appPeersManager.isBroadcast(peerId)) { // not human this.btnMute.classList.remove('tgico-mute', 'tgico-unmute'); this.btnMute.classList.add(muted ? 'tgico-unmute' : 'tgico-mute'); diff --git a/src/components/sidebarLeft/tabs/notifications.ts b/src/components/sidebarLeft/tabs/notifications.ts index 89834a64..47fe5509 100644 --- a/src/components/sidebarLeft/tabs/notifications.ts +++ b/src/components/sidebarLeft/tabs/notifications.ts @@ -39,7 +39,8 @@ export default class AppNotificationsTab extends SliderSuperTabEventable { this.scrollable.append(section.container); const inputNotifyPeer = {_: options.inputKey}; - appNotificationsManager.getNotifySettings(inputNotifyPeer).then((notifySettings) => { + const ret = appNotificationsManager.getNotifySettings(inputNotifyPeer); + (ret instanceof Promise ? ret : Promise.resolve(ret)).then((notifySettings) => { const applySettings = () => { const muted = appNotificationsManager.isMuted(notifySettings); enabledRow.checkboxField.value = !muted; diff --git a/src/components/sidebarRight/tabs/sharedMedia.ts b/src/components/sidebarRight/tabs/sharedMedia.ts index 376b402e..f6a2013a 100644 --- a/src/components/sidebarRight/tabs/sharedMedia.ts +++ b/src/components/sidebarRight/tabs/sharedMedia.ts @@ -14,6 +14,7 @@ import CheckboxField from "../../checkboxField"; import { attachClickEvent, cancelEvent } from "../../../helpers/dom"; import appSidebarRight from ".."; import { TransitionSlider } from "../../transition"; +import appNotificationsManager from "../../../lib/appManagers/appNotificationsManager"; let setText = (text: string, el: HTMLDivElement) => { window.requestAnimationFrame(() => { @@ -126,9 +127,9 @@ export default class AppSharedMediaTab implements SliderTab { appMessagesManager.mutePeer(this.peerId); }); - rootScope.on('dialog_notify_settings', (e) => { - if(this.peerId === e) { - const muted = appMessagesManager.isPeerMuted(this.peerId); + rootScope.on('dialog_notify_settings', (dialog) => { + if(this.peerId === dialog.peerId) { + const muted = appNotificationsManager.isPeerLocalMuted(this.peerId, false); this.profileElements.notificationsCheckbox.checked = !muted; this.profileElements.notificationsStatus.innerText = muted ? 'Disabled' : 'Enabled'; } @@ -306,7 +307,7 @@ export default class AppSharedMediaTab implements SliderTab { setText(appPeersManager.getPeerUsername(peerId), this.profileElements.username); } - const muted = appMessagesManager.isPeerMuted(peerId); + const muted = appNotificationsManager.isPeerLocalMuted(peerId, false); this.profileElements.notificationsCheckbox.checked = !muted; this.profileElements.notificationsStatus.innerText = muted ? 'Disabled' : 'Enabled'; } else { diff --git a/src/lib/appManagers/appDialogsManager.ts b/src/lib/appManagers/appDialogsManager.ts index ca2539be..844c929b 100644 --- a/src/lib/appManagers/appDialogsManager.ts +++ b/src/lib/appManagers/appDialogsManager.ts @@ -26,6 +26,8 @@ import appDraftsManager, { MyDraftMessage } from "./appDraftsManager"; import ProgressivePreloader from "../../components/preloader"; import App from "../../config/app"; import DEBUG, { MOUNT_CLASS_TO } from "../../config/debug"; +import appNotificationsManager from "./appNotificationsManager"; +import { InputNotifyPeer } from "../../layer"; type DialogDom = { avatarEl: AvatarElement, @@ -354,11 +356,8 @@ export class AppDialogsManager { } }); - rootScope.on('dialog_notify_settings', e => { - const dialog = appMessagesManager.getDialogByPeerId(e)[0]; - if(dialog) { - this.setUnreadMessages(dialog); // возможно это не нужно, но нужно менять is-muted - } + rootScope.on('dialog_notify_settings', (dialog) => { + this.setUnreadMessages(dialog); // возможно это не нужно, но нужно менять is-muted }); rootScope.on('dialog_draft', (e) => { @@ -484,6 +483,11 @@ export class AppDialogsManager { //selectTab(0); (this.folders.menu.firstElementChild as HTMLElement).click(); appStateManager.getState().then((state) => { + (['inputNotifyBroadcasts', 'inputNotifyUsers', 'inputNotifyChats'] as Exclude[]) + .forEach((inputKey) => { + appNotificationsManager.getNotifySettings({_: inputKey}); + }); + const getFiltersPromise = appMessagesManager.filtersStorage.getDialogFilters(); getFiltersPromise.then((filters) => { for(const filter of filters) { @@ -616,7 +620,7 @@ export class AppDialogsManager { let mutedCount = 0; let notMutedCount = 0; folder.forEach(dialog => { - const isMuted = appMessagesManager.isDialogMuted(dialog); + const isMuted = appNotificationsManager.isPeerLocalMuted(dialog.peerId, true); if(isMuted && filterId === 0) { return; @@ -1117,7 +1121,7 @@ export class AppDialogsManager { return; } - const isMuted = appMessagesManager.isDialogMuted(dialog); + const isMuted = appNotificationsManager.isPeerLocalMuted(dialog.peerId, true); const wasMuted = dom.listEl.classList.contains('is-muted'); if(isMuted !== wasMuted) { SetTransition(dom.listEl, 'is-muted', isMuted, 200); @@ -1351,7 +1355,7 @@ export class AppDialogsManager { container.append(li); } */ - const isMuted = appMessagesManager.isDialogMuted(dialog); + const isMuted = appNotificationsManager.isPeerLocalMuted(dialog.peerId, true); if(isMuted) { li.classList.add('is-muted'); } diff --git a/src/lib/appManagers/appImManager.ts b/src/lib/appManagers/appImManager.ts index 721be492..fb18d31b 100644 --- a/src/lib/appManagers/appImManager.ts +++ b/src/lib/appManagers/appImManager.ts @@ -36,6 +36,7 @@ import appDownloadManager from './appDownloadManager'; import appStateManager, { AppStateManager } from './appStateManager'; import { MOUNT_CLASS_TO } from '../../config/debug'; import appNavigationController from '../../components/appNavigationController'; +import appNotificationsManager from './appNotificationsManager'; //console.log('appImManager included33!'); @@ -593,7 +594,7 @@ export class AppImManager { } private createNewChat() { - const chat = new Chat(this, appChatsManager, appDocsManager, appInlineBotsManager, appMessagesManager, appPeersManager, appPhotosManager, appProfileManager, appStickersManager, appUsersManager, appWebPagesManager, appPollsManager, apiManager, appDraftsManager, serverTimeManager, sessionStorage); + const chat = new Chat(this, appChatsManager, appDocsManager, appInlineBotsManager, appMessagesManager, appPeersManager, appPhotosManager, appProfileManager, appStickersManager, appUsersManager, appWebPagesManager, appPollsManager, apiManager, appDraftsManager, serverTimeManager, sessionStorage, appNotificationsManager); if(this.chats.length) { chat.backgroundEl.append(this.chat.backgroundEl.lastElementChild.cloneNode(true)); diff --git a/src/lib/appManagers/appMessagesManager.ts b/src/lib/appManagers/appMessagesManager.ts index 227adb29..6e2e913d 100644 --- a/src/lib/appManagers/appMessagesManager.ts +++ b/src/lib/appManagers/appMessagesManager.ts @@ -196,6 +196,22 @@ export class AppMessagesManager { this.handleUpdate(e); }); + // ! Invalidate notify settings, can optimize though + rootScope.on('notify_peer_type_settings', ({key, settings}) => { + this.getConversationsAll().then(dialogs => { + let filterFunc: (dialog: Dialog) => boolean; + if(key === 'notifyUsers') filterFunc = (dialog) => dialog.peerId > 0; + else if(key === 'notifyBroadcasts') filterFunc = (dialog) => appChatsManager.isBroadcast(-dialog.peerId); + else filterFunc = (dialog) => appPeersManager.isAnyGroup(dialog.peerId); + + dialogs + .filter(filterFunc) + .forEach(dialog => { + rootScope.broadcast('dialog_notify_settings', dialog); + }); + }); + }); + rootScope.on('webpage_updated', (e) => { const eventData = e; eventData.msgs.forEach((mid) => { @@ -4368,7 +4384,7 @@ export class AppMessagesManager { const dialog = this.getDialogByPeerId(peerId)[0]; if(dialog) { dialog.notify_settings = notify_settings; - rootScope.broadcast('dialog_notify_settings', peerId); + rootScope.broadcast('dialog_notify_settings', dialog); } } @@ -4464,22 +4480,6 @@ export class AppMessagesManager { return pendingMessage; } - public isDialogMuted(dialog: MTDialog.dialog) { - let muted = false; - if(dialog && dialog.notify_settings && dialog.notify_settings.mute_until) { - //muted = new Date(dialog.notify_settings.mute_until * 1000) > new Date(); - muted = (dialog.notify_settings.mute_until * 1000) > Date.now(); - } - - return muted; - } - - public isPeerMuted(peerId: number) { - if(peerId === rootScope.myId) return false; - - return this.isDialogMuted(this.getDialogByPeerId(peerId)[0]); - } - public mutePeer(peerId: number) { const settings: InputPeerNotifySettings = { _: 'inputPeerNotifySettings' diff --git a/src/lib/appManagers/appNotificationsManager.ts b/src/lib/appManagers/appNotificationsManager.ts index 36d129ff..5ff61939 100644 --- a/src/lib/appManagers/appNotificationsManager.ts +++ b/src/lib/appManagers/appNotificationsManager.ts @@ -31,6 +31,7 @@ export type NotifyOptions = Partial<{ onclick: () => void; }>; +type ImSadAboutIt = Promise | PeerNotifySettings; export class AppNotificationsManager { private notificationsUiSupport: boolean; private notificationsShown: {[key: string]: MyNotification} = {}; @@ -41,10 +42,10 @@ export class AppNotificationsManager { private nextSoundAt: number; private prevSoundVolume: number; private peerSettings = { - notifyPeer: {} as {[peerId: number]: Promise}, - notifyUsers: null as Promise, - notifyChats: null as Promise, - notifyBroadcasts: null as Promise + notifyPeer: {} as {[peerId: number]: ImSadAboutIt}, + notifyUsers: null as ImSadAboutIt, + notifyChats: null as ImSadAboutIt, + notifyBroadcasts: null as ImSadAboutIt }; private exceptions: {[peerId: string]: PeerNotifySettings} = {}; private notifyContactsSignUp: Promise; @@ -293,7 +294,7 @@ export class AppNotificationsManager { return this.settings; } - public getNotifySettings(peer: InputNotifyPeer): Promise { + public getNotifySettings(peer: InputNotifyPeer): ImSadAboutIt { let key: any = convertInputKeyToKey(peer._); let obj: any = this.peerSettings[key as NotifyPeer['_']]; @@ -306,9 +307,11 @@ export class AppNotificationsManager { return obj; } - return (obj || this.peerSettings)[key] = apiManager.invokeApi('account.getNotifySettings', {peer})/* .then(settings => { + return (obj || this.peerSettings)[key] = apiManager.invokeApi('account.getNotifySettings', {peer}) + .then(settings => { + this.savePeerSettings(key, settings); return settings; - }) */; + }); } public updateNotifySettings(peer: InputNotifyPeer, settings: InputPeerNotifySettings) { @@ -372,14 +375,17 @@ export class AppNotificationsManager { this.prevFavicon = href; } - public savePeerSettings(key: number | NotifyPeer['_'], settings: PeerNotifySettings) { - const p = Promise.resolve(settings); + public savePeerSettings(key: number | Exclude, settings: PeerNotifySettings) { let obj: any; if(typeof(key) === 'number') { obj = this.peerSettings['notifyPeer']; } - (obj || this.peerSettings)[key] = p; + (obj || this.peerSettings)[key] = settings; + + if(typeof(key) !== 'number') { + rootScope.broadcast('notify_peer_type_settings', {key, settings}); + } //rootScope.broadcast('notify_settings', {peerId: peerId}); } @@ -390,10 +396,47 @@ export class AppNotificationsManager { } public getPeerMuted(peerId: number) { - return this.getNotifySettings({_: 'inputNotifyPeer', peer: appPeersManager.getInputPeerById(peerId)}) + const ret = this.getNotifySettings({_: 'inputNotifyPeer', peer: appPeersManager.getInputPeerById(peerId)}); + return (ret instanceof Promise ? ret : Promise.resolve(ret)) .then((peerNotifySettings) => this.isMuted(peerNotifySettings)); } + public getPeerLocalSettings(peerId: number, respectType = true): PeerNotifySettings { + const n: PeerNotifySettings = { + _: 'peerNotifySettings' + }; + + const notifySettings = this.peerSettings['notifyPeer'][peerId]; + //if(!notifySettings || (notifySettings instanceof Promise)) return false; + if(notifySettings && !(notifySettings instanceof Promise)) { + Object.assign(n, notifySettings); + } + + if(respectType) { + const inputNotify = appPeersManager.getInputNotifyPeerById(peerId, true); + const key = convertInputKeyToKey(inputNotify._); + const typeNotifySettings = this.peerSettings[key as NotifyPeer['_']]; + if(typeNotifySettings && !(typeNotifySettings instanceof Promise)) { + for(let i in typeNotifySettings) { + // @ts-ignore + if(n[i] === undefined) { + // @ts-ignore + n[i] = typeNotifySettings[i]; + } + } + } + } + + return n; + } + + public isPeerLocalMuted(peerId: number, respectType = true) { + if(peerId === rootScope.myId) return false; + + const notifySettings = this.getPeerLocalSettings(peerId, respectType); + return this.isMuted(notifySettings); + } + public start() { this.updateLocalSettings(); //rootScope.on('settings_changed', this.updateNotifySettings); diff --git a/src/lib/appManagers/appPeersManager.ts b/src/lib/appManagers/appPeersManager.ts index 35f8b2d8..d980d235 100644 --- a/src/lib/appManagers/appPeersManager.ts +++ b/src/lib/appManagers/appPeersManager.ts @@ -155,21 +155,14 @@ export class AppPeersManager { return (peerId < 0) && !appChatsManager.isBroadcast(-peerId); } - public isBroadcast(id: number): boolean { - return this.isChannel(id) && !this.isMegagroup(id); + public isBroadcast(peerId: number): boolean { + return this.isChannel(peerId) && !this.isMegagroup(peerId); } public isBot(peerId: number): boolean { return (peerId > 0) && appUsersManager.isBot(peerId); } - /** - * Will check notification exceptions by type too - */ - public isPeerMuted(peerId: number) { - - } - /* public getInputPeer(peerString: string): InputPeer { var firstChar = peerString.charAt(0); var peerParams = peerString.substr(1).split('_'); @@ -202,7 +195,9 @@ export class AppPeersManager { } } */ - public getInputNotifyPeerById(peerId: number, ignorePeerId = false): InputNotifyPeer { + public getInputNotifyPeerById(peerId: number, ignorePeerId: true): Exclude; + public getInputNotifyPeerById(peerId: number, ignorePeerId?: false): InputNotifyPeer.inputNotifyPeer; + public getInputNotifyPeerById(peerId: number, ignorePeerId?: boolean): InputNotifyPeer { if(ignorePeerId) { if(peerId > 0) { return {_: 'inputNotifyUsers'}; diff --git a/src/lib/rootScope.ts b/src/lib/rootScope.ts index 7cd0c66f..da5302ef 100644 --- a/src/lib/rootScope.ts +++ b/src/lib/rootScope.ts @@ -1,4 +1,4 @@ -import type { Message, StickerSet, Update } from "../layer"; +import type { Message, StickerSet, Update, NotifyPeer, PeerNotifySettings } from "../layer"; import type { MyDocument } from "./appManagers/appDocsManager"; import type { AppMessagesManager, Dialog, MessagesStorage } from "./appManagers/appMessagesManager"; import type { Poll, PollResults } from "./appManagers/appPollsManager"; @@ -32,7 +32,7 @@ export type BroadcastEvents = { 'dialog_drop': {peerId: number, dialog?: Dialog}, 'dialog_migrate': {migrateFrom: number, migrateTo: number}, //'dialog_top': Dialog, - 'dialog_notify_settings': number, + 'dialog_notify_settings': Dialog, 'dialogs_multiupdate': {[peerId: string]: Dialog}, 'dialogs_archived_unread': {count: number}, @@ -97,7 +97,8 @@ export type BroadcastEvents = { 'privacy_update': Update.updatePrivacy, - 'notify_settings': Update.updateNotifySettings + 'notify_settings': Update.updateNotifySettings, + 'notify_peer_type_settings': {key: Exclude, settings: PeerNotifySettings}, }; class RootScope extends EventListenerBase {