diff --git a/dev/App/User.js b/dev/App/User.js index 60811ce21..febb678a1 100644 --- a/dev/App/User.js +++ b/dev/App/User.js @@ -61,7 +61,13 @@ import { ComposePopupView } from 'View/Popup/Compose'; import { FolderSystemPopupView } from 'View/Popup/FolderSystem'; 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'; class AppUser extends AbstractApp { @@ -207,7 +213,7 @@ class AppUser extends AbstractApp { */ folderInformation(folder, list) { if (folder && folder.trim()) { - Remote.folderInformation( + fetchFolderInformation( (iError, data) => { if (!iError && data.Result) { const result = data.Result, diff --git a/dev/Common/Folders.js b/dev/Common/Folders.js index fa59abfe0..836d5cc90 100644 --- a/dev/Common/Folders.js +++ b/dev/Common/Folders.js @@ -4,7 +4,8 @@ import { setFolderHash, getFolderHash, getFolderInboxName, - getFolderFromCacheList + getFolderFromCacheList, + getFolderUidNext } from 'Common/Cache'; import { SettingsUserStore } from 'Stores/User/Settings'; 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=} aHeaderLines diff --git a/dev/Common/Plugins.js b/dev/Common/Plugins.js index 5971a889b..694930c1f 100644 --- a/dev/Common/Plugins.js +++ b/dev/Common/Plugins.js @@ -12,7 +12,7 @@ const USER_VIEW_MODELS_HOOKS = [], * @param {?number=} 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); }; /** diff --git a/dev/Common/UtilsUser.js b/dev/Common/UtilsUser.js index b366cd158..e3b8ff9eb 100644 --- a/dev/Common/UtilsUser.js +++ b/dev/Common/UtilsUser.js @@ -10,6 +10,7 @@ import { MessagelistUserStore } from 'Stores/User/Messagelist'; import { SettingsUserStore } from 'Stores/User/Settings'; import * as Local from 'Storage/Client'; import { ThemeStore } from 'Stores/Theme'; +import Remote from 'Remote/User/Fetch'; export const @@ -269,7 +270,7 @@ populateMessageBody = (oMessage, preload) => { if (oMessage) { preload || MessageUserStore.hideMessageBodies(); preload || MessageUserStore.loading(true); - rl.app.Remote.message((iError, oData/*, bCached*/) => { + Remote.message((iError, oData/*, bCached*/) => { if (iError) { if (Notification.RequestAborted !== iError && !preload) { MessageUserStore.message(null); diff --git a/dev/Remote/User/Fetch.js b/dev/Remote/User/Fetch.js index 8f95671e6..32366fd04 100644 --- a/dev/Remote/User/Fetch.js +++ b/dev/Remote/User/Fetch.js @@ -1,10 +1,9 @@ -import { arrayLength, pString, pInt, b64EncodeJSONSafe } from 'Common/Utils'; +import { pString, pInt, b64EncodeJSONSafe } from 'Common/Utils'; import { getFolderHash, getFolderUidNext, - getFolderFromCacheList, - MessageFlagsCache + getFolderFromCacheList } from 'Common/Cache'; import { SettingsGet } from 'Common/Globals'; @@ -16,8 +15,6 @@ import { FolderUserStore } from 'Stores/User/Folder'; import { AbstractFetchRemote } from 'Remote/AbstractFetch'; -import { MessagelistUserStore } from 'Stores/User/Messagelist'; - class RemoteUserFetch extends AbstractFetchRemote { /** @@ -97,57 +94,6 @@ class RemoteUserFetch extends AbstractFetchRemote { 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 {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) { 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(); diff --git a/dev/Settings/User/Folders.js b/dev/Settings/User/Folders.js index fbafe0918..a6d9aba3b 100644 --- a/dev/Settings/User/Folders.js +++ b/dev/Settings/User/Folders.js @@ -163,7 +163,11 @@ export class FoldersUserSettings /*extends AbstractViewSettings*/ { toggleFolderKolabType(folder, event) { let type = event.target.value; // 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); } diff --git a/dev/Stores/User/Messagelist.js b/dev/Stores/User/Messagelist.js index 2b1890e6d..ed3bc11e6 100644 --- a/dev/Stores/User/Messagelist.js +++ b/dev/Stores/User/Messagelist.js @@ -27,7 +27,7 @@ import { MessageUserStore } from 'Stores/User/Message'; import { NotificationUserStore } from 'Stores/User/Notification'; import { SettingsUserStore } from 'Stores/User/Settings'; -//import Remote from 'Remote/User/Fetch'; // Circular dependency +import Remote from 'Remote/User/Fetch'; const isChecked = item => item.checked(); @@ -169,7 +169,7 @@ MessagelistUserStore.reload = (bDropPagePosition = false, bDropCurrenFolderCache MessagelistUserStore.loading(true); MessagelistUserStore.error(''); - rl.app.Remote.messageList( + Remote.messageList( (iError, oData, bCached) => { if (iError) { if (Notification.RequestAborted !== iError) { @@ -279,7 +279,7 @@ MessagelistUserStore.setAction = (sFolderFullName, iSetAction, messages) => { folder.messageCountUnread(folder.messageCountUnread() - alreadyUnread + length); } - rl.app.Remote.request('MessageSetSeen', null, { + Remote.request('MessageSetSeen', null, { Folder: sFolderFullName, Uids: rootUids.join(','), SetAction: iSetAction == MessageSetAction.SetSeen ? 1 : 0 @@ -291,7 +291,7 @@ MessagelistUserStore.setAction = (sFolderFullName, iSetAction, messages) => { rootUids.forEach(sSubUid => MessageFlagsCache.storeBySetAction(sFolderFullName, sSubUid, iSetAction) ); - rl.app.Remote.request('MessageSetFlagged', null, { + Remote.request('MessageSetFlagged', null, { Folder: sFolderFullName, Uids: rootUids.join(','), SetAction: iSetAction == MessageSetAction.SetFlag ? 1 : 0 diff --git a/dev/View/Popup/Compose.js b/dev/View/Popup/Compose.js index 4ba7b90f5..3a09eda92 100644 --- a/dev/View/Popup/Compose.js +++ b/dev/View/Popup/Compose.js @@ -687,16 +687,25 @@ class ComposePopupView extends AbstractViewPopup { // getAutocomplete emailsSource(oData, fResponse) { - Remote.suggestions((iError, data) => { - if (!iError && isArray(data.Result)) { - fResponse( - 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([]); - } - }, oData.term); + Remote.request('Suggestions', + (iError, data) => { + if (!iError && isArray(data.Result)) { + fResponse( + 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([]); + } + }, + { + Query: oData.term +// ,Page: 1 + }, + null, + '', + ['Suggestions'] + ); } reloadDraftFolder() { diff --git a/dev/View/User/MailBox/MessageList.js b/dev/View/User/MailBox/MessageList.js index 2f211611d..6c6a25be6 100644 --- a/dev/View/User/MailBox/MessageList.js +++ b/dev/View/User/MailBox/MessageList.js @@ -490,7 +490,7 @@ export class MailMessageList extends AbstractViewRight { message.flags.push('\\seen'); // message.flags.valueHasMutated(); - uids.push(message.uid); + iThreadUid && uids.push(message.uid); }); if (iThreadUid) { @@ -501,7 +501,11 @@ export class MailMessageList extends AbstractViewRight { MessageFlagsCache.clearFolder(sFolderFullName); - Remote.messageSetSeenToAll(sFolderFullName, true, iThreadUid ? uids : null); + Remote.request('MessageSetSeenToAll', null, { + Folder: sFolderFullName, + SetAction: 1, + ThreadUids: uids.join(',') + }); MessagelistUserStore.reloadFlagsAndCachedMessage(); } diff --git a/dev/View/User/MailBox/MessageView.js b/dev/View/User/MailBox/MessageView.js index d1896c29b..d4b83eefc 100644 --- a/dev/View/User/MailBox/MessageView.js +++ b/dev/View/User/MailBox/MessageView.js @@ -522,16 +522,19 @@ export class MailMessageView extends AbstractViewRight { .map(item => (item && !item.isLinked() && item.checked() ? item.download : '')) .filter(v => v); if (hashes.length) { - Remote.attachmentsActions('Zip', hashes, this.downloadAsZipLoading) - .then(result => { - let hash = result && result.Result && result.Result.FileHash; - if (hash) { - download(attachmentDownload(hash), hash+'.zip'); - } else { - this.downloadAsZipError(true); - } - }) - .catch(() => this.downloadAsZipError(true)); + Remote.post('AttachmentsActions', this.downloadAsZipLoading, { + Do: 'Zip', + Hashes: hashes + }) + .then(result => { + let hash = result && result.Result && result.Result.FileHash; + if (hash) { + download(attachmentDownload(hash), hash+'.zip'); + } else { + this.downloadAsZipError(true); + } + }) + .catch(() => this.downloadAsZipError(true)); } else { this.highlightUnselectedAttachments(true); }