mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
Reduce amount of folder timers and improve autoLogout
This commit is contained in:
parent
b8fd3df2e6
commit
1a5bc09bb3
5 changed files with 57 additions and 71 deletions
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue