Reduce amount of folder timers and improve autoLogout

This commit is contained in:
djmaze 2021-03-02 17:39:02 +01:00
parent b8fd3df2e6
commit 1a5bc09bb3
5 changed files with 57 additions and 71 deletions

View file

@ -126,14 +126,12 @@ class AppUser extends AbstractApp {
}, 1000); }, 1000);
} }
const refresh = (()=>dispatchEvent(new CustomEvent('rl.auto-logout-refresh'))).debounce(5000), const fn = (ev=>$htmlCL.toggle('rl-ctrl-key-pressed', ev.ctrlKey)).debounce(500);
fn = (ev=>{ ['keydown','keyup'].forEach(t => doc.addEventListener(t, fn));
$htmlCL.toggle('rl-ctrl-key-pressed', ev.ctrlKey);
refresh();
}).debounce(500);
// doc.addEventListener('touchstart', fn, {passive:true}); ['touchstart','mousedown','mousemove','keydown'].forEach(
['mousedown','keydown','keyup'/*,'mousemove'*/].forEach(t => doc.addEventListener(t, fn)); t => doc.addEventListener(t, SettingsStore.delayLogout, {passive:true})
);
shortcuts.add('escape,enter', '', KeyState.All, () => rl.Dropdowns.detectVisibility()); shortcuts.add('escape,enter', '', KeyState.All, () => rl.Dropdowns.detectVisibility());
} }
@ -400,13 +398,7 @@ class AppUser extends AbstractApp {
* @param {Function=} callback = null * @param {Function=} callback = null
*/ */
foldersReload(callback = null) { foldersReload(callback = null) {
const prom = Remote.foldersReload(FolderStore.foldersLoading); Remote.foldersReload(callback);
if (callback) {
prom
.then((value) => !!value)
.then(callback)
.catch(() => callback && setTimeout(() => callback(false), 1));
}
} }
foldersPromisesActionHelper(promise, errorDefCode) { foldersPromisesActionHelper(promise, errorDefCode) {
@ -414,12 +406,10 @@ class AppUser extends AbstractApp {
.fastResolve(true) .fastResolve(true)
.then(() => promise) .then(() => promise)
.then( .then(
() => { Remote.foldersReloadWithTimeout,
Remote.foldersReloadWithTimeout(FolderStore.foldersLoading); errorCode => {
},
(errorCode) => {
FolderStore.folderListError(getNotification(errorCode, '', errorDefCode)); FolderStore.folderListError(getNotification(errorCode, '', errorDefCode));
Remote.foldersReloadWithTimeout(FolderStore.foldersLoading); Remote.foldersReloadWithTimeout();
} }
); );
} }
@ -982,16 +972,20 @@ class AppUser extends AbstractApp {
// false ? AboutUserScreen : null // false ? AboutUserScreen : null
]); ]);
setInterval(() => this.folderInformation(getFolderInboxName()), 120000); // Every 5 minutes
setInterval(() => { setInterval(() => {
const sF = FolderStore.currentFolderFullNameRaw(); const cF = FolderStore.currentFolderFullNameRaw(),
if (getFolderInboxName() !== sF) { iF = getFolderInboxName();
this.folderInformation(sF); this.folderInformation(iF);
if (iF !== cF) {
this.folderInformation(cF);
} }
}, 180000); this.folderInformationMultiply();
}, 300000);
setTimeout(() => setInterval(this.folderInformationMultiply, 120000), 300000); // Every 15 minutes
setInterval(this.quota, 900000); setInterval(this.quota, 900000);
// Every 20 minutes
setInterval(this.foldersReload, 1200000); setInterval(this.foldersReload, 1200000);
setTimeout(this.contactsSync, 10000); setTimeout(this.contactsSync, 10000);
@ -999,23 +993,19 @@ class AppUser extends AbstractApp {
contactsSyncInterval = 320 >= contactsSyncInterval ? contactsSyncInterval : 320; contactsSyncInterval = 320 >= contactsSyncInterval ? contactsSyncInterval : 320;
setInterval(this.contactsSync, contactsSyncInterval * 60000 + 5000); setInterval(this.contactsSync, contactsSyncInterval * 60000 + 5000);
setTimeout(() => this.folderInformationMultiply(true), 2000);
this.accountsAndIdentities(true); this.accountsAndIdentities(true);
setTimeout(() => { setTimeout(() => {
const sF = FolderStore.currentFolderFullNameRaw(); const cF = FolderStore.currentFolderFullNameRaw();
if (getFolderInboxName() !== sF) { if (getFolderInboxName() !== cF) {
this.folderInformation(sF); this.folderInformation(cF);
} }
this.folderInformationMultiply(true);
}, 1000); }, 1000);
setTimeout(this.quota, 5000); setTimeout(this.quota, 5000);
setTimeout(() => Remote.appDelayStart(()=>{}), 35000); setTimeout(() => Remote.appDelayStart(()=>{}), 35000);
addEventListener('rl.auto-logout', () => this.logout());
if ( if (
!!Settings.get('AccountSignMe') && !!Settings.get('AccountSignMe') &&
navigator.registerProtocolHandler && navigator.registerProtocolHandler &&
@ -1026,7 +1016,7 @@ class AppUser extends AbstractApp {
navigator.registerProtocolHandler( navigator.registerProtocolHandler(
'mailto', 'mailto',
location.protocol + '//' + location.host + location.pathname + '?mailto&to=%s', location.protocol + '//' + location.host + location.pathname + '?mailto&to=%s',
'' + (Settings.get('Title') || 'SnappyMail') (Settings.get('Title') || 'SnappyMail')
); );
} catch (e) {} // eslint-disable-line no-empty } catch (e) {} // eslint-disable-line no-empty

View file

@ -12,7 +12,7 @@ import { SUB_QUERY_PREFIX } from 'Common/Links';
import AppStore from 'Stores/User/App'; import AppStore from 'Stores/User/App';
import SettingsStore from 'Stores/User/Settings'; import SettingsStore from 'Stores/User/Settings';
//import FolderStore from 'Stores/User/Folder'; import FolderStore from 'Stores/User/Folder';
import { AbstractFetchRemote } from 'Remote/AbstractFetch'; import { AbstractFetchRemote } from 'Remote/AbstractFetch';
@ -771,43 +771,39 @@ class RemoteUserFetch extends AbstractFetchRemote {
this.defaultRequest(fCallback, 'ClearUserBackground'); this.defaultRequest(fCallback, 'ClearUserBackground');
} }
// FolderStore.foldersLoading foldersReload(fCallback) {
foldersReload(fTrigger) { this.abort('Folders')
return this.abort('Folders') .postRequest('Folders', FolderStore.foldersLoading)
.postRequest('Folders', fTrigger)
.then(data => { .then(data => {
data = FolderCollectionModel.reviveFromJson(data.Result); data = FolderCollectionModel.reviveFromJson(data.Result);
data && data.storeIt(); data && data.storeIt();
return true; fCallback && fCallback(true);
}); })
.catch(() => fCallback && setTimeout(() => fCallback(false), 1));
} }
// FolderStore.foldersLoading foldersReloadWithTimeout() {
foldersReloadWithTimeout(fTrigger) { this.setTrigger(FolderStore.foldersLoading, true);
this.setTrigger(fTrigger, true);
clearTimeout(this.foldersTimeout); clearTimeout(this.foldersTimeout);
this.foldersTimeout = setTimeout(() => this.foldersReload(fTrigger), 500); this.foldersTimeout = setTimeout(() => this.foldersReload(), 500);
} }
// FolderStore.foldersDeleting folderDelete(sFolderFullNameRaw) {
folderDelete(sFolderFullNameRaw, fTrigger) { return this.postRequest('FolderDelete', FolderStore.foldersDeleting, {
return this.postRequest('FolderDelete', fTrigger, {
Folder: sFolderFullNameRaw Folder: sFolderFullNameRaw
}); });
} }
// FolderStore.foldersCreating folderCreate(sNewFolderName, sParentName) {
folderCreate(sNewFolderName, sParentName, fTrigger) { return this.postRequest('FolderCreate', FolderStore.foldersCreating, {
return this.postRequest('FolderCreate', fTrigger, {
Folder: sNewFolderName, Folder: sNewFolderName,
Parent: sParentName Parent: sParentName
}); });
} }
// FolderStore.foldersRenaming folderRename(sPrevFolderFullNameRaw, sNewFolderName) {
folderRename(sPrevFolderFullNameRaw, sNewFolderName, fTrigger) { return this.postRequest('FolderRename', FolderStore.foldersRenaming, {
return this.postRequest('FolderRename', fTrigger, {
Folder: sPrevFolderFullNameRaw, Folder: sPrevFolderFullNameRaw,
NewFolderName: sNewFolderName NewFolderName: sNewFolderName
}); });

View file

@ -45,7 +45,7 @@ export class FoldersUserSettings {
Local.set(ClientSideKeyName.FoldersLashHash, ''); Local.set(ClientSideKeyName.FoldersLashHash, '');
rl.app.foldersPromisesActionHelper( rl.app.foldersPromisesActionHelper(
Remote.folderRename(folder.fullNameRaw, nameToEdit, FolderStore.foldersRenaming), Remote.folderRename(folder.fullNameRaw, nameToEdit),
Notification.CantRenameFolder Notification.CantRenameFolder
); );
@ -101,7 +101,7 @@ export class FoldersUserSettings {
FolderStore.folderList.remove(fRemoveFolder); FolderStore.folderList.remove(fRemoveFolder);
rl.app.foldersPromisesActionHelper( rl.app.foldersPromisesActionHelper(
Remote.folderDelete(folderToRemove.fullNameRaw, FolderStore.foldersDeleting), Remote.folderDelete(folderToRemove.fullNameRaw),
Notification.CantDeleteFolder Notification.CantDeleteFolder
); );

View file

@ -3,13 +3,11 @@ import ko from 'ko';
import { MESSAGES_PER_PAGE_VALUES } from 'Common/Consts'; import { MESSAGES_PER_PAGE_VALUES } from 'Common/Consts';
import { Layout, EditorDefaultType } from 'Common/EnumsUser'; import { Layout, EditorDefaultType } from 'Common/EnumsUser';
import { pInt } from 'Common/Utils'; import { pInt } from 'Common/Utils';
import { $htmlCL } from 'Common/Globals'; import { $htmlCL, Settings } from 'Common/Globals';
import { ThemeStore } from 'Stores/Theme'; import { ThemeStore } from 'Stores/Theme';
class SettingsUserStore { class SettingsUserStore {
constructor() { constructor() {
this.iAutoLogoutTimer = 0;
this.layout = ko this.layout = ko
.observable(Layout.SidePreview) .observable(Layout.SidePreview)
.extend({ limitedList: [Layout.SidePreview, Layout.BottomPreview, Layout.NoPreview] }); .extend({ limitedList: [Layout.SidePreview, Layout.BottomPreview, Layout.NoPreview] });
@ -39,6 +37,17 @@ class SettingsUserStore {
this.usePreviewPane = ko.computed(() => Layout.NoPreview !== this.layout() && !ThemeStore.isMobile()); this.usePreviewPane = ko.computed(() => Layout.NoPreview !== this.layout() && !ThemeStore.isMobile());
this.subscribers(); this.subscribers();
let iAutoLogoutTimer;
this.delayLogout = (() => {
clearTimeout(iAutoLogoutTimer);
if (0 < this.autoLogout() && !Settings.get('AccountSignMe')) {
iAutoLogoutTimer = setTimeout(
rl.app.logout,
this.autoLogout() * 60000
);
}
}).throttle(5000);
} }
subscribers() { subscribers() {
@ -51,7 +60,7 @@ class SettingsUserStore {
} }
populate() { populate() {
const settingsGet = rl.settings.get; const settingsGet = Settings.get;
this.layout(pInt(settingsGet('Layout'))); this.layout(pInt(settingsGet('Layout')));
this.editorDefaultType(settingsGet('EditorDefaultType')); this.editorDefaultType(settingsGet('EditorDefaultType'));
@ -65,16 +74,7 @@ class SettingsUserStore {
this.useThreads(!!settingsGet('UseThreads')); this.useThreads(!!settingsGet('UseThreads'));
this.replySameFolder(!!settingsGet('ReplySameFolder')); this.replySameFolder(!!settingsGet('ReplySameFolder'));
const refresh = () => { this.delayLogout();
clearTimeout(this.iAutoLogoutTimer);
if (0 < this.autoLogout() && !settingsGet('AccountSignMe')) {
this.iAutoLogoutTimer = setTimeout(() =>
dispatchEvent(new CustomEvent('rl.auto-logout'))
, this.autoLogout() * 60000);
}
};
addEventListener('rl.auto-logout-refresh', refresh);
refresh();
} }
} }

View file

@ -53,7 +53,7 @@ class FolderCreatePopupView extends AbstractViewPopup {
} }
rl.app.foldersPromisesActionHelper( rl.app.foldersPromisesActionHelper(
Remote.folderCreate(this.folderName(), parentFolderName, FolderStore.foldersCreating), Remote.folderCreate(this.folderName(), parentFolderName),
Notification.CantCreateFolder Notification.CantCreateFolder
); );