diff --git a/dev/App/User.js b/dev/App/User.js index 7b03711a2..9f11a2854 100644 --- a/dev/App/User.js +++ b/dev/App/User.js @@ -97,11 +97,10 @@ class AppUser extends AbstractApp { setInterval(() => { const currentTime = Date.now(); if (currentTime > (lastTime + interval + 1000)) { - Remote.jsVersion(iError => { - if (100 < iError) { - this.reload(); - } - }, Settings.app('version')); + Remote.request('Version', + iError => (100 < iError) && this.reload(), + { Version: Settings.app('version') } + ); } lastTime = currentTime; }, interval); @@ -185,13 +184,18 @@ class AppUser extends AbstractApp { isTrash = sTrashFolder === item.To, isHam = !isSpam && sSpamFolder === item.From && getFolderInboxName() === item.To; - Remote.messagesMove( + Remote.request('MessageMove', this.moveOrDeleteResponseHelper, - item.From, - item.To, - item.Uid, - isSpam ? 'SPAM' : isHam ? 'HAM' : '', - isSpam || isTrash + { + FromFolder: item.From, + ToFolder: item.To, + Uids: item.Uid.join(','), + MarkAsRead: (isSpam || isTrash) ? 1 : 0, + Learning: isSpam ? 'SPAM' : isHam ? 'HAM' : '' + }, + null, + '', + ['MessageList'] ); }); @@ -213,11 +217,24 @@ class AppUser extends AbstractApp { } messagesCopyHelper(sFromFolderFullName, sToFolderFullName, aUidForCopy) { - Remote.messagesCopy(this.moveOrDeleteResponseHelper, sFromFolderFullName, sToFolderFullName, aUidForCopy); + Remote.request('MessageCopy', this.moveOrDeleteResponseHelper, { + FromFolder: sFromFolderFullName, + ToFolder: sToFolderFullName, + Uids: aUidForCopy.join(',') + }); } messagesDeleteHelper(sFromFolderFullName, aUidForRemove) { - Remote.messagesDelete(this.moveOrDeleteResponseHelper, sFromFolderFullName, aUidForRemove); + Remote.request('MessageDelete', + this.moveOrDeleteResponseHelper, + { + Folder: sFromFolderFullName, + Uids: aUidForRemove.join(',') + }, + null, + '', + ['MessageList'] + ); } moveOrDeleteResponseHelper(iError, oData) { @@ -414,7 +431,7 @@ class AppUser extends AbstractApp { AccountUserStore.loading(true); IdentityUserStore.loading(true); - Remote.accountsAndIdentities((iError, oData) => { + Remote.request('AccountsAndIdentities', (iError, oData) => { AccountUserStore.loading(false); IdentityUserStore.loading(false); @@ -531,7 +548,7 @@ class AppUser extends AbstractApp { folderInformationMultiply(boot = false) { const folders = FolderUserStore.getNextFolderNames(refreshFolders); if (arrayLength(folders)) { - Remote.folderInformationMultiply((iError, oData) => { + Remote.request('FolderInformationMultiply', (iError, oData) => { if (!iError && arrayLength(oData.Result)) { const utc = Date.now(); oData.Result.forEach(item => { @@ -569,7 +586,9 @@ class AppUser extends AbstractApp { setTimeout(() => this.folderInformationMultiply(true), 2000); } } - }, folders); + }, { + Folders: folders + }); } } @@ -579,32 +598,19 @@ class AppUser extends AbstractApp { * @param {Array=} messages = null */ messageListAction(sFolderFullName, iSetAction, messages) { + messages = messages || MessageUserStore.listChecked(); + let folder = null, alreadyUnread = 0, - rootUids = []; + rootUids = messages.map(oMessage => oMessage && oMessage.uid ? oMessage.uid : null) + .validUnique(), + length = rootUids.length; - if (undefined === messages || !messages) { - messages = MessageUserStore.listChecked(); - } - - rootUids = messages.map(oMessage => oMessage && oMessage.uid ? oMessage.uid : null) - .validUnique(); - - if (sFolderFullName && rootUids.length) { + if (sFolderFullName && length) { switch (iSetAction) { case MessageSetAction.SetSeen: - rootUids.forEach(sSubUid => - alreadyUnread += MessageFlagsCache.storeBySetAction(sFolderFullName, sSubUid, iSetAction) - ); - - folder = getFolderFromCacheList(sFolderFullName); - if (folder) { - folder.messageCountUnread(folder.messageCountUnread() - alreadyUnread); - } - - Remote.messageSetSeen(null, sFolderFullName, rootUids, true); - break; - + length = 0; + // fallthrough is intentionally case MessageSetAction.UnsetSeen: rootUids.forEach(sSubUid => alreadyUnread += MessageFlagsCache.storeBySetAction(sFolderFullName, sSubUid, iSetAction) @@ -612,26 +618,26 @@ class AppUser extends AbstractApp { folder = getFolderFromCacheList(sFolderFullName); if (folder) { - folder.messageCountUnread(folder.messageCountUnread() - alreadyUnread + rootUids.length); + folder.messageCountUnread(folder.messageCountUnread() - alreadyUnread + length); } - Remote.messageSetSeen(null, sFolderFullName, rootUids, false); + Remote.request('MessageSetSeen', null, { + Folder: sFolderFullName, + Uids: rootUids.join(','), + SetAction: iSetAction == MessageSetAction.SetSeen ? 1 : 0 + }); break; case MessageSetAction.SetFlag: - rootUids.forEach(sSubUid => - MessageFlagsCache.storeBySetAction(sFolderFullName, sSubUid, iSetAction) - ); - - Remote.messageSetFlagged(null, sFolderFullName, rootUids, true); - break; - case MessageSetAction.UnsetFlag: rootUids.forEach(sSubUid => MessageFlagsCache.storeBySetAction(sFolderFullName, sSubUid, iSetAction) ); - - Remote.messageSetFlagged(null, sFolderFullName, rootUids, false); + Remote.request('MessageSetFlagged', null, { + Folder: sFolderFullName, + Uids: rootUids.join(','), + SetAction: iSetAction == MessageSetAction.SetFlag ? 1 : 0 + }); break; // no default } @@ -694,7 +700,7 @@ class AppUser extends AbstractApp { } logout() { - Remote.logout(() => rl.logoutReload()); + Remote.request('Logout', () => rl.logoutReload()); } bootstart() { @@ -757,7 +763,7 @@ class AppUser extends AbstractApp { FolderUserStore.hasCapability('LIST-STATUS') || this.folderInformationMultiply(true); }, 1000); - setTimeout(() => Remote.appDelayStart(null), 35000); + setTimeout(() => Remote.request('AppDelayStart'), 35000); // When auto-login is active if ( diff --git a/dev/Common/Plugins.js b/dev/Common/Plugins.js index eef1a08ac..5021e7a48 100644 --- a/dev/Common/Plugins.js +++ b/dev/Common/Plugins.js @@ -13,7 +13,7 @@ const USER_VIEW_MODELS_HOOKS = [], * @param {?number=} timeout */ rl.pluginRemoteRequest = (callback, action, parameters, timeout) => { - rl.app && rl.app.Remote.defaultRequest(callback, 'Plugin' + action, parameters, timeout); + rl.app && rl.app.Remote.request('Plugin' + action, callback, parameters, timeout); }; /** diff --git a/dev/Remote/AbstractFetch.js b/dev/Remote/AbstractFetch.js index d5b375289..53965a33f 100644 --- a/dev/Remote/AbstractFetch.js +++ b/dev/Remote/AbstractFetch.js @@ -125,7 +125,7 @@ export class AbstractFetchRemote * @param {string=} sGetAdd = '' * @param {Array=} aAbortActions = [] */ - defaultRequest(fCallback, sAction, params, iTimeout, sGetAdd, abortActions) { + request(sAction, fCallback, params, iTimeout, sGetAdd, abortActions) { params = params || {}; const start = Date.now(); @@ -184,24 +184,14 @@ export class AbstractFetchRemote * @param {?Function} fCallback */ noop(fCallback) { - this.defaultRequest(fCallback, 'Noop'); + this.request('Noop', fCallback); } /** * @param {?Function} fCallback */ getPublicKey(fCallback) { - this.defaultRequest(fCallback, 'GetPublicKey'); - } - - /** - * @param {?Function} fCallback - * @param {string} sVersion - */ - jsVersion(fCallback, sVersion) { - this.defaultRequest(fCallback, 'Version', { - Version: sVersion - }); + this.request('GetPublicKey', fCallback); } fastResolve(mData) { @@ -217,7 +207,7 @@ export class AbstractFetchRemote } } - postRequest(action, fTrigger, params, timeOut) { + post(action, fTrigger, params, timeOut) { this.setTrigger(fTrigger, true); return fetchJSON(action, '', params, pInt(timeOut, 30000), data => { diff --git a/dev/Remote/Admin/Fetch.js b/dev/Remote/Admin/Fetch.js index aad08326c..2446cb306 100644 --- a/dev/Remote/Admin/Fetch.js +++ b/dev/Remote/Admin/Fetch.js @@ -7,7 +7,7 @@ class RemoteAdminFetch extends AbstractFetchRemote { * @param {string} sPassword */ adminLogin(fCallback, sLogin, sPassword, sCode) { - this.defaultRequest(fCallback, 'AdminLogin', { + this.request('AdminLogin', fCallback, { Login: sLogin, Password: sPassword, TOTP: sCode @@ -18,7 +18,7 @@ class RemoteAdminFetch extends AbstractFetchRemote { * @param {?Function} fCallback */ adminLogout(fCallback) { - this.defaultRequest(fCallback, 'AdminLogout'); + this.request('AdminLogout', fCallback); } /** @@ -26,7 +26,7 @@ class RemoteAdminFetch extends AbstractFetchRemote { * @param {?} oData */ saveAdminConfig(fCallback, oData) { - this.defaultRequest(fCallback, 'AdminSettingsUpdate', oData); + this.request('AdminSettingsUpdate', fCallback, oData); } /** @@ -34,7 +34,7 @@ class RemoteAdminFetch extends AbstractFetchRemote { * @param {boolean=} bIncludeAliases = true */ domainList(fCallback, bIncludeAliases = true) { - this.defaultRequest(fCallback, 'AdminDomainList', { + this.request('AdminDomainList', fCallback, { IncludeAliases: bIncludeAliases ? 1 : 0 }); } @@ -43,7 +43,7 @@ class RemoteAdminFetch extends AbstractFetchRemote { * @param {?Function} fCallback */ packagesList(fCallback) { - this.defaultRequest(fCallback, 'AdminPackagesList'); + this.request('AdminPackagesList', fCallback); } /** @@ -51,9 +51,7 @@ class RemoteAdminFetch extends AbstractFetchRemote { * @param {Object} oPackage */ packageInstall(fCallback, oPackage) { - this.defaultRequest( - fCallback, - 'AdminPackageInstall', + this.request('AdminPackageInstall', fCallback, { Id: oPackage.id, Type: oPackage.type, @@ -68,7 +66,7 @@ class RemoteAdminFetch extends AbstractFetchRemote { * @param {Object} oPackage */ packageDelete(fCallback, oPackage) { - this.defaultRequest(fCallback, 'AdminPackageDelete', { + this.request('AdminPackageDelete', fCallback, { Id: oPackage.id }); } @@ -78,7 +76,7 @@ class RemoteAdminFetch extends AbstractFetchRemote { * @param {string} sName */ domain(fCallback, sName) { - this.defaultRequest(fCallback, 'AdminDomainLoad', { + this.request('AdminDomainLoad', fCallback, { Name: sName }); } @@ -88,7 +86,7 @@ class RemoteAdminFetch extends AbstractFetchRemote { * @param {string} sId */ plugin(fCallback, sId) { - this.defaultRequest(fCallback, 'AdminPluginLoad', { + this.request('AdminPluginLoad', fCallback, { Id: sId }); } @@ -98,7 +96,7 @@ class RemoteAdminFetch extends AbstractFetchRemote { * @param {string} sName */ domainDelete(fCallback, sName) { - this.defaultRequest(fCallback, 'AdminDomainDelete', { + this.request('AdminDomainDelete', fCallback, { Name: sName }); } @@ -109,7 +107,7 @@ class RemoteAdminFetch extends AbstractFetchRemote { * @param {boolean} bDisabled */ domainDisable(fCallback, sName, bDisabled) { - this.defaultRequest(fCallback, 'AdminDomainDisable', { + this.request('AdminDomainDisable', fCallback, { Name: sName, Disabled: bDisabled ? 1 : 0 }); @@ -120,7 +118,7 @@ class RemoteAdminFetch extends AbstractFetchRemote { * @param {Object} oConfig */ pluginSettingsUpdate(fCallback, oConfig) { - this.defaultRequest(fCallback, 'AdminPluginSettingsUpdate', oConfig); + this.request('AdminPluginSettingsUpdate', fCallback, oConfig); } /** @@ -129,21 +127,21 @@ class RemoteAdminFetch extends AbstractFetchRemote { * @param {boolean} bDisabled */ pluginDisable(fCallback, sId, bDisabled) { - this.defaultRequest(fCallback, 'AdminPluginDisable', { + this.request('AdminPluginDisable', fCallback, { Id: sId, Disabled: bDisabled ? 1 : 0 }); } createDomainAlias(fCallback, sName, sAlias) { - this.defaultRequest(fCallback, 'AdminDomainAliasSave', { + this.request('AdminDomainAliasSave', fCallback, { Name: sName, Alias: sAlias }); } createOrUpdateDomain(fCallback, oDomain) { - this.defaultRequest(fCallback, 'AdminDomainSave', { + this.request('AdminDomainSave', fCallback, { Create: oDomain.edit() ? 0 : 1, Name: oDomain.name(), @@ -170,7 +168,7 @@ class RemoteAdminFetch extends AbstractFetchRemote { } testConnectionForDomain(fCallback, oDomain) { - this.defaultRequest(fCallback, 'AdminDomainTest', { + this.request('AdminDomainTest', fCallback, { Name: oDomain.name(), IncHost: oDomain.imapServer(), IncPort: oDomain.imapPort(), @@ -192,7 +190,7 @@ class RemoteAdminFetch extends AbstractFetchRemote { * @param {?} oData */ testContacts(fCallback, oData) { - this.defaultRequest(fCallback, 'AdminContactsTest', oData); + this.request('AdminContactsTest', fCallback, oData); } } diff --git a/dev/Remote/User/Fetch.js b/dev/Remote/User/Fetch.js index b6bd1a136..309d8f0fc 100644 --- a/dev/Remote/User/Fetch.js +++ b/dev/Remote/User/Fetch.js @@ -35,135 +35,6 @@ const urlSafeJSON = data => btoa(encodeURIComponent(JSON.stringify(data)).replac class RemoteUserFetch extends AbstractFetchRemote { - /** - * @param {?Function} fCallback - */ - contactsSync(fCallback) { - this.defaultRequest(fCallback, 'ContactsSync', null, 200000); - } - - /** - * @param {?Function} fCallback - * @param {boolean} bEnable - * @param {string} sUrl - * @param {string} sUser - * @param {string} sPassword - */ - saveContactsSyncData(fCallback, bEnable, sUrl, sUser, sPassword) { - this.defaultRequest(fCallback, 'SaveContactsSyncData', { - Enable: bEnable ? 1 : 0, - Url: sUrl, - User: sUser, - Password: sPassword - }); - } - - /** - * @param {?Function} fCallback - * @param {string} sEmail - * @param {string} sPassword - * @param {boolean=} bNew - */ - accountSetup(fCallback, sEmail, sPassword, bNew = true) { - this.defaultRequest(fCallback, 'AccountSetup', { - Email: sEmail, - Password: sPassword, - New: bNew ? 1 : 0 - }); - } - - /** - * @param {?Function} fCallback - * @param {string} sEmailToDelete - */ - accountDelete(fCallback, sEmailToDelete) { - this.defaultRequest(fCallback, 'AccountDelete', { - EmailToDelete: sEmailToDelete - }); - } - - /** - * @param {?Function} fCallback - * @param {Array} aAccounts - * @param {Array} aIdentities - */ - accountsAndIdentitiesSortOrder(fCallback, aAccounts, aIdentities) { - this.defaultRequest(fCallback, 'AccountsAndIdentitiesSortOrder', { - Accounts: aAccounts, - Identities: aIdentities - }); - } - - /** - * @param {?Function} fCallback - * @param {string} sId - * @param {string} sEmail - * @param {string} sName - * @param {string} sReplyTo - * @param {string} sBcc - * @param {string} sSignature - * @param {boolean} bSignatureInsertBefore - */ - identityUpdate(fCallback, sId, sEmail, sName, sReplyTo, sBcc, sSignature, bSignatureInsertBefore) { - this.defaultRequest(fCallback, 'IdentityUpdate', { - Id: sId, - Email: sEmail, - Name: sName, - ReplyTo: sReplyTo, - Bcc: sBcc, - Signature: sSignature, - SignatureInsertBefore: bSignatureInsertBefore ? 1 : 0 - }); - } - - /** - * @param {?Function} fCallback - * @param {string} sIdToDelete - */ - identityDelete(fCallback, sIdToDelete) { - this.defaultRequest(fCallback, 'IdentityDelete', { - IdToDelete: sIdToDelete - }); - } - - /** - * @param {?Function} fCallback - */ - accountsAndIdentities(fCallback) { - this.defaultRequest(fCallback, 'AccountsAndIdentities'); - } - - /** - * @param {?Function} fCallback - * @param {SieveScriptModel} script - */ - filtersScriptSave(fCallback, script) { - this.defaultRequest(fCallback, 'FiltersScriptSave', script.toJson()); - } - - /** - * @param {?Function} fCallback - * @param {string} name - */ - filtersScriptActivate(fCallback, name) { - this.defaultRequest(fCallback, 'FiltersScriptActivate', {name:name}); - } - - /** - * @param {?Function} fCallback - * @param {string} name - */ - filtersScriptDelete(fCallback, name) { - this.defaultRequest(fCallback, 'FiltersScriptDelete', {name:name}); - } - - /** - * @param {?Function} fCallback - */ - filtersGet(fCallback) { - this.defaultRequest(fCallback, 'Filters', {}); - } - /** * @param {Function} fCallback * @param {object} params @@ -199,9 +70,8 @@ class RemoteUserFetch extends AbstractFetchRemote { params = {}; } - this.defaultRequest( + this.request('MessageList', fCallback, - 'MessageList', params, 30000, sGetAdd, @@ -209,21 +79,6 @@ class RemoteUserFetch extends AbstractFetchRemote { ); } - /** - * @param {?Function} fCallback - * @param {Array} aDownloads - */ - messageUploadAttachments(fCallback, aDownloads) { - this.defaultRequest( - fCallback, - 'MessageUploadAttachments', - { - Attachments: aDownloads - }, - 999000 - ); - } - /** * @param {?Function} fCallback * @param {string} sFolderFullName @@ -235,9 +90,8 @@ class RemoteUserFetch extends AbstractFetchRemote { iUid = pInt(iUid); if (getFolderFromCacheList(sFolderFullName) && 0 < iUid) { - this.defaultRequest( + this.request('Message', fCallback, - 'Message', {}, null, 'Message/' + @@ -258,38 +112,6 @@ class RemoteUserFetch extends AbstractFetchRemote { return false; } - /** - * @param {?Function} fCallback - * @param {Array} aExternals - */ - composeUploadExternals(fCallback, aExternals) { - this.defaultRequest( - fCallback, - 'ComposeUploadExternals', - { - Externals: aExternals - }, - 999000 - ); - } - - /** - * @param {?Function} fCallback - * @param {string} sUrl - * @param {string} sAccessToken - */ - composeUploadDrive(fCallback, sUrl, sAccessToken) { - this.defaultRequest( - fCallback, - 'ComposeUploadDrive', - { - AccessToken: sAccessToken, - Url: sUrl - }, - 999000 - ); - } - /** * @param {?Function} fCallback * @param {string} folder @@ -321,7 +143,7 @@ class RemoteUserFetch extends AbstractFetchRemote { } if (request) { - this.defaultRequest(fCallback, 'FolderInformation', { + this.request('FolderInformation', fCallback, { Folder: folder, FlagsUids: isArray(uids) ? uids : [], UidNext: getFolderInboxName() === folder ? getFolderUidNext(folder) : 0 @@ -331,51 +153,6 @@ class RemoteUserFetch extends AbstractFetchRemote { } } - /** - * @param {?Function} fCallback - * @param {Array} aFolders - */ - folderInformationMultiply(fCallback, aFolders) { - this.defaultRequest(fCallback, 'FolderInformationMultiply', { - Folders: aFolders - }); - } - - /** - * @param {?Function} fCallback - */ - logout(fCallback) { - this.defaultRequest(fCallback, 'Logout'); - } - - /** - * @param {?Function} fCallback - * @param {string} sFolderFullName - * @param {Array} aUids - * @param {boolean} bSetFlagged - */ - messageSetFlagged(fCallback, sFolderFullName, aUids, bSetFlagged) { - this.defaultRequest(fCallback, 'MessageSetFlagged', { - Folder: sFolderFullName, - Uids: aUids.join(','), - SetAction: bSetFlagged ? 1 : 0 - }); - } - - /** - * @param {?Function} fCallback - * @param {string} sFolderFullName - * @param {Array} aUids - * @param {boolean} bSetSeen - */ - messageSetSeen(fCallback, sFolderFullName, aUids, bSetSeen) { - this.defaultRequest(fCallback, 'MessageSetSeen', { - Folder: sFolderFullName, - Uids: aUids.join(','), - SetAction: bSetSeen ? 1 : 0 - }); - } - /** * @param {?Function} fCallback * @param {string} sFolderFullName @@ -383,61 +160,19 @@ class RemoteUserFetch extends AbstractFetchRemote { * @param {Array} aThreadUids = null */ messageSetSeenToAll(fCallback, sFolderFullName, bSetSeen, aThreadUids = null) { - this.defaultRequest(fCallback, 'MessageSetSeenToAll', { + this.request('MessageSetSeenToAll', fCallback, { Folder: sFolderFullName, SetAction: bSetSeen ? 1 : 0, ThreadUids: aThreadUids ? aThreadUids.join(',') : '' }); } - /** - * @param {?Function} fCallback - * @param {Object} oData - */ - saveMessage(fCallback, oData) { - this.defaultRequest(fCallback, 'SaveMessage', oData, 200000); - } - - /** - * @param {?Function} fCallback - * @param {string} sMessageFolder - * @param {number} iMessageUid - * @param {string} sReadReceipt - * @param {string} sSubject - * @param {string} sText - */ - sendReadReceiptMessage(fCallback, sMessageFolder, iMessageUid, sReadReceipt, sSubject, sText) { - this.defaultRequest(fCallback, 'SendReadReceiptMessage', { - MessageFolder: sMessageFolder, - MessageUid: iMessageUid, - ReadReceipt: sReadReceipt, - Subject: sSubject, - Text: sText - }); - } - - /** - * @param {?Function} fCallback - * @param {Object} oData - */ - sendMessage(fCallback, oData) { - this.defaultRequest(fCallback, 'SendMessage', oData, 30000); - } - - /** - * @param {?Function} fCallback - * @param {Object} oData - */ - saveSystemFolders(fCallback, oData) { - this.defaultRequest(fCallback, 'SystemFoldersUpdate', oData); - } - /** * @param {?Function} fCallback * @param {Object} oData */ saveSettings(fCallback, oData) { - this.defaultRequest(fCallback, 'SettingsUpdate', oData); + this.request('SettingsUpdate', fCallback, oData); } /** @@ -451,179 +186,27 @@ class RemoteUserFetch extends AbstractFetchRemote { }); } - /** - * @param {?Function} fCallback - * @param {string} sFolderFullName - */ - folderClear(fCallback, sFolderFullName) { - this.defaultRequest(fCallback, 'FolderClear', { - Folder: sFolderFullName - }); - } - - /** - * @param {?Function} fCallback - * @param {string} sFolderFullName - * @param {boolean} bSubscribe - */ - folderSetSubscribe(fCallback, sFolderFullName, bSubscribe) { - this.defaultRequest(fCallback, 'FolderSubscribe', { - Folder: sFolderFullName, - Subscribe: bSubscribe ? 1 : 0 - }); - } - /** * @param {?Function} fCallback * @param {string} sFolderFullName * @param {boolean} bSubscribe */ folderSetMetadata(fCallback, sFolderFullName, sKey, sValue) { - this.defaultRequest(fCallback, 'FolderSetMetadata', { + this.request('FolderSetMetadata', fCallback, { Folder: sFolderFullName, Key: sKey, Value: sValue }); } - /** - * @param {?Function} fCallback - * @param {string} sFolderFullName - * @param {boolean} bCheckable - */ - folderSetCheckable(fCallback, sFolderFullName, bCheckable) { - this.defaultRequest(fCallback, 'FolderCheckable', { - Folder: sFolderFullName, - Checkable: bCheckable ? 1 : 0 - }); - } - - /** - * @param {?Function} fCallback - * @param {string} sFolder - * @param {string} sToFolder - * @param {Array} aUids - * @param {string=} sLearning - * @param {boolean=} bMarkAsRead - */ - messagesMove(fCallback, sFolder, sToFolder, aUids, sLearning, bMarkAsRead) { - this.defaultRequest( - fCallback, - 'MessageMove', - { - FromFolder: sFolder, - ToFolder: sToFolder, - Uids: aUids.join(','), - MarkAsRead: bMarkAsRead ? 1 : 0, - Learning: sLearning || '' - }, - null, - '', - ['MessageList'] - ); - } - - /** - * @param {?Function} fCallback - * @param {string} sFolder - * @param {string} sToFolder - * @param {Array} aUids - */ - messagesCopy(fCallback, sFolder, sToFolder, aUids) { - this.defaultRequest(fCallback, 'MessageCopy', { - FromFolder: sFolder, - ToFolder: sToFolder, - Uids: aUids.join(',') - }); - } - - /** - * @param {?Function} fCallback - * @param {string} sFolder - * @param {Array} aUids - */ - messagesDelete(fCallback, sFolder, aUids) { - this.defaultRequest( - fCallback, - 'MessageDelete', - { - Folder: sFolder, - Uids: aUids.join(',') - }, - null, - '', - ['MessageList'] - ); - } - - /** - * @param {?Function} fCallback - */ - appDelayStart(fCallback) { - this.defaultRequest(fCallback, 'AppDelayStart'); - } - - /** - * @param {?Function} fCallback - */ - quota(fCallback) { - this.defaultRequest(fCallback, 'Quota'); - } - - /** - * @param {?Function} fCallback - * @param {number} iOffset - * @param {number} iLimit - * @param {string} sSearch - */ - contacts(fCallback, iOffset, iLimit, sSearch) { - this.defaultRequest( - fCallback, - 'Contacts', - { - Offset: iOffset, - Limit: iLimit, - Search: sSearch - }, - null, - '', - ['Contacts'] - ); - } - - /** - * @param {?Function} fCallback - * @param {string} sRequestUid - * @param {string} sUid - * @param {Array} aProperties - */ - contactSave(fCallback, sRequestUid, sUid, aProperties) { - this.defaultRequest(fCallback, 'ContactSave', { - RequestUid: sRequestUid, - Uid: sUid, - Properties: aProperties - }); - } - - /** - * @param {?Function} fCallback - * @param {Array} aUids - */ - contactsDelete(fCallback, aUids) { - this.defaultRequest(fCallback, 'ContactsDelete', { - Uids: aUids.join(',') - }); - } - /** * @param {?Function} fCallback * @param {string} sQuery * @param {number} iPage */ suggestions(fCallback, sQuery, iPage) { - this.defaultRequest( + this.request('Suggestions', fCallback, - 'Suggestions', { Query: sQuery, Page: iPage @@ -634,19 +217,12 @@ class RemoteUserFetch extends AbstractFetchRemote { ); } - /** - * @param {?Function} fCallback - */ - clearUserBackground(fCallback) { - this.defaultRequest(fCallback, 'ClearUserBackground'); - } - /** * @param {?Function} fCallback */ foldersReload(fCallback) { this.abort('Folders') - .postRequest('Folders', FolderUserStore.foldersLoading) + .post('Folders', FolderUserStore.foldersLoading) .then(data => { data = FolderCollectionModel.reviveFromJson(data.Result); data && data.storeIt(); @@ -662,35 +238,16 @@ class RemoteUserFetch extends AbstractFetchRemote { this.foldersTimeout = setTimeout(() => this.foldersReload(), 500); } - folderDelete(sFolderFullName) { - return this.postRequest('FolderDelete', FolderUserStore.foldersDeleting, { - Folder: sFolderFullName - }); - } - - folderCreate(sNewFolderName, sParentName) { - return this.postRequest('FolderCreate', FolderUserStore.foldersCreating, { - Folder: sNewFolderName, - Parent: sParentName - }); - } - +/* folderMove(sPrevFolderFullName, sNewFolderFullName) { - return this.postRequest('FolderMove', FolderUserStore.foldersRenaming, { + return this.post('FolderMove', FolderUserStore.foldersRenaming, { Folder: sPrevFolderFullName, NewFolder: sNewFolderFullName }); } - - folderRename(sPrevFolderFullName, sNewFolderName) { - return this.postRequest('FolderRename', FolderUserStore.foldersRenaming, { - Folder: sPrevFolderFullName, - NewFolderName: sNewFolderName - }); - } - +*/ attachmentsActions(sAction, aHashes, fTrigger) { - return this.postRequest('AttachmentsActions', fTrigger, { + return this.post('AttachmentsActions', fTrigger, { Do: sAction, Hashes: aHashes }); diff --git a/dev/Settings/Admin/About.js b/dev/Settings/Admin/About.js index 24ba256cf..130a4130b 100644 --- a/dev/Settings/Admin/About.js +++ b/dev/Settings/Admin/About.js @@ -9,7 +9,7 @@ export class AboutAdminSettings /*extends AbstractViewSettings*/ { } onBuild() { - Remote.defaultRequest((iError, data) => iError || this.phpextensions(data.Result), 'AdminPHPExtensions'); + Remote.request('AdminPHPExtensions', (iError, data) => iError || this.phpextensions(data.Result)); } } diff --git a/dev/Settings/Admin/Security.js b/dev/Settings/Admin/Security.js index 24e5d1cb0..fe8d24963 100644 --- a/dev/Settings/Admin/Security.js +++ b/dev/Settings/Admin/Security.js @@ -92,7 +92,7 @@ export class SecurityAdminSettings /*extends AbstractViewSettings*/ { this.adminPasswordUpdateError(false); this.adminPasswordUpdateSuccess(false); - Remote.defaultRequest((iError, data) => { + Remote.request('AdminPasswordUpdate', (iError, data) => { if (iError) { this.adminPasswordUpdateError(true); } else { @@ -104,7 +104,7 @@ export class SecurityAdminSettings /*extends AbstractViewSettings*/ { this.weakPassword(!!data.Result.Weak); } - }, 'AdminPasswordUpdate', { + }, { 'Login': this.adminLogin(), 'Password': this.adminPassword(), 'NewPassword': this.adminPasswordNew(), diff --git a/dev/Settings/User/Accounts.js b/dev/Settings/User/Accounts.js index a40cc3d74..3863b7ba0 100644 --- a/dev/Settings/User/Accounts.js +++ b/dev/Settings/User/Accounts.js @@ -54,14 +54,16 @@ export class AccountsUserSettings /*extends AbstractViewSettings*/ { if (accountToRemove) { this.accounts.remove((account) => accountToRemove === account); - Remote.accountDelete((iError, data) => { + Remote.request('AccountDelete', (iError, data) => { if (!iError && data.Reload) { rl.route.root(); setTimeout(() => location.reload(), 1); } else { rl.app.accountsAndIdentities(); } - }, accountToRemove.email); + }, { + EmailToDelete: accountToRemove.email + }); } } } @@ -76,16 +78,18 @@ export class AccountsUserSettings /*extends AbstractViewSettings*/ { if (identityToRemove) { IdentityUserStore.remove(oIdentity => identityToRemove === oIdentity); - Remote.identityDelete(() => rl.app.accountsAndIdentities(), identityToRemove.id()); + Remote.request('IdentityDelete', () => rl.app.accountsAndIdentities(), { + IdToDelete: identityToRemove.id() + }); } } } accountsAndIdentitiesAfterMove() { - Remote.accountsAndIdentitiesSortOrder(null, - AccountUserStore.getEmailAddresses().filter(v => v != SettingsGet('MainEmail')), - IdentityUserStore.getIDS() - ); + Remote.request('AccountsAndIdentitiesSortOrder', null, { + Accounts: AccountUserStore.getEmailAddresses().filter(v => v != SettingsGet('MainEmail')), + Identities: IdentityUserStore.getIDS() + }); } onBuild(oDom) { diff --git a/dev/Settings/User/Contacts.js b/dev/Settings/User/Contacts.js index df5549a07..3ef055716 100644 --- a/dev/Settings/User/Contacts.js +++ b/dev/Settings/User/Contacts.js @@ -32,13 +32,12 @@ export class ContactsUserSettings /*extends AbstractViewSettings*/ { ); this.saveTrigger.subscribe(() => - Remote.saveContactsSyncData( - null, - ContactUserStore.enableSync(), - ContactUserStore.syncUrl(), - ContactUserStore.syncUser(), - ContactUserStore.syncPass() - ) + Remote.request('SaveContactsSyncData', null, { + Enable: ContactUserStore.enableSync() ? 1 : 0, + Url: ContactUserStore.syncUrl(), + User: ContactUserStore.syncUser(), + Password: ContactUserStore.syncPass() + }) ); } } diff --git a/dev/Settings/User/Filters.js b/dev/Settings/User/Filters.js index c1cb4bb06..1cab1d387 100644 --- a/dev/Settings/User/Filters.js +++ b/dev/Settings/User/Filters.js @@ -36,7 +36,7 @@ export class FiltersUserSettings /*extends AbstractViewSettings*/ { this.loading(true); this.serverError(false); - Remote.filtersGet((iError, data) => { + Remote.request('Filters', (iError, data) => { this.loading(false); this.scripts([]); @@ -69,7 +69,7 @@ export class FiltersUserSettings /*extends AbstractViewSettings*/ { deleteScript(script) { this.serverError(false); - Remote.filtersScriptDelete( + Remote.request('FiltersScriptDelete', (iError, data) => { if (iError) { this.setError((data && data.ErrorMessageAdditional) || getNotification(iError)); @@ -78,14 +78,14 @@ export class FiltersUserSettings /*extends AbstractViewSettings*/ { delegateRunOnDestroy(script); } }, - script.name() + {name:script.name()} ); } toggleScript(script) { let name = script.active() ? '' : script.name(); this.serverError(false); - Remote.filtersScriptActivate( + Remote.request('FiltersScriptActivate', (iError, data) => { if (iError) { this.setError((data && data.ErrorMessageAdditional) || iError) @@ -93,7 +93,7 @@ export class FiltersUserSettings /*extends AbstractViewSettings*/ { this.scripts.forEach(script => script.active(script.name() === name)); } }, - name + {name:name} ); } diff --git a/dev/Settings/User/Folders.js b/dev/Settings/User/Folders.js index 70a94b09d..acdedec2d 100644 --- a/dev/Settings/User/Folders.js +++ b/dev/Settings/User/Folders.js @@ -73,7 +73,10 @@ export class FoldersUserSettings /*extends AbstractViewSettings*/ { Local.set(ClientSideKeyName.FoldersLashHash, ''); rl.app.foldersPromisesActionHelper( - Remote.folderRename(folder.fullName, nameToEdit), + Remote.post('FolderRename', FolderUserStore.foldersRenaming, { + Folder: folder.fullName, + NewFolderName: nameToEdit + }), Notification.CantRenameFolder ); @@ -119,9 +122,9 @@ export class FoldersUserSettings /*extends AbstractViewSettings*/ { Local.set(ClientSideKeyName.FoldersLashHash, ''); // rl.app.foldersPromisesActionHelper - Remote.abort('Folders') - .folderDelete(folderToRemove.fullName) - .then( + Remote.abort('Folders').post('FolderDelete', FolderUserStore.foldersDeleting, { + Folder: folderToRemove.fullName + }).then( () => { folderToRemove.selectable(false) removeFolderFromCacheList(folderToRemove.fullName); @@ -150,13 +153,19 @@ export class FoldersUserSettings /*extends AbstractViewSettings*/ { toggleFolderSubscription(folder) { let subscribe = !folder.subscribed(); Local.set(ClientSideKeyName.FoldersLashHash, ''); - Remote.folderSetSubscribe(null, folder.fullName, subscribe); + Remote.request('FolderSubscribe', null, { + Folder: folder.fullName, + Subscribe: subscribe ? 1 : 0 + }); folder.subscribed(subscribe); } toggleFolderCheckable(folder) { let checkable = !folder.checkable(); - Remote.folderSetCheckable(null, folder.fullName, checkable); + Remote.request('FolderCheckable', null, { + Folder: folder.fullName, + Checkable: checkable ? 1 : 0 + }); folder.checkable(checkable); } } diff --git a/dev/Settings/User/Themes.js b/dev/Settings/User/Themes.js index 70446e623..3a3f1786c 100644 --- a/dev/Settings/User/Themes.js +++ b/dev/Settings/User/Themes.js @@ -108,7 +108,7 @@ export class ThemesUserSettings /*extends AbstractViewSettings*/ { clearBackground() { if (this.capaUserBackground()) { - Remote.clearUserBackground(() => { + Remote.request('ClearUserBackground', () => { this.background.name(''); this.background.hash(''); }); diff --git a/dev/Stores/User/Contact.js b/dev/Stores/User/Contact.js index caecf4dd1..f22e0ee89 100644 --- a/dev/Stores/User/Contact.js +++ b/dev/Stores/User/Contact.js @@ -27,10 +27,10 @@ ContactUserStore.sync = fResultFunc => { && !ContactUserStore.syncing() ) { ContactUserStore.syncing(true); - Remote.contactsSync((iError, oData) => { + Remote.request('ContactsSync', (iError, oData) => { ContactUserStore.syncing(false); fResultFunc && fResultFunc(iError, oData); - }); + }, null, 200000); } }; diff --git a/dev/Stores/User/Folder.js b/dev/Stores/User/Folder.js index 076d15a86..0b1a819e3 100644 --- a/dev/Stores/User/Folder.js +++ b/dev/Stores/User/Folder.js @@ -167,6 +167,6 @@ export const FolderUserStore = new class { Archive: FolderUserStore.archiveFolder() }; forEachObjectEntry(folders, (k,v)=>Settings.set(k+'Folder',v)); - rl.app.Remote.saveSystemFolders(null, folders); + rl.app.Remote.request('SystemFoldersUpdate', null, folders); } }; diff --git a/dev/View/Popup/Account.js b/dev/View/Popup/Account.js index 13b2d9789..438680d24 100644 --- a/dev/View/Popup/Account.js +++ b/dev/View/Popup/Account.js @@ -43,8 +43,7 @@ class AccountPopupView extends AbstractViewPopup { this.submitRequest(true); - Remote.accountSetup( - (iError, data) => { + Remote.request('AccountSetup', (iError, data) => { this.submitRequest(false); if (iError) { this.submitError(getNotification(iError)); @@ -53,10 +52,11 @@ class AccountPopupView extends AbstractViewPopup { rl.app.accountsAndIdentities(); this.cancelCommand(); } - }, - this.email(), - this.password(), - this.isNew() + }, { + Email: this.email(), + Password: this.password(), + New: this.isNew() ? 1 : 0 + } ); return true; diff --git a/dev/View/Popup/Compose.js b/dev/View/Popup/Compose.js index ebd04ee95..6cd846098 100644 --- a/dev/View/Popup/Compose.js +++ b/dev/View/Popup/Compose.js @@ -415,7 +415,7 @@ class ComposePopupView extends AbstractViewPopup { setFolderHash(this.draftsFolder(), ''); setFolderHash(sSentFolder, ''); - Remote.sendMessage( + Remote.request('SendMessage', (iError, data) => { this.sending(false); if (this.modalVisibility()) { @@ -434,7 +434,8 @@ class ComposePopupView extends AbstractViewPopup { } this.reloadDraftFolder(); }, - this.getMessageRequestParams(sSentFolder) + this.getMessageRequestParams(sSentFolder), + 30000 ); } } @@ -451,7 +452,7 @@ class ComposePopupView extends AbstractViewPopup { setFolderHash(FolderUserStore.draftsFolder(), ''); - Remote.saveMessage( + Remote.request('SaveMessage', (iError, oData) => { let result = false; @@ -486,7 +487,8 @@ class ComposePopupView extends AbstractViewPopup { this.reloadDraftFolder(); }, - this.getMessageRequestParams(FolderUserStore.draftsFolder()) + this.getMessageRequestParams(FolderUserStore.draftsFolder()), + 200000 ); } @@ -1016,30 +1018,36 @@ class ComposePopupView extends AbstractViewPopup { const downloads = this.getAttachmentsDownloadsForUpload(); if (arrayLength(downloads)) { - Remote.messageUploadAttachments((iError, oData) => { - if (!iError) { - forEachObjectEntry(oData.Result, (tempName, id) => { - const attachment = this.getAttachmentById(id); - if (attachment) { - attachment.tempName(tempName); - attachment - .waiting(false) - .uploading(false) - .complete(true); - } - }); - } else { - this.attachments.forEach(attachment => { - if (attachment && attachment.fromMessage) { - attachment - .waiting(false) - .uploading(false) - .complete(true) - .error(getUploadErrorDescByCode(UploadErrorCode.NoFileUploaded)); - } - }); - } - }, downloads); + Remote.request('MessageUploadAttachments', + (iError, oData) => { + if (!iError) { + forEachObjectEntry(oData.Result, (tempName, id) => { + const attachment = this.getAttachmentById(id); + if (attachment) { + attachment.tempName(tempName); + attachment + .waiting(false) + .uploading(false) + .complete(true); + } + }); + } else { + this.attachments.forEach(attachment => { + if (attachment && attachment.fromMessage) { + attachment + .waiting(false) + .uploading(false) + .complete(true) + .error(getUploadErrorDescByCode(UploadErrorCode.NoFileUploaded)); + } + }); + } + }, + { + Attachments: downloads + }, + 999000 + ); } if (identity) { diff --git a/dev/View/Popup/Contacts.js b/dev/View/Popup/Contacts.js index 07e1920ec..b2f5807ec 100644 --- a/dev/View/Popup/Contacts.js +++ b/dev/View/Popup/Contacts.js @@ -217,7 +217,7 @@ class ContactsPopupView extends AbstractViewPopup { const requestUid = Jua.randomId(); - Remote.contactSave( + Remote.request('ContactSave', (iError, oData) => { let res = false; this.viewSaving(false); @@ -243,10 +243,11 @@ class ContactsPopupView extends AbstractViewPopup { this.watchDirty(false); setTimeout(() => this.viewSaveTrigger(SaveSettingsStep.Idle), 1000); } - }, - requestUid, - this.viewID(), - this.viewProperties.map(oItem => oItem.toJSON()) + }, { + RequestUid: requestUid, + Uid: this.viewID(), + Properties: this.viewProperties.map(oItem => oItem.toJSON()) + } ); } @@ -355,14 +356,17 @@ class ContactsPopupView extends AbstractViewPopup { deleteSelectedContacts() { if (this.contactsCheckedOrSelected().length) { - Remote.contactsDelete((iError, oData) => { - if (500 < (!iError && oData && oData.Time ? pInt(oData.Time) : 0)) { - this.reloadContactList(this.bDropPageAfterDelete); - } else { - setTimeout(() => this.reloadContactList(this.bDropPageAfterDelete), 500); + Remote.request('ContactsDelete', + (iError, oData) => { + if (500 < (!iError && oData && oData.Time ? pInt(oData.Time) : 0)) { + this.reloadContactList(this.bDropPageAfterDelete); + } else { + setTimeout(() => this.reloadContactList(this.bDropPageAfterDelete), 500); + } + }, { + Uids: this.contactsCheckedOrSelectedUids().join(',') } - }, this.contactsCheckedOrSelectedUids()); - + ); this.removeCheckedOrSelectedContactsFromList(); } } @@ -415,7 +419,7 @@ class ContactsPopupView extends AbstractViewPopup { } ContactUserStore.loading(true); - Remote.contacts( + Remote.request('Contacts', (iError, data) => { let count = 0, list = []; @@ -438,9 +442,14 @@ class ContactsPopupView extends AbstractViewPopup { ContactUserStore.loading(false); this.viewClearSearch(!!this.search()); }, - offset, - CONTACTS_PER_PAGE, - this.search() + { + Offset: offset, + Limit: CONTACTS_PER_PAGE, + Search: this.search() + }, + null, + '', + ['Contacts'] ); } diff --git a/dev/View/Popup/FolderClear.js b/dev/View/Popup/FolderClear.js index 78a291659..b4ab4c84f 100644 --- a/dev/View/Popup/FolderClear.js +++ b/dev/View/Popup/FolderClear.js @@ -54,7 +54,7 @@ class FolderClearPopupView extends AbstractViewPopup { setFolderHash(folderToClear.fullName, ''); - Remote.folderClear(iError => { + Remote.request('FolderClear', iError => { this.clearingProcess(false); if (iError) { this.clearingError(getNotification(iError)); @@ -62,7 +62,9 @@ class FolderClearPopupView extends AbstractViewPopup { rl.app.reloadMessageList(true); this.cancelCommand(); } - }, folderToClear.fullName); + }, { + Folder: folderToClear.fullName + }); } } diff --git a/dev/View/Popup/FolderCreate.js b/dev/View/Popup/FolderCreate.js index ba4505182..3cc8ce24e 100644 --- a/dev/View/Popup/FolderCreate.js +++ b/dev/View/Popup/FolderCreate.js @@ -50,7 +50,10 @@ class FolderCreatePopupView extends AbstractViewPopup { } rl.app.foldersPromisesActionHelper( - Remote.folderCreate(this.folderName(), parentFolderName), + Remote.post('FolderCreate', FolderUserStore.foldersCreating, { + Folder: this.folderName(), + Parent: parentFolderName + }), Notification.CantCreateFolder ); diff --git a/dev/View/Popup/Identity.js b/dev/View/Popup/Identity.js index 65f18e5a6..dd27e7dc2 100644 --- a/dev/View/Popup/Identity.js +++ b/dev/View/Popup/Identity.js @@ -94,8 +94,7 @@ class IdentityPopupView extends AbstractViewPopup { this.submitRequest(true); - Remote.identityUpdate( - iError => { + Remote.request('IdentityUpdate', iError => { this.submitRequest(false); if (iError) { this.submitError(getNotification(iError)); @@ -103,14 +102,15 @@ class IdentityPopupView extends AbstractViewPopup { rl.app.accountsAndIdentities(); this.cancelCommand(); } - }, - this.id, - this.email(), - this.name(), - this.replyTo(), - this.bcc(), - this.signature(), - this.signatureInsertBefore() + }, { + Id: this.id, + Email: this.email(), + Name: this.name(), + ReplyTo: this.replyTo(), + Bcc: this.bcc(), + Signature: this.signature(), + SignatureInsertBefore: this.signatureInsertBefore() ? 1 : 0 + } ); return true; diff --git a/dev/View/Popup/SieveScript.js b/dev/View/Popup/SieveScript.js index 9e40da570..bc27f138e 100644 --- a/dev/View/Popup/SieveScript.js +++ b/dev/View/Popup/SieveScript.js @@ -57,7 +57,7 @@ class SieveScriptPopupView extends AbstractViewPopup { script.body(script.filtersToRaw()); } - Remote.filtersScriptSave( + Remote.request('FiltersScriptSave', (iError, data) => { self.saving = false; @@ -70,7 +70,7 @@ class SieveScriptPopupView extends AbstractViewPopup { script.hasChanges(false); } }, - script + script.toJson() ); } diff --git a/dev/View/User/Login.js b/dev/View/User/Login.js index 63fdc507b..830775947 100644 --- a/dev/View/User/Login.js +++ b/dev/View/User/Login.js @@ -99,7 +99,7 @@ class LoginUserView extends AbstractViewLogin { this.submitRequest(true); data.set('Language', this.bSendLanguage ? this.language() : ''); data.set('SignMe', this.signMe() ? 1 : 0); - Remote.defaultRequest( + Remote.request('Login', (iError, oData) => { if (iError) { this.submitRequest(false); @@ -114,7 +114,7 @@ class LoginUserView extends AbstractViewLogin { // rl.route.reload(); } }, - 'Login', data + data ); Local.set(ClientSideKeyName.LastSignMe, this.signMe() ? '-1-' : '-0-'); diff --git a/dev/View/User/MailBox/MessageList.js b/dev/View/User/MailBox/MessageList.js index 8742f808d..a42592789 100644 --- a/dev/View/User/MailBox/MessageList.js +++ b/dev/View/User/MailBox/MessageList.js @@ -467,55 +467,50 @@ export class MailMessageList extends AbstractViewRight { if (folder) { switch (iSetAction) { case MessageSetAction.SetSeen: - folder = getFolderFromCacheList(sFolderFullName); - if (folder) { - MessageUserStore.list.forEach(message => { - if (message.isUnseen()) { - ++cnt; - } - - message.isUnseen(false); - uids.push(message.uid); - }); - - if (iThreadUid) { - folder.messageCountUnread(folder.messageCountUnread() - cnt); - if (0 > folder.messageCountUnread()) { - folder.messageCountUnread(0); - } - } else { - folder.messageCountUnread(0); + MessageUserStore.list.forEach(message => { + if (message.isUnseen()) { + ++cnt; } - MessageFlagsCache.clearFolder(sFolderFullName); + message.isUnseen(false); + uids.push(message.uid); + }); + + if (iThreadUid) { + folder.messageCountUnread(folder.messageCountUnread() - cnt); + if (0 > folder.messageCountUnread()) { + folder.messageCountUnread(0); + } + } else { + folder.messageCountUnread(0); } + MessageFlagsCache.clearFolder(sFolderFullName); + Remote.messageSetSeenToAll(null, sFolderFullName, true, iThreadUid ? uids : null); break; + case MessageSetAction.UnsetSeen: - folder = getFolderFromCacheList(sFolderFullName); - if (folder) { - MessageUserStore.list.forEach(message => { - if (!message.isUnseen()) { - ++cnt; - } - - message.isUnseen(true); - uids.push(message.uid); - }); - - if (iThreadUid) { - folder.messageCountUnread(folder.messageCountUnread() + cnt); - if (folder.messageCountAll() < folder.messageCountUnread()) { - folder.messageCountUnread(folder.messageCountAll()); - } - } else { - folder.messageCountUnread(folder.messageCountAll()); + MessageUserStore.list.forEach(message => { + if (!message.isUnseen()) { + ++cnt; } - MessageFlagsCache.clearFolder(sFolderFullName); + message.isUnseen(true); + uids.push(message.uid); + }); + + if (iThreadUid) { + folder.messageCountUnread(folder.messageCountUnread() + cnt); + if (folder.messageCountAll() < folder.messageCountUnread()) { + folder.messageCountUnread(folder.messageCountAll()); + } + } else { + folder.messageCountUnread(folder.messageCountAll()); } + MessageFlagsCache.clearFolder(sFolderFullName); + Remote.messageSetSeenToAll(null, sFolderFullName, false, iThreadUid ? uids : null); break; // no default diff --git a/dev/View/User/MailBox/MessageView.js b/dev/View/User/MailBox/MessageView.js index af8943ad1..7f00edd27 100644 --- a/dev/View/User/MailBox/MessageView.js +++ b/dev/View/User/MailBox/MessageView.js @@ -598,14 +598,13 @@ export class MailMessageView extends AbstractViewRight { readReceipt() { let oMessage = MessageUserStore.message() if (oMessage && oMessage.readReceipt()) { - Remote.sendReadReceiptMessage( - null, - oMessage.folder, - oMessage.uid, - oMessage.readReceipt(), - i18n('READ_RECEIPT/SUBJECT', { SUBJECT: oMessage.subject() }), - i18n('READ_RECEIPT/BODY', { 'READ-RECEIPT': AccountUserStore.email() }) - ); + Remote.request('SendReadReceiptMessage', null, { + MessageFolder: oMessage.folder, + MessageUid: oMessage.uid, + ReadReceipt: oMessage.readReceipt(), + Subject: i18n('READ_RECEIPT/SUBJECT', { SUBJECT: oMessage.subject() }), + Text: i18n('READ_RECEIPT/BODY', { 'READ-RECEIPT': AccountUserStore.email() }) + }); oMessage.isReadReceipt(true); diff --git a/dev/View/User/SystemDropDown.js b/dev/View/User/SystemDropDown.js index 8e831bfe2..2e17d07b8 100644 --- a/dev/View/User/SystemDropDown.js +++ b/dev/View/User/SystemDropDown.js @@ -56,7 +56,7 @@ export class SystemDropDownUserView extends AbstractViewRight { AccountUserStore.loading(true); event.preventDefault(); event.stopPropagation(); - Remote.defaultRequest( + Remote.request('AccountSwitch', (iError/*, oData*/) => { if (iError) { AccountUserStore.loading(false); @@ -86,7 +86,7 @@ export class SystemDropDownUserView extends AbstractViewRight { // rl.route.reload(); location.reload(); } - }, 'AccountSwitch', {Email:account.email} + }, {Email:account.email} ); } return true; diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/User.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/User.php index 4dd2dbfd8..d63c6354e 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/User.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/User.php @@ -439,43 +439,6 @@ trait User return $this->DefaultResponse(__FUNCTION__, $aResult); } - public function DoComposeUploadExternals() : array - { - $oAccount = $this->getAccountFromToken(); - - $mResult = false; - $aExternals = $this->GetActionParam('Externals', array()); - if (\is_array($aExternals) && \count($aExternals)) - { - $oHttp = \MailSo\Base\Http::SingletonInstance(); - - $mResult = array(); - foreach ($aExternals as $sUrl) - { - $mResult[$sUrl] = ''; - - $sTempName = \md5($sUrl); - - $iCode = 0; - $sContentType = ''; - - $rFile = $this->FilesProvider()->GetFile($oAccount, $sTempName, 'wb+'); - if ($rFile && $oHttp->SaveUrlToFile($sUrl, $rFile, '', $sContentType, $iCode, $this->Logger(), 60, - $this->Config()->Get('labs', 'curl_proxy', ''), $this->Config()->Get('labs', 'curl_proxy_auth', ''))) - { - $mResult[$sUrl] = $sTempName; - } - - if (\is_resource($rFile)) - { - \fclose($rFile); - } - } - } - - return $this->DefaultResponse(__FUNCTION__, $mResult); - } - public function DoClearUserBackground() : array { $oAccount = $this->getAccountFromToken();