186 lines
6.6 KiB
TypeScript
186 lines
6.6 KiB
TypeScript
/*
|
|
* https://github.com/morethanwords/tweb
|
|
* Copyright (C) 2019-2021 Eduard Kuzmenko
|
|
* https://github.com/morethanwords/tweb/blob/master/LICENSE
|
|
*/
|
|
|
|
import {AutoDownloadPeerTypeSettings, STATE_INIT} from '../../../config/state';
|
|
import {attachClickEvent} from '../../../helpers/dom/clickEvent';
|
|
import replaceContent from '../../../helpers/dom/replaceContent';
|
|
import toggleDisability from '../../../helpers/dom/toggleDisability';
|
|
import formatBytes from '../../../helpers/formatBytes';
|
|
import copy from '../../../helpers/object/copy';
|
|
import deepEqual from '../../../helpers/object/deepEqual';
|
|
import {FormatterArguments, i18n, join, LangPackKey} from '../../../lib/langPack';
|
|
import rootScope from '../../../lib/rootScope';
|
|
import Button from '../../button';
|
|
import CheckboxField from '../../checkboxField';
|
|
import confirmationPopup from '../../confirmationPopup';
|
|
import Row from '../../row';
|
|
import {SliderSuperTabEventable, SliderSuperTabEventableConstructable} from '../../sliderTab';
|
|
import AppAutoDownloadFileTab from './autoDownload/file';
|
|
import AppAutoDownloadPhotoTab from './autoDownload/photo';
|
|
import AppAutoDownloadVideoTab from './autoDownload/video';
|
|
import apiManagerProxy from '../../../lib/mtproto/mtprotoworker';
|
|
import SettingSection from '../../settingSection';
|
|
|
|
const AUTO_DOWNLOAD_FOR_KEYS: {[k in keyof AutoDownloadPeerTypeSettings]: LangPackKey} = {
|
|
contacts: 'AutoDownloadContacts',
|
|
private: 'AutoDownloadPm',
|
|
groups: 'AutoDownloadGroups',
|
|
channels: 'AutoDownloadChannels'
|
|
};
|
|
|
|
export default class AppDataAndStorageTab extends SliderSuperTabEventable {
|
|
public async init() {
|
|
this.setTitle('DataSettings');
|
|
|
|
{
|
|
const section = new SettingSection({name: 'AutomaticMediaDownload', caption: 'AutoDownloadAudioInfo'});
|
|
|
|
const state = await apiManagerProxy.getState();
|
|
|
|
const autoCheckboxField = new CheckboxField({
|
|
text: 'AutoDownloadMedia',
|
|
name: 'auto',
|
|
checked: !state.settings.autoDownloadNew.pFlags.disabled,
|
|
listenerSetter: this.listenerSetter
|
|
});
|
|
|
|
const autoRow = new Row({
|
|
checkboxField: autoCheckboxField,
|
|
listenerSetter: this.listenerSetter
|
|
});
|
|
|
|
const onChange = () => {
|
|
toggleDisability([resetButton],
|
|
deepEqual(state.settings.autoDownload, STATE_INIT.settings.autoDownload) &&
|
|
deepEqual(state.settings.autoDownloadNew, STATE_INIT.settings.autoDownloadNew));
|
|
};
|
|
|
|
const setSubtitles = () => {
|
|
this.setAutoDownloadSubtitle(photoRow, state.settings.autoDownload.photo /* state.settings.autoDownloadNew.photo_size_max */);
|
|
this.setAutoDownloadSubtitle(videoRow, state.settings.autoDownload.video/* , state.settings.autoDownloadNew.video_size_max */);
|
|
this.setAutoDownloadSubtitle(fileRow, state.settings.autoDownload.file, state.settings.autoDownloadNew.file_size_max);
|
|
};
|
|
|
|
const openTab = (tabConstructor: SliderSuperTabEventableConstructable) => {
|
|
const tab = this.slider.createTab(tabConstructor);
|
|
tab.open();
|
|
|
|
this.listenerSetter.add(tab.eventListener)('destroy', () => {
|
|
setSubtitles();
|
|
onChange();
|
|
}, {once: true});
|
|
};
|
|
|
|
const photoRow = new Row({
|
|
titleLangKey: 'AutoDownloadPhotos',
|
|
subtitle: '',
|
|
clickable: () => {
|
|
openTab(AppAutoDownloadPhotoTab);
|
|
},
|
|
listenerSetter: this.listenerSetter
|
|
});
|
|
|
|
const videoRow = new Row({
|
|
titleLangKey: 'AutoDownloadVideos',
|
|
subtitle: '',
|
|
clickable: () => {
|
|
openTab(AppAutoDownloadVideoTab);
|
|
},
|
|
listenerSetter: this.listenerSetter
|
|
});
|
|
|
|
const fileRow = new Row({
|
|
titleLangKey: 'AutoDownloadFiles',
|
|
subtitle: '',
|
|
clickable: () => {
|
|
openTab(AppAutoDownloadFileTab);
|
|
},
|
|
listenerSetter: this.listenerSetter
|
|
});
|
|
|
|
const resetButton = Button('btn-primary btn-transparent primary', {icon: 'delete', text: 'ResetAutomaticMediaDownload'});
|
|
attachClickEvent(resetButton, () => {
|
|
confirmationPopup({
|
|
titleLangKey: 'ResetAutomaticMediaDownloadAlertTitle',
|
|
descriptionLangKey: 'ResetAutomaticMediaDownloadAlert',
|
|
button: {
|
|
langKey: 'Reset'
|
|
}
|
|
}).then(() => {
|
|
const settings = rootScope.settings;
|
|
settings.autoDownloadNew = copy(STATE_INIT.settings.autoDownloadNew);
|
|
settings.autoDownload = copy(STATE_INIT.settings.autoDownload);
|
|
state.settings = settings;
|
|
this.managers.appStateManager.setByKey('settings', settings);
|
|
|
|
setSubtitles();
|
|
autoCheckboxField.checked = !state.settings.autoDownloadNew.pFlags.disabled;
|
|
});
|
|
});
|
|
|
|
const onDisabledChange = () => {
|
|
const disabled = !autoCheckboxField.checked;
|
|
|
|
const settings = rootScope.settings;
|
|
if(disabled) {
|
|
settings.autoDownloadNew.pFlags.disabled = true;
|
|
} else {
|
|
delete settings.autoDownloadNew.pFlags.disabled;
|
|
}
|
|
|
|
[photoRow, videoRow, fileRow].forEach((row) => {
|
|
row.container.classList.toggle('is-disabled', disabled);
|
|
});
|
|
|
|
this.managers.appStateManager.setByKey('settings', settings);
|
|
|
|
onChange();
|
|
};
|
|
|
|
autoCheckboxField.input.addEventListener('change', onDisabledChange);
|
|
onDisabledChange();
|
|
setSubtitles();
|
|
|
|
section.content.append(
|
|
autoRow.container,
|
|
photoRow.container,
|
|
videoRow.container,
|
|
fileRow.container,
|
|
resetButton
|
|
);
|
|
|
|
this.scrollable.append(section.container);
|
|
}
|
|
}
|
|
|
|
private setAutoDownloadSubtitle(row: Row, settings: AutoDownloadPeerTypeSettings, sizeMax?: number) {
|
|
let key: LangPackKey;
|
|
const args: FormatterArguments = [];
|
|
|
|
const peerKeys = Object.keys(settings) as (keyof typeof AUTO_DOWNLOAD_FOR_KEYS)[];
|
|
const enabledKeys = peerKeys.map((key) => settings[key] ? AUTO_DOWNLOAD_FOR_KEYS[key] : undefined).filter(Boolean);
|
|
if(!enabledKeys.length || sizeMax === 0) {
|
|
key = 'AutoDownloadOff';
|
|
} else {
|
|
const isAll = enabledKeys.length === peerKeys.length;
|
|
if(sizeMax !== undefined) {
|
|
key = isAll ? 'AutoDownloadUpToOnAllChats' : 'AutoDownloadOnUpToFor';
|
|
args.push(formatBytes(sizeMax));
|
|
} else {
|
|
key = isAll ? 'AutoDownloadOnAllChats' : 'AutoDownloadOnFor';
|
|
}
|
|
|
|
if(!isAll) {
|
|
const fragment = document.createElement('span');
|
|
fragment.append(...join(enabledKeys.map((key) => i18n(key)), true, false));
|
|
args.push(fragment);
|
|
}
|
|
}
|
|
|
|
replaceContent(row.subtitle, i18n(key, args));
|
|
}
|
|
}
|