diff --git a/dev/App/User.js b/dev/App/User.js index 780e3e5ae..46131cb33 100644 --- a/dev/App/User.js +++ b/dev/App/User.js @@ -126,14 +126,12 @@ class AppUser extends AbstractApp { }, 1000); } - const refresh = (()=>dispatchEvent(new CustomEvent('rl.auto-logout-refresh'))).debounce(5000), - fn = (ev=>{ - $htmlCL.toggle('rl-ctrl-key-pressed', ev.ctrlKey); - refresh(); - }).debounce(500); + const fn = (ev=>$htmlCL.toggle('rl-ctrl-key-pressed', ev.ctrlKey)).debounce(500); + ['keydown','keyup'].forEach(t => doc.addEventListener(t, fn)); -// doc.addEventListener('touchstart', fn, {passive:true}); - ['mousedown','keydown','keyup'/*,'mousemove'*/].forEach(t => doc.addEventListener(t, fn)); + ['touchstart','mousedown','mousemove','keydown'].forEach( + t => doc.addEventListener(t, SettingsStore.delayLogout, {passive:true}) + ); shortcuts.add('escape,enter', '', KeyState.All, () => rl.Dropdowns.detectVisibility()); } @@ -400,13 +398,7 @@ class AppUser extends AbstractApp { * @param {Function=} callback = null */ foldersReload(callback = null) { - const prom = Remote.foldersReload(FolderStore.foldersLoading); - if (callback) { - prom - .then((value) => !!value) - .then(callback) - .catch(() => callback && setTimeout(() => callback(false), 1)); - } + Remote.foldersReload(callback); } foldersPromisesActionHelper(promise, errorDefCode) { @@ -414,12 +406,10 @@ class AppUser extends AbstractApp { .fastResolve(true) .then(() => promise) .then( - () => { - Remote.foldersReloadWithTimeout(FolderStore.foldersLoading); - }, - (errorCode) => { + Remote.foldersReloadWithTimeout, + errorCode => { FolderStore.folderListError(getNotification(errorCode, '', errorDefCode)); - Remote.foldersReloadWithTimeout(FolderStore.foldersLoading); + Remote.foldersReloadWithTimeout(); } ); } @@ -982,16 +972,20 @@ class AppUser extends AbstractApp { // false ? AboutUserScreen : null ]); - setInterval(() => this.folderInformation(getFolderInboxName()), 120000); + // Every 5 minutes setInterval(() => { - const sF = FolderStore.currentFolderFullNameRaw(); - if (getFolderInboxName() !== sF) { - this.folderInformation(sF); + const cF = FolderStore.currentFolderFullNameRaw(), + iF = getFolderInboxName(); + 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); + // Every 20 minutes setInterval(this.foldersReload, 1200000); setTimeout(this.contactsSync, 10000); @@ -999,23 +993,19 @@ class AppUser extends AbstractApp { contactsSyncInterval = 320 >= contactsSyncInterval ? contactsSyncInterval : 320; setInterval(this.contactsSync, contactsSyncInterval * 60000 + 5000); - setTimeout(() => this.folderInformationMultiply(true), 2000); - - this.accountsAndIdentities(true); setTimeout(() => { - const sF = FolderStore.currentFolderFullNameRaw(); - if (getFolderInboxName() !== sF) { - this.folderInformation(sF); + const cF = FolderStore.currentFolderFullNameRaw(); + if (getFolderInboxName() !== cF) { + this.folderInformation(cF); } + this.folderInformationMultiply(true); }, 1000); setTimeout(this.quota, 5000); setTimeout(() => Remote.appDelayStart(()=>{}), 35000); - addEventListener('rl.auto-logout', () => this.logout()); - if ( !!Settings.get('AccountSignMe') && navigator.registerProtocolHandler && @@ -1026,7 +1016,7 @@ class AppUser extends AbstractApp { navigator.registerProtocolHandler( 'mailto', location.protocol + '//' + location.host + location.pathname + '?mailto&to=%s', - '' + (Settings.get('Title') || 'SnappyMail') + (Settings.get('Title') || 'SnappyMail') ); } catch (e) {} // eslint-disable-line no-empty diff --git a/dev/Remote/User/Fetch.js b/dev/Remote/User/Fetch.js index f04325b8d..daee69c86 100644 --- a/dev/Remote/User/Fetch.js +++ b/dev/Remote/User/Fetch.js @@ -12,7 +12,7 @@ import { SUB_QUERY_PREFIX } from 'Common/Links'; import AppStore from 'Stores/User/App'; import SettingsStore from 'Stores/User/Settings'; -//import FolderStore from 'Stores/User/Folder'; +import FolderStore from 'Stores/User/Folder'; import { AbstractFetchRemote } from 'Remote/AbstractFetch'; @@ -771,43 +771,39 @@ class RemoteUserFetch extends AbstractFetchRemote { this.defaultRequest(fCallback, 'ClearUserBackground'); } - // FolderStore.foldersLoading - foldersReload(fTrigger) { - return this.abort('Folders') - .postRequest('Folders', fTrigger) + foldersReload(fCallback) { + this.abort('Folders') + .postRequest('Folders', FolderStore.foldersLoading) .then(data => { data = FolderCollectionModel.reviveFromJson(data.Result); data && data.storeIt(); - return true; - }); + fCallback && fCallback(true); + }) + .catch(() => fCallback && setTimeout(() => fCallback(false), 1)); } - // FolderStore.foldersLoading - foldersReloadWithTimeout(fTrigger) { - this.setTrigger(fTrigger, true); + foldersReloadWithTimeout() { + this.setTrigger(FolderStore.foldersLoading, true); clearTimeout(this.foldersTimeout); - this.foldersTimeout = setTimeout(() => this.foldersReload(fTrigger), 500); + this.foldersTimeout = setTimeout(() => this.foldersReload(), 500); } - // FolderStore.foldersDeleting - folderDelete(sFolderFullNameRaw, fTrigger) { - return this.postRequest('FolderDelete', fTrigger, { + folderDelete(sFolderFullNameRaw) { + return this.postRequest('FolderDelete', FolderStore.foldersDeleting, { Folder: sFolderFullNameRaw }); } - // FolderStore.foldersCreating - folderCreate(sNewFolderName, sParentName, fTrigger) { - return this.postRequest('FolderCreate', fTrigger, { + folderCreate(sNewFolderName, sParentName) { + return this.postRequest('FolderCreate', FolderStore.foldersCreating, { Folder: sNewFolderName, Parent: sParentName }); } - // FolderStore.foldersRenaming - folderRename(sPrevFolderFullNameRaw, sNewFolderName, fTrigger) { - return this.postRequest('FolderRename', fTrigger, { + folderRename(sPrevFolderFullNameRaw, sNewFolderName) { + return this.postRequest('FolderRename', FolderStore.foldersRenaming, { Folder: sPrevFolderFullNameRaw, NewFolderName: sNewFolderName }); diff --git a/dev/Settings/User/Folders.js b/dev/Settings/User/Folders.js index 95a2ffd00..09c38b949 100644 --- a/dev/Settings/User/Folders.js +++ b/dev/Settings/User/Folders.js @@ -45,7 +45,7 @@ export class FoldersUserSettings { Local.set(ClientSideKeyName.FoldersLashHash, ''); rl.app.foldersPromisesActionHelper( - Remote.folderRename(folder.fullNameRaw, nameToEdit, FolderStore.foldersRenaming), + Remote.folderRename(folder.fullNameRaw, nameToEdit), Notification.CantRenameFolder ); @@ -101,7 +101,7 @@ export class FoldersUserSettings { FolderStore.folderList.remove(fRemoveFolder); rl.app.foldersPromisesActionHelper( - Remote.folderDelete(folderToRemove.fullNameRaw, FolderStore.foldersDeleting), + Remote.folderDelete(folderToRemove.fullNameRaw), Notification.CantDeleteFolder ); diff --git a/dev/Stores/User/Settings.js b/dev/Stores/User/Settings.js index 9954f893c..edefec1df 100644 --- a/dev/Stores/User/Settings.js +++ b/dev/Stores/User/Settings.js @@ -3,13 +3,11 @@ import ko from 'ko'; import { MESSAGES_PER_PAGE_VALUES } from 'Common/Consts'; import { Layout, EditorDefaultType } from 'Common/EnumsUser'; import { pInt } from 'Common/Utils'; -import { $htmlCL } from 'Common/Globals'; +import { $htmlCL, Settings } from 'Common/Globals'; import { ThemeStore } from 'Stores/Theme'; class SettingsUserStore { constructor() { - this.iAutoLogoutTimer = 0; - this.layout = ko .observable(Layout.SidePreview) .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.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() { @@ -51,7 +60,7 @@ class SettingsUserStore { } populate() { - const settingsGet = rl.settings.get; + const settingsGet = Settings.get; this.layout(pInt(settingsGet('Layout'))); this.editorDefaultType(settingsGet('EditorDefaultType')); @@ -65,16 +74,7 @@ class SettingsUserStore { this.useThreads(!!settingsGet('UseThreads')); this.replySameFolder(!!settingsGet('ReplySameFolder')); - const refresh = () => { - 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(); + this.delayLogout(); } } diff --git a/dev/View/Popup/FolderCreate.js b/dev/View/Popup/FolderCreate.js index 4b5f945e6..ce8297d92 100644 --- a/dev/View/Popup/FolderCreate.js +++ b/dev/View/Popup/FolderCreate.js @@ -53,7 +53,7 @@ class FolderCreatePopupView extends AbstractViewPopup { } rl.app.foldersPromisesActionHelper( - Remote.folderCreate(this.folderName(), parentFolderName, FolderStore.foldersCreating), + Remote.folderCreate(this.folderName(), parentFolderName), Notification.CantCreateFolder );