Prevent Circular dependencies

This commit is contained in:
the-djmaze 2022-02-23 23:11:12 +01:00
parent bb4ff4fdc7
commit c270f0ad9a
10 changed files with 99 additions and 125 deletions

View file

@ -61,7 +61,13 @@ import { ComposePopupView } from 'View/Popup/Compose';
import { FolderSystemPopupView } from 'View/Popup/FolderSystem'; import { FolderSystemPopupView } from 'View/Popup/FolderSystem';
import { AskPopupView } from 'View/Popup/Ask'; import { AskPopupView } from 'View/Popup/Ask';
import { folderInformationMultiply, refreshFoldersInterval, messagesMoveHelper, messagesDeleteHelper } from 'Common/Folders'; import {
folderInformationMultiply,
refreshFoldersInterval,
messagesMoveHelper,
messagesDeleteHelper,
fetchFolderInformation
} from 'Common/Folders';
import { loadFolders } from 'Model/FolderCollection'; import { loadFolders } from 'Model/FolderCollection';
class AppUser extends AbstractApp { class AppUser extends AbstractApp {
@ -207,7 +213,7 @@ class AppUser extends AbstractApp {
*/ */
folderInformation(folder, list) { folderInformation(folder, list) {
if (folder && folder.trim()) { if (folder && folder.trim()) {
Remote.folderInformation( fetchFolderInformation(
(iError, data) => { (iError, data) => {
if (!iError && data.Result) { if (!iError && data.Result) {
const result = data.Result, const result = data.Result,

View file

@ -4,7 +4,8 @@ import {
setFolderHash, setFolderHash,
getFolderHash, getFolderHash,
getFolderInboxName, getFolderInboxName,
getFolderFromCacheList getFolderFromCacheList,
getFolderUidNext
} from 'Common/Cache'; } from 'Common/Cache';
import { SettingsUserStore } from 'Stores/User/Settings'; import { SettingsUserStore } from 'Stores/User/Settings';
import { FolderUserStore } from 'Stores/User/Folder'; import { FolderUserStore } from 'Stores/User/Folder';
@ -26,6 +27,43 @@ sortFolders = folders => {
} }
}, },
/**
* @param {?Function} fCallback
* @param {string} folder
* @param {Array=} list = []
*/
fetchFolderInformation = (fCallback, folder, list = []) => {
let fetch = !arrayLength(list);
const uids = [];
if (!fetch) {
list.forEach(messageListItem => {
if (!MessageFlagsCache.getFor(messageListItem.folder, messageListItem.uid)) {
uids.push(messageListItem.uid);
}
if (messageListItem.threads.length) {
messageListItem.threads.forEach(uid => {
if (!MessageFlagsCache.getFor(messageListItem.folder, uid)) {
uids.push(uid);
}
});
}
});
fetch = uids.length;
}
if (fetch) {
Remote.request('FolderInformation', fCallback, {
Folder: folder,
FlagsUids: uids,
UidNext: getFolderUidNext(folder) // Used to check for new messages
});
} else if (SettingsUserStore.useThreads()) {
MessagelistUserStore.reloadFlagsAndCachedMessage();
}
},
/** /**
* @param {Array=} aDisabled * @param {Array=} aDisabled
* @param {Array=} aHeaderLines * @param {Array=} aHeaderLines

View file

@ -12,7 +12,7 @@ const USER_VIEW_MODELS_HOOKS = [],
* @param {?number=} timeout * @param {?number=} timeout
*/ */
rl.pluginRemoteRequest = (callback, action, parameters, timeout) => { rl.pluginRemoteRequest = (callback, action, parameters, timeout) => {
rl.app && rl.app.Remote.request('Plugin' + action, callback, parameters, timeout); rl.app.Remote.request('Plugin' + action, callback, parameters, timeout);
}; };
/** /**

View file

@ -10,6 +10,7 @@ import { MessagelistUserStore } from 'Stores/User/Messagelist';
import { SettingsUserStore } from 'Stores/User/Settings'; import { SettingsUserStore } from 'Stores/User/Settings';
import * as Local from 'Storage/Client'; import * as Local from 'Storage/Client';
import { ThemeStore } from 'Stores/Theme'; import { ThemeStore } from 'Stores/Theme';
import Remote from 'Remote/User/Fetch';
export const export const
@ -269,7 +270,7 @@ populateMessageBody = (oMessage, preload) => {
if (oMessage) { if (oMessage) {
preload || MessageUserStore.hideMessageBodies(); preload || MessageUserStore.hideMessageBodies();
preload || MessageUserStore.loading(true); preload || MessageUserStore.loading(true);
rl.app.Remote.message((iError, oData/*, bCached*/) => { Remote.message((iError, oData/*, bCached*/) => {
if (iError) { if (iError) {
if (Notification.RequestAborted !== iError && !preload) { if (Notification.RequestAborted !== iError && !preload) {
MessageUserStore.message(null); MessageUserStore.message(null);

View file

@ -1,10 +1,9 @@
import { arrayLength, pString, pInt, b64EncodeJSONSafe } from 'Common/Utils'; import { pString, pInt, b64EncodeJSONSafe } from 'Common/Utils';
import { import {
getFolderHash, getFolderHash,
getFolderUidNext, getFolderUidNext,
getFolderFromCacheList, getFolderFromCacheList
MessageFlagsCache
} from 'Common/Cache'; } from 'Common/Cache';
import { SettingsGet } from 'Common/Globals'; import { SettingsGet } from 'Common/Globals';
@ -16,8 +15,6 @@ import { FolderUserStore } from 'Stores/User/Folder';
import { AbstractFetchRemote } from 'Remote/AbstractFetch'; import { AbstractFetchRemote } from 'Remote/AbstractFetch';
import { MessagelistUserStore } from 'Stores/User/Messagelist';
class RemoteUserFetch extends AbstractFetchRemote { class RemoteUserFetch extends AbstractFetchRemote {
/** /**
@ -97,57 +94,6 @@ class RemoteUserFetch extends AbstractFetchRemote {
return false; return false;
} }
/**
* @param {?Function} fCallback
* @param {string} folder
* @param {Array=} list = []
*/
folderInformation(fCallback, folder, list = []) {
let fetch = !arrayLength(list);
const uids = [];
if (!fetch) {
list.forEach(messageListItem => {
if (!MessageFlagsCache.getFor(messageListItem.folder, messageListItem.uid)) {
uids.push(messageListItem.uid);
}
if (messageListItem.threads.length) {
messageListItem.threads.forEach(uid => {
if (!MessageFlagsCache.getFor(messageListItem.folder, uid)) {
uids.push(uid);
}
});
}
});
fetch = uids.length;
}
if (fetch) {
this.request('FolderInformation', fCallback, {
Folder: folder,
FlagsUids: uids,
UidNext: getFolderUidNext(folder) // Used to check for new messages
});
} else if (SettingsUserStore.useThreads()) {
MessagelistUserStore.reloadFlagsAndCachedMessage();
}
}
/**
* @param {?Function} fCallback
* @param {string} sFolderFullName
* @param {boolean} bSetSeen
* @param {Array} aThreadUids = null
*/
messageSetSeenToAll(sFolderFullName, bSetSeen, aThreadUids = null) {
this.request('MessageSetSeenToAll', null, {
Folder: sFolderFullName,
SetAction: bSetSeen ? 1 : 0,
ThreadUids: aThreadUids ? aThreadUids.join(',') : ''
});
}
/** /**
* @param {?Function} fCallback * @param {?Function} fCallback
* @param {Object} oData * @param {Object} oData
@ -167,37 +113,6 @@ class RemoteUserFetch extends AbstractFetchRemote {
}); });
} }
/**
* @param {?Function} fCallback
* @param {string} sFolderFullName
* @param {boolean} bSubscribe
*/
folderSetMetadata(fCallback, sFolderFullName, sKey, sValue) {
this.request('FolderSetMetadata', fCallback, {
Folder: sFolderFullName,
Key: sKey,
Value: sValue
});
}
/**
* @param {?Function} fCallback
* @param {string} sQuery
* @param {number} iPage
*/
suggestions(fCallback, sQuery, iPage) {
this.request('Suggestions',
fCallback,
{
Query: sQuery,
Page: iPage
},
null,
'',
['Suggestions']
);
}
/* /*
folderMove(sPrevFolderFullName, sNewFolderFullName, bSubscribe) { folderMove(sPrevFolderFullName, sNewFolderFullName, bSubscribe) {
return this.post('FolderMove', FolderUserStore.foldersRenaming, { return this.post('FolderMove', FolderUserStore.foldersRenaming, {
@ -207,12 +122,6 @@ class RemoteUserFetch extends AbstractFetchRemote {
}); });
} }
*/ */
attachmentsActions(sAction, aHashes, fTrigger) {
return this.post('AttachmentsActions', fTrigger, {
Do: sAction,
Hashes: aHashes
});
}
} }
export default new RemoteUserFetch(); export default new RemoteUserFetch();

View file

@ -163,7 +163,11 @@ export class FoldersUserSettings /*extends AbstractViewSettings*/ {
toggleFolderKolabType(folder, event) { toggleFolderKolabType(folder, event) {
let type = event.target.value; let type = event.target.value;
// TODO: append '.default' ? // TODO: append '.default' ?
Remote.folderSetMetadata(null, folder.fullName, FolderMetadataKeys.KolabFolderType, type); Remote.request('FolderSetMetadata', null, {
Folder: folder.fullName,
Key: FolderMetadataKeys.KolabFolderType,
Value: type
});
folder.kolabType(type); folder.kolabType(type);
} }

View file

@ -27,7 +27,7 @@ import { MessageUserStore } from 'Stores/User/Message';
import { NotificationUserStore } from 'Stores/User/Notification'; import { NotificationUserStore } from 'Stores/User/Notification';
import { SettingsUserStore } from 'Stores/User/Settings'; import { SettingsUserStore } from 'Stores/User/Settings';
//import Remote from 'Remote/User/Fetch'; // Circular dependency import Remote from 'Remote/User/Fetch';
const const
isChecked = item => item.checked(); isChecked = item => item.checked();
@ -169,7 +169,7 @@ MessagelistUserStore.reload = (bDropPagePosition = false, bDropCurrenFolderCache
MessagelistUserStore.loading(true); MessagelistUserStore.loading(true);
MessagelistUserStore.error(''); MessagelistUserStore.error('');
rl.app.Remote.messageList( Remote.messageList(
(iError, oData, bCached) => { (iError, oData, bCached) => {
if (iError) { if (iError) {
if (Notification.RequestAborted !== iError) { if (Notification.RequestAborted !== iError) {
@ -279,7 +279,7 @@ MessagelistUserStore.setAction = (sFolderFullName, iSetAction, messages) => {
folder.messageCountUnread(folder.messageCountUnread() - alreadyUnread + length); folder.messageCountUnread(folder.messageCountUnread() - alreadyUnread + length);
} }
rl.app.Remote.request('MessageSetSeen', null, { Remote.request('MessageSetSeen', null, {
Folder: sFolderFullName, Folder: sFolderFullName,
Uids: rootUids.join(','), Uids: rootUids.join(','),
SetAction: iSetAction == MessageSetAction.SetSeen ? 1 : 0 SetAction: iSetAction == MessageSetAction.SetSeen ? 1 : 0
@ -291,7 +291,7 @@ MessagelistUserStore.setAction = (sFolderFullName, iSetAction, messages) => {
rootUids.forEach(sSubUid => rootUids.forEach(sSubUid =>
MessageFlagsCache.storeBySetAction(sFolderFullName, sSubUid, iSetAction) MessageFlagsCache.storeBySetAction(sFolderFullName, sSubUid, iSetAction)
); );
rl.app.Remote.request('MessageSetFlagged', null, { Remote.request('MessageSetFlagged', null, {
Folder: sFolderFullName, Folder: sFolderFullName,
Uids: rootUids.join(','), Uids: rootUids.join(','),
SetAction: iSetAction == MessageSetAction.SetFlag ? 1 : 0 SetAction: iSetAction == MessageSetAction.SetFlag ? 1 : 0

View file

@ -687,16 +687,25 @@ class ComposePopupView extends AbstractViewPopup {
// getAutocomplete // getAutocomplete
emailsSource(oData, fResponse) { emailsSource(oData, fResponse) {
Remote.suggestions((iError, data) => { Remote.request('Suggestions',
if (!iError && isArray(data.Result)) { (iError, data) => {
fResponse( if (!iError && isArray(data.Result)) {
data.Result.map(item => (item && item[0] ? (new EmailModel(item[0], item[1])).toLine(false) : null)) fResponse(
.filter(v => v) data.Result.map(item => (item && item[0] ? (new EmailModel(item[0], item[1])).toLine(false) : null))
); .filter(v => v)
} else if (Notification.RequestAborted !== iError) { );
fResponse([]); } else if (Notification.RequestAborted !== iError) {
} fResponse([]);
}, oData.term); }
},
{
Query: oData.term
// ,Page: 1
},
null,
'',
['Suggestions']
);
} }
reloadDraftFolder() { reloadDraftFolder() {

View file

@ -490,7 +490,7 @@ export class MailMessageList extends AbstractViewRight {
message.flags.push('\\seen'); message.flags.push('\\seen');
// message.flags.valueHasMutated(); // message.flags.valueHasMutated();
uids.push(message.uid); iThreadUid && uids.push(message.uid);
}); });
if (iThreadUid) { if (iThreadUid) {
@ -501,7 +501,11 @@ export class MailMessageList extends AbstractViewRight {
MessageFlagsCache.clearFolder(sFolderFullName); MessageFlagsCache.clearFolder(sFolderFullName);
Remote.messageSetSeenToAll(sFolderFullName, true, iThreadUid ? uids : null); Remote.request('MessageSetSeenToAll', null, {
Folder: sFolderFullName,
SetAction: 1,
ThreadUids: uids.join(',')
});
MessagelistUserStore.reloadFlagsAndCachedMessage(); MessagelistUserStore.reloadFlagsAndCachedMessage();
} }

View file

@ -522,16 +522,19 @@ export class MailMessageView extends AbstractViewRight {
.map(item => (item && !item.isLinked() && item.checked() ? item.download : '')) .map(item => (item && !item.isLinked() && item.checked() ? item.download : ''))
.filter(v => v); .filter(v => v);
if (hashes.length) { if (hashes.length) {
Remote.attachmentsActions('Zip', hashes, this.downloadAsZipLoading) Remote.post('AttachmentsActions', this.downloadAsZipLoading, {
.then(result => { Do: 'Zip',
let hash = result && result.Result && result.Result.FileHash; Hashes: hashes
if (hash) { })
download(attachmentDownload(hash), hash+'.zip'); .then(result => {
} else { let hash = result && result.Result && result.Result.FileHash;
this.downloadAsZipError(true); if (hash) {
} download(attachmentDownload(hash), hash+'.zip');
}) } else {
.catch(() => this.downloadAsZipError(true)); this.downloadAsZipError(true);
}
})
.catch(() => this.downloadAsZipError(true));
} else { } else {
this.highlightUnselectedAttachments(true); this.highlightUnselectedAttachments(true);
} }