mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-08-29 20:19:22 +03:00
Merge remote-tracking branch 'origin/master' into addressbook
This commit is contained in:
commit
983bfbaa1b
85 changed files with 1496 additions and 313 deletions
|
|
@ -42,6 +42,7 @@ SaveSettingsStep = {
|
|||
Notification = {
|
||||
RequestError: 1,
|
||||
RequestAborted: 2,
|
||||
RequestTimeout: 3,
|
||||
|
||||
// Global
|
||||
InvalidToken: 101,
|
||||
|
|
|
|||
|
|
@ -30,11 +30,11 @@ checkResponseError = data => {
|
|||
|
||||
oRequests = {},
|
||||
|
||||
abort = (sAction, bClearOnly) => {
|
||||
abort = (sAction, sReason, bClearOnly) => {
|
||||
if (oRequests[sAction]) {
|
||||
if (!bClearOnly && oRequests[sAction].abort) {
|
||||
// oRequests[sAction].__aborted = true;
|
||||
oRequests[sAction].abort();
|
||||
oRequests[sAction].abort(sReason || 'AbortError');
|
||||
}
|
||||
|
||||
oRequests[sAction] = null;
|
||||
|
|
@ -43,22 +43,23 @@ abort = (sAction, bClearOnly) => {
|
|||
},
|
||||
|
||||
fetchJSON = (action, sGetAdd, params, timeout, jsonCallback) => {
|
||||
sGetAdd = pString(sGetAdd);
|
||||
params = params || {};
|
||||
if (params instanceof FormData) {
|
||||
params.set('Action', action);
|
||||
} else {
|
||||
params.Action = action;
|
||||
}
|
||||
let init = {};
|
||||
if (window.AbortController) {
|
||||
abort(action);
|
||||
const controller = new AbortController();
|
||||
timeout && setTimeout(() => controller.abort(), timeout);
|
||||
oRequests[action] = controller;
|
||||
init.signal = controller.signal;
|
||||
}
|
||||
return rl.fetchJSON(getURL(sGetAdd), init, sGetAdd ? null : params).then(jsonCallback);
|
||||
abort(action);
|
||||
const controller = new AbortController(),
|
||||
signal = controller.signal;
|
||||
oRequests[action] = controller;
|
||||
// Currently there is no way to combine multiple signals, so AbortSignal.timeout() not possible
|
||||
timeout && setTimeout(() => abort(action, 'TimeoutError'), timeout);
|
||||
return rl.fetchJSON(getURL(sGetAdd), {signal: signal}, sGetAdd ? null : params).then(jsonCallback).catch(err => {
|
||||
err.aborted = signal.aborted;
|
||||
err.reason = signal.reason;
|
||||
return Promise.reject(err);
|
||||
});
|
||||
};
|
||||
|
||||
class FetchError extends Error
|
||||
|
|
@ -71,8 +72,8 @@ class FetchError extends Error
|
|||
|
||||
export class AbstractFetchRemote
|
||||
{
|
||||
abort(sAction, bClearOnly) {
|
||||
abort(sAction, bClearOnly);
|
||||
abort(sAction) {
|
||||
abort(sAction);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
@ -133,7 +134,7 @@ export class AbstractFetchRemote
|
|||
abortActions.forEach(actionToAbort => abort(actionToAbort));
|
||||
}
|
||||
|
||||
fetchJSON(sAction, sGetAdd,
|
||||
fetchJSON(sAction, pString(sGetAdd),
|
||||
params,
|
||||
undefined === iTimeout ? 30000 : pInt(iTimeout),
|
||||
data => {
|
||||
|
|
@ -147,7 +148,7 @@ export class AbstractFetchRemote
|
|||
if (oRequests[sAction].__aborted) {
|
||||
iError = 2;
|
||||
}
|
||||
abort(sAction, true);
|
||||
abort(sAction, 0, 1);
|
||||
}
|
||||
|
||||
if (!iError && data) {
|
||||
|
|
@ -174,8 +175,11 @@ export class AbstractFetchRemote
|
|||
}
|
||||
)
|
||||
.catch(err => {
|
||||
console.error(err);
|
||||
fCallback && fCallback(err.name == 'AbortError' ? 2 : 1);
|
||||
console.error({fetchError:err});
|
||||
fCallback && fCallback(
|
||||
'TimeoutError' == err.reason ? 3 : (err.name == 'AbortError' ? 2 : 1),
|
||||
err
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -199,7 +203,7 @@ export class AbstractFetchRemote
|
|||
this.setTrigger(fTrigger, true);
|
||||
return fetchJSON(action, '', params, pInt(timeOut, 30000),
|
||||
data => {
|
||||
abort(action, true);
|
||||
abort(action, 0, 1);
|
||||
|
||||
if (!data) {
|
||||
return Promise.reject(new FetchError(Notification.JsonParse));
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ class RemoteUserFetch extends AbstractFetchRemote {
|
|||
this.request('MessageList',
|
||||
fCallback,
|
||||
params,
|
||||
30000,
|
||||
60000, // 60 seconds before aborting
|
||||
sGetAdd,
|
||||
bSilent ? [] : ['MessageList']
|
||||
);
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ export class UserSettingsGeneral extends AbstractViewSettings {
|
|||
this.viewHTML = SettingsUserStore.viewHTML;
|
||||
this.showImages = SettingsUserStore.showImages;
|
||||
this.removeColors = SettingsUserStore.removeColors;
|
||||
this.hideDeleted = SettingsUserStore.hideDeleted;
|
||||
this.useCheckboxesInList = SettingsUserStore.useCheckboxesInList;
|
||||
this.threadsAllowed = AppUserStore.threadsAllowed;
|
||||
this.useThreads = SettingsUserStore.useThreads;
|
||||
|
|
@ -92,7 +93,7 @@ export class UserSettingsGeneral extends AbstractViewSettings {
|
|||
this.addSetting('MessagesPerPage');
|
||||
this.addSetting('Layout', () => MessagelistUserStore([]));
|
||||
|
||||
this.addSettings(['ViewHTML', 'ShowImages', 'UseCheckboxesInList', 'ReplySameFolder',
|
||||
this.addSettings(['ViewHTML', 'ShowImages', 'HideDeleted', 'UseCheckboxesInList', 'ReplySameFolder',
|
||||
'DesktopNotifications', 'SoundNotification']);
|
||||
|
||||
const fReloadLanguageHelper = (saveSettingsStep) => () => {
|
||||
|
|
|
|||
|
|
@ -171,8 +171,8 @@ MessagelistUserStore.reload = (bDropPagePosition = false, bDropCurrentFolderCach
|
|||
if (iError) {
|
||||
if (Notification.RequestAborted !== iError) {
|
||||
MessagelistUserStore([]);
|
||||
MessagelistUserStore.error(getNotification(iError));
|
||||
}
|
||||
MessagelistUserStore.error(getNotification(iError));
|
||||
} else {
|
||||
const collection = MessageCollectionModel.reviveFromJson(oData.Result, bCached);
|
||||
if (collection) {
|
||||
|
|
@ -387,7 +387,7 @@ MessagelistUserStore.removeMessagesFromList = (
|
|||
if (MessagelistUserStore.threadUid()) {
|
||||
if (
|
||||
messageList.length &&
|
||||
!!messageList.find(item => !!(item && item.deleted() && item.uid == MessagelistUserStore.threadUid()))
|
||||
messageList.find(item => item && item.deleted() && item.uid == MessagelistUserStore.threadUid())
|
||||
) {
|
||||
const message = messageList.find(item => item && !item.deleted());
|
||||
let setHash;
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ export const SettingsUserStore = new class {
|
|||
useThreads: 0,
|
||||
replySameFolder: 0,
|
||||
hideUnsubscribed: 0,
|
||||
hideDeleted: 1,
|
||||
autoLogout: 0
|
||||
});
|
||||
|
||||
|
|
@ -83,5 +84,6 @@ export const SettingsUserStore = new class {
|
|||
self.replySameFolder(SettingsGet('ReplySameFolder'));
|
||||
|
||||
self.hideUnsubscribed(SettingsGet('HideUnsubscribed'));
|
||||
self.hideDeleted(SettingsGet('HideDeleted'));
|
||||
}
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue