Fix refreshing sensitive content option

This commit is contained in:
Eduard Kuzmenko 2022-11-28 00:31:09 +04:00
parent 4cb27308eb
commit 198793bc09
4 changed files with 61 additions and 19 deletions

View File

@ -287,8 +287,8 @@ export default class AppPrivacyAndSecurityTab extends SliderSuperTabEventable {
let enabled: boolean, destroyed: boolean;
this.eventListener.addEventListener('destroy', () => {
destroyed = true;
if(enabled === undefined) return;
this.managers.appPrivacyManager.setGlobalPrivacySettings({
if(enabled === undefined || enabled === checkboxField.checked) return;
return this.managers.appPrivacyManager.setGlobalPrivacySettings({
_: 'globalPrivacySettings',
archive_and_mute_new_noncontact_peers: checkboxField.checked
});
@ -309,7 +309,7 @@ export default class AppPrivacyAndSecurityTab extends SliderSuperTabEventable {
this.listenerSetter.add(rootScope)('premium_toggle', onPremiumToggle);
onPremiumToggle(rootScope.premium);
enabled = settings.archive_and_mute_new_noncontact_peers;
enabled = !!settings.archive_and_mute_new_noncontact_peers;
checkboxField.setValueSilently(enabled);
});
@ -339,7 +339,7 @@ export default class AppPrivacyAndSecurityTab extends SliderSuperTabEventable {
return;
}
this.managers.apiManager.invokeApi('account.setContentSettings', {
return this.managers.apiManager.invokeApi('account.setContentSettings', {
sensitive_enabled: _enabled
});
}, {once: true});

View File

@ -23,7 +23,7 @@ import {SettingSection} from '..';
import Row from '../../row';
import AppActiveSessionsTab from './activeSessions';
import {i18n, LangPackKey} from '../../../lib/langPack';
import {SliderSuperTabConstructable} from '../../sliderTab';
import {SliderSuperTabConstructable, SliderSuperTabEventable} from '../../sliderTab';
import PopupAvatar from '../../popups/avatar';
import {AccountAuthorizations, Authorization} from '../../../layer';
import PopupElement from '../../popups';
@ -154,26 +154,59 @@ export default class AppSettingsTab extends SliderSuperTab {
icon: string,
text: LangPackKey,
c: T,
args?: Parameters<ConstructorP<T>['init']>
): [string, LangPackKey, T, any[]?] => {
return [icon, text, c, args] as any;
getInitArgs?: () => Promise<Parameters<ConstructorP<T>['init']>>
): {
icon: string,
text: LangPackKey,
tabConstructor: T,
getInitArgs?: typeof getInitArgs,
// args?: ReturnType<typeof getInitArgs>
args?: any
} => {
if(!getInitArgs) {
const g = (c as any as typeof SliderSuperTab).getInitArgs;
if(g) {
// @ts-ignore
getInitArgs = () => [g(this)];
}
}
return {
icon,
text,
tabConstructor: c,
getInitArgs,
args: getInitArgs?.()
};
};
// const k = <T extends SliderSuperTabConstructable>(c: T): () => [ReturnType<ConstructorP<T>['getInitArgs']>] => {
// return () => (c as any).getInitArgs(this);
// };
const b = [
m('unmute', 'AccountSettings.Notifications', AppNotificationsTab),
m('data', 'DataSettings', AppDataAndStorageTab),
m('lock', 'AccountSettings.PrivacyAndSecurity', AppPrivacyAndSecurityTab, [AppPrivacyAndSecurityTab.getInitArgs(this)]),
m('lock', 'AccountSettings.PrivacyAndSecurity', AppPrivacyAndSecurityTab),
m('settings', 'Telegram.GeneralSettingsViewController', AppGeneralSettingsTab),
m('folder', 'AccountSettings.Filters', AppChatFoldersTab, [AppChatFoldersTab.getInitArgs()])
m('folder', 'AccountSettings.Filters', AppChatFoldersTab)
];
const rows = b.map(([icon, langPackKey, tabConstructor, args]) => {
const rows = b.map((item) => {
const {icon, text: langPackKey, tabConstructor, getInitArgs} = item;
return new Row({
titleLangKey: langPackKey,
icon,
clickable: () => {
this.slider.createTab(tabConstructor as any).open(...(args || []));
// new tabConstructor(this.slider, true).open();
clickable: async() => {
const args = item.args ? await item.args : [];
const tab = this.slider.createTab(tabConstructor as any);
tab.open(...args);
if(tab instanceof SliderSuperTabEventable && getInitArgs) {
tab.eventListener.addEventListener('destroyAfter', (promise) => {
item.args = promise.then(() => getInitArgs() as any);
});
}
},
listenerSetter: this.listenerSetter
});

View File

@ -6,6 +6,7 @@
import EventListenerBase from '../helpers/eventListenerBase';
import ListenerSetter from '../helpers/listenerSetter';
import noop from '../helpers/noop';
import {AppManagers} from '../lib/appManagers/managers';
import {i18n, LangPackKey} from '../lib/langPack';
import ButtonIcon from './buttonIcon';
@ -118,7 +119,9 @@ export default class SliderSuperTab {
export class SliderSuperTabEventable extends SliderSuperTab {
public eventListener: EventListenerBase<{
destroy: () => void
destroy: () => void | Promise<any>,
destroyAfter: (promise: Promise<void>) => void,
close: () => void
}>;
constructor(slider: SidebarSlider) {
@ -126,8 +129,13 @@ export class SliderSuperTabEventable extends SliderSuperTab {
this.eventListener = new EventListenerBase();
}
onClose() {
this.eventListener.dispatchEvent('close');
}
onCloseAfterTimeout() {
this.eventListener.dispatchEvent('destroy');
const results = this.eventListener.dispatchResultableEvent('destroy');
this.eventListener.dispatchEvent('destroyAfter', Promise.all(results).then(noop, noop));
this.eventListener.cleanup();
return super.onCloseAfterTimeout();
}

View File

@ -1794,6 +1794,7 @@ export default class MTPNetworker {
}
case 'msgs_ack': {
this.debug && this.log('got acks', message.msg_ids);
for(const msgId of message.msg_ids) {
this.processMessageAck(msgId);
}
@ -1849,9 +1850,9 @@ export default class MTPNetworker {
const sentMessageId = message.req_msg_id;
const sentMessage = this.sentMessages[sentMessageId];
// if(this.debug) {
// this.log.debug('Rpc response', message.result, sentMessage);
// }
if(this.debug) {
this.log('Rpc response', message.result, sentMessage);
}
this.processMessageAck(sentMessageId);
if(sentMessage) {