Prevent parameter errors in sendMessage()/saveMessage() due to too many parameters.

Instead provide an object.
sendMessage param 'SentFolder' and saveMessage param 'DraftFolder' now both 'SaveFolder'
This commit is contained in:
djmaze 2020-08-17 21:32:57 +02:00
parent 6f49e9b80f
commit 7670d2073d
7 changed files with 185 additions and 306 deletions

View file

@ -54,10 +54,17 @@ class AbstractAjaxPromises extends AbstractBasicPromises {
};
params.XToken = Settings.appSettingsGet('token');
// init.body = JSON.stringify(params);
const formData = new FormData();
Object.keys(params).forEach(key => {
formData.append(key, params[key])
});
const formData = new FormData(),
buildFormData = (formData, data, parentKey) => {
if (data && typeof data === 'object' && !(data instanceof Date || data instanceof File)) {
Object.keys(data).forEach(key =>
buildFormData(formData, data[key], parentKey ? `${parentKey}[${key}]` : key)
);
} else {
formData.set(parentKey, data == null ? '' : data);
}
};
buildFormData(formData, params);
init.body = (new URLSearchParams(formData)).toString();
}

View file

@ -22,9 +22,7 @@ class UserAjaxUserPromises extends AbstractAjaxPromises {
this.setTrigger(fTrigger, true);
clearTimeout(this.foldersTimeout);
this.foldersTimeout = setTimeout(() => {
this.foldersReload(fTrigger);
}, 500);
this.foldersTimeout = setTimeout(() => this.foldersReload(fTrigger), 500);
}
folderDelete(sFolderFullNameRaw, fTrigger) {

View file

@ -155,11 +155,11 @@ class AbstractAjaxRemote {
const formData = new FormData(),
buildFormData = (formData, data, parentKey) => {
if (data && typeof data === 'object' && !(data instanceof Date || data instanceof File)) {
Object.entries(data).forEach(([key,value]) => {
buildFormData(formData, value, parentKey ? `${parentKey}[${key}]` : key);
});
Object.keys(data).forEach(key =>
buildFormData(formData, data[key], parentKey ? `${parentKey}[${key}]` : key)
);
} else {
formData.append(parentKey, data == null ? '' : data);
formData.set(parentKey, data == null ? '' : data);
}
};
buildFormData(formData, params);

View file

@ -14,8 +14,8 @@ class RemoteAdminAjax extends AbstractAjaxRemote {
*/
adminLogin(fCallback, sLogin, sPassword) {
this.defaultRequest(fCallback, 'AdminLogin', {
'Login': sLogin,
'Password': sPassword
Login: sLogin,
Password: sPassword
});
}
@ -53,7 +53,7 @@ class RemoteAdminAjax extends AbstractAjaxRemote {
*/
domainList(fCallback, bIncludeAliases = true) {
this.defaultRequest(fCallback, 'AdminDomainList', {
'IncludeAliases': bIncludeAliases ? '1' : '0'
IncludeAliases: bIncludeAliases ? 1 : 0
});
}
@ -94,9 +94,9 @@ class RemoteAdminAjax extends AbstractAjaxRemote {
fCallback,
'AdminPackageInstall',
{
'Id': oPackage.id,
'Type': oPackage.type,
'File': oPackage.file
Id: oPackage.id,
Type: oPackage.type,
File: oPackage.file
},
60000
);
@ -108,7 +108,7 @@ class RemoteAdminAjax extends AbstractAjaxRemote {
*/
packageDelete(fCallback, oPackage) {
this.defaultRequest(fCallback, 'AdminPackageDelete', {
'Id': oPackage.id
Id: oPackage.id
});
}
@ -118,7 +118,7 @@ class RemoteAdminAjax extends AbstractAjaxRemote {
*/
domain(fCallback, sName) {
this.defaultRequest(fCallback, 'AdminDomainLoad', {
'Name': sName
Name: sName
});
}
@ -128,7 +128,7 @@ class RemoteAdminAjax extends AbstractAjaxRemote {
*/
plugin(fCallback, sName) {
this.defaultRequest(fCallback, 'AdminPluginLoad', {
'Name': sName
Name: sName
});
}
@ -138,7 +138,7 @@ class RemoteAdminAjax extends AbstractAjaxRemote {
*/
domainDelete(fCallback, sName) {
this.defaultRequest(fCallback, 'AdminDomainDelete', {
'Name': sName
Name: sName
});
}
@ -150,7 +150,7 @@ class RemoteAdminAjax extends AbstractAjaxRemote {
domainDisable(fCallback, sName, bDisabled) {
return this.defaultRequest(fCallback, 'AdminDomainDisable', {
Name: sName,
Disabled: bDisabled ? '1' : '0'
Disabled: bDisabled ? 1 : 0
});
}
@ -168,7 +168,7 @@ class RemoteAdminAjax extends AbstractAjaxRemote {
*/
licensing(fCallback, bForce) {
return this.defaultRequest(fCallback, 'AdminLicensing', {
Force: bForce ? '1' : '0'
Force: bForce ? 1 : 0
});
}
@ -192,7 +192,7 @@ class RemoteAdminAjax extends AbstractAjaxRemote {
pluginDisable(fCallback, sName, bDisabled) {
return this.defaultRequest(fCallback, 'AdminPluginDisable', {
Name: sName,
Disabled: bDisabled ? '1' : '0'
Disabled: bDisabled ? 1 : 0
});
}
@ -225,28 +225,28 @@ class RemoteAdminAjax extends AbstractAjaxRemote {
sWhiteList
) {
this.defaultRequest(fCallback, 'AdminDomainSave', {
'Create': bCreate ? '1' : '0',
'Name': sName,
Create: bCreate ? 1 : 0,
Name: sName,
'IncHost': sIncHost,
'IncPort': iIncPort,
'IncSecure': sIncSecure,
'IncShortLogin': bIncShortLogin ? '1' : '0',
IncHost: sIncHost,
IncPort: iIncPort,
IncSecure: sIncSecure,
IncShortLogin: bIncShortLogin ? 1 : 0,
'UseSieve': bUseSieve ? '1' : '0',
'SieveAllowRaw': sSieveAllowRaw ? '1' : '0',
'SieveHost': sSieveHost,
'SievePort': iSievePort,
'SieveSecure': sSieveSecure,
UseSieve: bUseSieve ? 1 : 0,
SieveAllowRaw: sSieveAllowRaw ? 1 : 0,
SieveHost: sSieveHost,
SievePort: iSievePort,
SieveSecure: sSieveSecure,
'OutHost': sOutHost,
'OutPort': iOutPort,
'OutSecure': sOutSecure,
'OutShortLogin': bOutShortLogin ? '1' : '0',
'OutAuth': bOutAuth ? '1' : '0',
'OutUsePhpMail': bOutPhpMail ? '1' : '0',
OutHost: sOutHost,
OutPort: iOutPort,
OutSecure: sOutSecure,
OutShortLogin: bOutShortLogin ? 1 : 0,
OutAuth: bOutAuth ? 1 : 0,
OutUsePhpMail: bOutPhpMail ? 1 : 0,
'WhiteList': sWhiteList
WhiteList: sWhiteList
});
}
@ -267,19 +267,19 @@ class RemoteAdminAjax extends AbstractAjaxRemote {
bOutPhpMail
) {
this.defaultRequest(fCallback, 'AdminDomainTest', {
'Name': sName,
'IncHost': sIncHost,
'IncPort': iIncPort,
'IncSecure': sIncSecure,
'UseSieve': bUseSieve ? '1' : '0',
'SieveHost': sSieveHost,
'SievePort': iSievePort,
'SieveSecure': sSieveSecure,
'OutHost': sOutHost,
'OutPort': iOutPort,
'OutSecure': sOutSecure,
'OutAuth': bOutAuth ? '1' : '0',
'OutUsePhpMail': bOutPhpMail ? '1' : '0'
Name: sName,
IncHost: sIncHost,
IncPort: iIncPort,
IncSecure: sIncSecure,
UseSieve: bUseSieve ? 1 : 0,
SieveHost: sSieveHost,
SievePort: iSievePort,
SieveSecure: sSieveSecure,
OutHost: sOutHost,
OutPort: iOutPort,
OutSecure: sOutSecure,
OutAuth: bOutAuth ? 1 : 0,
OutUsePhpMail: bOutPhpMail ? 1 : 0
});
}

View file

@ -41,11 +41,11 @@ class RemoteUserAjax extends AbstractAjaxRemote {
fCallback,
'Folders',
{
'SentFolder': Settings.settingsGet('SentFolder'),
'DraftFolder': Settings.settingsGet('DraftFolder'),
'SpamFolder': Settings.settingsGet('SpamFolder'),
'TrashFolder': Settings.settingsGet('TrashFolder'),
'ArchiveFolder': Settings.settingsGet('ArchiveFolder')
SentFolder: Settings.settingsGet('SentFolder'),
DraftFolder: Settings.settingsGet('DraftFolder'),
SpamFolder: Settings.settingsGet('SpamFolder'),
TrashFolder: Settings.settingsGet('TrashFolder'),
ArchiveFolder: Settings.settingsGet('ArchiveFolder')
},
null,
'',
@ -65,13 +65,13 @@ class RemoteUserAjax extends AbstractAjaxRemote {
*/
login(fCallback, sEmail, sLogin, sPassword, bSignMe, sLanguage, sAdditionalCode, bAdditionalCodeSignMe) {
this.defaultRequest(fCallback, 'Login', {
'Email': sEmail,
'Login': sLogin,
'Password': sPassword,
'Language': sLanguage || '',
'AdditionalCode': sAdditionalCode || '',
'AdditionalCodeSignMe': bAdditionalCodeSignMe ? '1' : '0',
'SignMe': bSignMe ? '1' : '0'
Email: sEmail,
Login: sLogin,
Password: sPassword,
Language: sLanguage || '',
AdditionalCode: sAdditionalCode || '',
AdditionalCodeSignMe: bAdditionalCodeSignMe ? 1 : 0,
SignMe: bSignMe ? 1 : 0
});
}
@ -109,7 +109,7 @@ class RemoteUserAjax extends AbstractAjaxRemote {
*/
testTwoFactor(fCallback, sCode) {
this.defaultRequest(fCallback, 'TestTwoFactorInfo', {
'Code': sCode
Code: sCode
});
}
@ -119,7 +119,7 @@ class RemoteUserAjax extends AbstractAjaxRemote {
*/
enableTwoFactor(fCallback, bEnable) {
this.defaultRequest(fCallback, 'EnableTwoFactor', {
'Enable': bEnable ? '1' : '0'
Enable: bEnable ? 1 : 0
});
}
@ -146,10 +146,10 @@ class RemoteUserAjax extends AbstractAjaxRemote {
*/
saveContactsSyncData(fCallback, bEnable, sUrl, sUser, sPassword) {
this.defaultRequest(fCallback, 'SaveContactsSyncData', {
'Enable': bEnable ? '1' : '0',
'Url': sUrl,
'User': sUser,
'Password': sPassword
Enable: bEnable ? 1 : 0,
Url: sUrl,
User: sUser,
Password: sPassword
});
}
@ -161,9 +161,9 @@ class RemoteUserAjax extends AbstractAjaxRemote {
*/
accountSetup(fCallback, sEmail, sPassword, bNew = true) {
this.defaultRequest(fCallback, 'AccountSetup', {
'Email': sEmail,
'Password': sPassword,
'New': bNew ? '1' : '0'
Email: sEmail,
Password: sPassword,
New: bNew ? 1 : 0
});
}
@ -173,7 +173,7 @@ class RemoteUserAjax extends AbstractAjaxRemote {
*/
accountDelete(fCallback, sEmailToDelete) {
this.defaultRequest(fCallback, 'AccountDelete', {
'EmailToDelete': sEmailToDelete
EmailToDelete: sEmailToDelete
});
}
@ -184,8 +184,8 @@ class RemoteUserAjax extends AbstractAjaxRemote {
*/
accountsAndIdentitiesSortOrder(fCallback, aAccounts, aIdentities) {
this.defaultRequest(fCallback, 'AccountsAndIdentitiesSortOrder', {
'Accounts': aAccounts,
'Identities': aIdentities
Accounts: aAccounts,
Identities: aIdentities
});
}
@ -201,13 +201,13 @@ class RemoteUserAjax extends AbstractAjaxRemote {
*/
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'
Id: sId,
Email: sEmail,
Name: sName,
ReplyTo: sReplyTo,
Bcc: sBcc,
Signature: sSignature,
SignatureInsertBefore: bSignatureInsertBefore ? 1 : 0
});
}
@ -217,7 +217,7 @@ class RemoteUserAjax extends AbstractAjaxRemote {
*/
identityDelete(fCallback, sIdToDelete) {
this.defaultRequest(fCallback, 'IdentityDelete', {
'IdToDelete': sIdToDelete
IdToDelete: sIdToDelete
});
}
@ -236,9 +236,9 @@ class RemoteUserAjax extends AbstractAjaxRemote {
*/
filtersSave(fCallback, filters, raw, isRawIsActive) {
this.defaultRequest(fCallback, 'FiltersSave', {
'Raw': raw,
'RawIsActive': isRawIsActive ? '1' : '0',
'Filters': filters.map(item => item.toJson())
Raw: raw,
RawIsActive: isRawIsActive ? 1 : 0,
Filters: filters.map(item => item.toJson())
});
}
@ -262,7 +262,7 @@ class RemoteUserAjax extends AbstractAjaxRemote {
*/
templateGetById(fCallback, sID) {
this.defaultRequest(fCallback, 'TemplateGetByID', {
'ID': sID
ID: sID
});
}
@ -272,7 +272,7 @@ class RemoteUserAjax extends AbstractAjaxRemote {
*/
templateDelete(fCallback, sID) {
this.defaultRequest(fCallback, 'TemplateDelete', {
'IdToDelete': sID
IdToDelete: sID
});
}
@ -284,9 +284,9 @@ class RemoteUserAjax extends AbstractAjaxRemote {
*/
templateSetup(fCallback, sID, sName, sBody) {
this.defaultRequest(fCallback, 'TemplateSetup', {
'ID': sID,
'Name': sName,
'Body': sBody
ID: sID,
Name: sName,
Body: sBody
});
}
@ -324,7 +324,7 @@ class RemoteUserAjax extends AbstractAjaxRemote {
AppStore.projectHash(),
folderHash,
inboxUidNext,
useThreads ? '1' : '0',
useThreads ? 1 : 0,
useThreads ? sThreadUid : ''
].join(String.fromCharCode(0))
),
@ -341,7 +341,7 @@ class RemoteUserAjax extends AbstractAjaxRemote {
Limit: iLimit,
Search: sSearch,
UidNext: inboxUidNext,
UseThreads: useThreads ? '1' : '0',
UseThreads: useThreads ? 1 : 0,
ThreadUid: useThreads ? sThreadUid : ''
},
sSearch ? SEARCH_AJAX_TIMEOUT : DEFAULT_AJAX_TIMEOUT,
@ -359,7 +359,7 @@ class RemoteUserAjax extends AbstractAjaxRemote {
fCallback,
'MessageUploadAttachments',
{
'Attachments': aDownloads
Attachments: aDownloads
},
999000
);
@ -389,7 +389,7 @@ class RemoteUserAjax extends AbstractAjaxRemote {
sFolderFullNameRaw,
iUid,
AppStore.projectHash(),
AppStore.threadsAllowed() && SettingsStore.useThreads() ? '1' : '0'
AppStore.threadsAllowed() && SettingsStore.useThreads() ? 1 : 0
].join(String.fromCharCode(0))
),
['Message']
@ -410,7 +410,7 @@ class RemoteUserAjax extends AbstractAjaxRemote {
fCallback,
'ComposeUploadExternals',
{
'Externals': aExternals
Externals: aExternals
},
999000
);
@ -426,8 +426,8 @@ class RemoteUserAjax extends AbstractAjaxRemote {
fCallback,
'ComposeUploadDrive',
{
'AccessToken': sAccessToken,
'Url': sUrl
AccessToken: sAccessToken,
Url: sUrl
},
999000
);
@ -465,9 +465,9 @@ class RemoteUserAjax extends AbstractAjaxRemote {
if (request) {
this.defaultRequest(fCallback, 'FolderInformation', {
'Folder': folder,
'FlagsUids': Array.isArray(uids) ? uids.join(',') : '',
'UidNext': getFolderInboxName() === folder ? getFolderUidNext(folder) : ''
Folder: folder,
FlagsUids: Array.isArray(uids) ? uids.join(',') : '',
UidNext: getFolderInboxName() === folder ? getFolderUidNext(folder) : ''
});
} else if (SettingsStore.useThreads()) {
getApp().reloadFlagsCurrentMessageListAndMessageFromCache();
@ -480,7 +480,7 @@ class RemoteUserAjax extends AbstractAjaxRemote {
*/
folderInformationMultiply(fCallback, aFolders) {
this.defaultRequest(fCallback, 'FolderInformationMultiply', {
'Folders': aFolders
Folders: aFolders
});
}
@ -499,9 +499,9 @@ class RemoteUserAjax extends AbstractAjaxRemote {
*/
messageSetFlagged(fCallback, sFolderFullNameRaw, aUids, bSetFlagged) {
this.defaultRequest(fCallback, 'MessageSetFlagged', {
'Folder': sFolderFullNameRaw,
'Uids': aUids.join(','),
'SetAction': bSetFlagged ? '1' : '0'
Folder: sFolderFullNameRaw,
Uids: aUids.join(','),
SetAction: bSetFlagged ? 1 : 0
});
}
@ -513,9 +513,9 @@ class RemoteUserAjax extends AbstractAjaxRemote {
*/
messageSetSeen(fCallback, sFolderFullNameRaw, aUids, bSetSeen) {
this.defaultRequest(fCallback, 'MessageSetSeen', {
'Folder': sFolderFullNameRaw,
'Uids': aUids.join(','),
'SetAction': bSetSeen ? '1' : '0'
Folder: sFolderFullNameRaw,
Uids: aUids.join(','),
SetAction: bSetSeen ? 1 : 0
});
}
@ -527,73 +527,18 @@ class RemoteUserAjax extends AbstractAjaxRemote {
*/
messageSetSeenToAll(fCallback, sFolderFullNameRaw, bSetSeen, aThreadUids = null) {
this.defaultRequest(fCallback, 'MessageSetSeenToAll', {
'Folder': sFolderFullNameRaw,
'SetAction': bSetSeen ? '1' : '0',
'ThreadUids': aThreadUids ? aThreadUids.join(',') : ''
Folder: sFolderFullNameRaw,
SetAction: bSetSeen ? 1 : 0,
ThreadUids: aThreadUids ? aThreadUids.join(',') : ''
});
}
/**
* @param {?Function} fCallback
* @param {string} sIdentityID
* @param {string} sMessageFolder
* @param {string} sMessageUid
* @param {string} sDraftFolder
* @param {string} sTo
* @param {string} sCc
* @param {string} sBcc
* @param {string} sReplyTo
* @param {string} sSubject
* @param {boolean} bTextIsHtml
* @param {string} sText
* @param {Array} aAttachments
* @param {(Array|null)} aDraftInfo
* @param {string} sInReplyTo
* @param {string} sReferences
* @param {boolean} bMarkAsImportant
* @param {Object} oData
*/
saveMessage(
fCallback,
sIdentityID,
sMessageFolder,
sMessageUid,
sDraftFolder,
sTo,
sCc,
sBcc,
sReplyTo,
sSubject,
bTextIsHtml,
sText,
aAttachments,
aDraftInfo,
sInReplyTo,
sReferences,
bMarkAsImportant
) {
this.defaultRequest(
fCallback,
'SaveMessage',
{
'IdentityID': sIdentityID,
'MessageFolder': sMessageFolder,
'MessageUid': sMessageUid,
'DraftFolder': sDraftFolder,
'To': sTo,
'Cc': sCc,
'Bcc': sBcc,
'ReplyTo': sReplyTo,
'Subject': sSubject,
'TextIsHtml': bTextIsHtml ? '1' : '0',
'Text': sText,
'DraftInfo': aDraftInfo,
'InReplyTo': sInReplyTo,
'References': sReferences,
'MarkAsImportant': bMarkAsImportant ? '1' : '0',
'Attachments': aAttachments
},
SAVE_MESSAGE_AJAX_TIMEOUT
);
saveMessage(fCallback, oData) {
this.defaultRequest(fCallback, 'SaveMessage', oData, SAVE_MESSAGE_AJAX_TIMEOUT);
}
/**
@ -606,81 +551,20 @@ class RemoteUserAjax extends AbstractAjaxRemote {
*/
sendReadReceiptMessage(fCallback, sMessageFolder, sMessageUid, sReadReceipt, sSubject, sText) {
this.defaultRequest(fCallback, 'SendReadReceiptMessage', {
'MessageFolder': sMessageFolder,
'MessageUid': sMessageUid,
'ReadReceipt': sReadReceipt,
'Subject': sSubject,
'Text': sText
MessageFolder: sMessageFolder,
MessageUid: sMessageUid,
ReadReceipt: sReadReceipt,
Subject: sSubject,
Text: sText
});
}
/**
* @param {?Function} fCallback
* @param {string} sIdentityID
* @param {string} sMessageFolder
* @param {string} sMessageUid
* @param {string} sSentFolder
* @param {string} sTo
* @param {string} sCc
* @param {string} sBcc
* @param {string} sReplyTo
* @param {string} sSubject
* @param {boolean} bTextIsHtml
* @param {string} sText
* @param {Array} aAttachments
* @param {(Array|null)} aDraftInfo
* @param {string} sInReplyTo
* @param {string} sReferences
* @param {boolean} bRequestDsn
* @param {boolean} bRequestReadReceipt
* @param {boolean} bMarkAsImportant
* @param {Object} oData
*/
sendMessage(
fCallback,
sIdentityID,
sMessageFolder,
sMessageUid,
sSentFolder,
sTo,
sCc,
sBcc,
sReplyTo,
sSubject,
bTextIsHtml,
sText,
aAttachments,
aDraftInfo,
sInReplyTo,
sReferences,
bRequestDsn,
bRequestReadReceipt,
bMarkAsImportant
) {
this.defaultRequest(
fCallback,
'SendMessage',
{
'IdentityID': sIdentityID,
'MessageFolder': sMessageFolder,
'MessageUid': sMessageUid,
'SentFolder': sSentFolder,
'To': sTo,
'Cc': sCc,
'Bcc': sBcc,
'ReplyTo': sReplyTo,
'Subject': sSubject,
'TextIsHtml': bTextIsHtml ? '1' : '0',
'Text': sText,
'DraftInfo': aDraftInfo,
'InReplyTo': sInReplyTo,
'References': sReferences,
'Dsn': bRequestDsn ? '1' : '0',
'ReadReceiptRequest': bRequestReadReceipt ? '1' : '0',
'MarkAsImportant': bMarkAsImportant ? '1' : '0',
'Attachments': aAttachments
},
SEND_MESSAGE_AJAX_TIMEOUT
);
sendMessage(fCallback, oData) {
this.defaultRequest(fCallback, 'SendMessage', oData, SEND_MESSAGE_AJAX_TIMEOUT);
}
/**
@ -718,7 +602,7 @@ class RemoteUserAjax extends AbstractAjaxRemote {
*/
folderClear(fCallback, sFolderFullNameRaw) {
this.defaultRequest(fCallback, 'FolderClear', {
'Folder': sFolderFullNameRaw
Folder: sFolderFullNameRaw
});
}
@ -729,8 +613,8 @@ class RemoteUserAjax extends AbstractAjaxRemote {
*/
folderSetSubscribe(fCallback, sFolderFullNameRaw, bSubscribe) {
this.defaultRequest(fCallback, 'FolderSubscribe', {
'Folder': sFolderFullNameRaw,
'Subscribe': bSubscribe ? '1' : '0'
Folder: sFolderFullNameRaw,
Subscribe: bSubscribe ? 1 : 0
});
}
@ -741,8 +625,8 @@ class RemoteUserAjax extends AbstractAjaxRemote {
*/
folderSetCheckable(fCallback, sFolderFullNameRaw, bCheckable) {
this.defaultRequest(fCallback, 'FolderCheckable', {
'Folder': sFolderFullNameRaw,
'Checkable': bCheckable ? '1' : '0'
Folder: sFolderFullNameRaw,
Checkable: bCheckable ? 1 : 0
});
}
@ -759,11 +643,11 @@ class RemoteUserAjax extends AbstractAjaxRemote {
fCallback,
'MessageMove',
{
'FromFolder': sFolder,
'ToFolder': sToFolder,
'Uids': aUids.join(','),
'MarkAsRead': bMarkAsRead ? '1' : '0',
'Learning': sLearning || ''
FromFolder: sFolder,
ToFolder: sToFolder,
Uids: aUids.join(','),
MarkAsRead: bMarkAsRead ? 1 : 0,
Learning: sLearning || ''
},
null,
'',
@ -779,9 +663,9 @@ class RemoteUserAjax extends AbstractAjaxRemote {
*/
messagesCopy(fCallback, sFolder, sToFolder, aUids) {
this.defaultRequest(fCallback, 'MessageCopy', {
'FromFolder': sFolder,
'ToFolder': sToFolder,
'Uids': aUids.join(',')
FromFolder: sFolder,
ToFolder: sToFolder,
Uids: aUids.join(',')
});
}
@ -795,8 +679,8 @@ class RemoteUserAjax extends AbstractAjaxRemote {
fCallback,
'MessageDelete',
{
'Folder': sFolder,
'Uids': aUids.join(',')
Folder: sFolder,
Uids: aUids.join(',')
},
null,
'',
@ -829,9 +713,9 @@ class RemoteUserAjax extends AbstractAjaxRemote {
fCallback,
'Contacts',
{
'Offset': iOffset,
'Limit': iLimit,
'Search': sSearch
Offset: iOffset,
Limit: iLimit,
Search: sSearch
},
null,
'',
@ -847,9 +731,9 @@ class RemoteUserAjax extends AbstractAjaxRemote {
*/
contactSave(fCallback, sRequestUid, sUid, aProperties) {
this.defaultRequest(fCallback, 'ContactSave', {
'RequestUid': sRequestUid,
'Uid': sUid.trim(),
'Properties': aProperties
RequestUid: sRequestUid,
Uid: sUid.trim(),
Properties: aProperties
});
}
@ -859,7 +743,7 @@ class RemoteUserAjax extends AbstractAjaxRemote {
*/
contactsDelete(fCallback, aUids) {
this.defaultRequest(fCallback, 'ContactsDelete', {
'Uids': aUids.join(',')
Uids: aUids.join(',')
});
}
@ -873,8 +757,8 @@ class RemoteUserAjax extends AbstractAjaxRemote {
fCallback,
'Suggestions',
{
'Query': sQuery,
'Page': iPage
Query: sQuery,
Page: iPage
},
null,
'',

View file

@ -337,11 +337,33 @@ class ComposePopupView extends AbstractViewNext {
this.iTimer = 0;
}
getMessageRequestParams(sSaveFolder)
{
return {
IdentityID: this.currentIdentity() ? this.currentIdentity().id() : '',
MessageFolder: this.draftFolder(),
MessageUid: this.draftUid(),
SaveFolder: sSaveFolder,
To: this.to(),
Cc: this.cc(),
Bcc: this.bcc(),
ReplyTo: this.replyTo(),
Subject: this.subject(),
TextIsHtml: this.oEditor && this.oEditor.isHtml() ? 1 : 0,
Text: this.oEditor ? this.oEditor.getData(true) : '',
DraftInfo: this.aDraftInfo,
InReplyTo: this.sInReplyTo,
References: this.sReferences,
MarkAsImportant: this.markAsImportant() ? 1 : 0,
Attachments: this.prepearAttachmentsForSendOrSave(),
// Only used at send, not at save:
Dsn: this.requestDsn() ? 1 : 0,
ReadReceiptRequest: this.requestReadReceipt() ? 1 : 0
};
}
@command((self) => self.canBeSentOrSaved())
sendCommand() {
const sTo = this.to().trim(),
sCc = this.cc().trim(),
sBcc = this.bcc().trim();
let sSentFolder = FolderStore.sentFolder();
this.attachmentsInProcessError(false);
@ -356,7 +378,7 @@ class ComposePopupView extends AbstractViewNext {
this.attachmentsPlace(true);
}
if (!sTo && !sCc && !sBcc) {
if (!this.to().trim() && !this.cc().trim() && !this.bcc().trim()) {
this.emptyToError(true);
}
@ -404,24 +426,7 @@ class ComposePopupView extends AbstractViewNext {
Remote.sendMessage(
this.sendMessageResponse,
this.currentIdentity() ? this.currentIdentity().id() : '',
this.draftFolder(),
this.draftUid(),
sSentFolder,
sTo,
this.cc(),
this.bcc(),
this.replyTo(),
this.subject(),
this.oEditor ? this.oEditor.isHtml() : false,
this.oEditor ? this.oEditor.getData(true) : '',
this.prepearAttachmentsForSendOrSave(),
this.aDraftInfo,
this.sInReplyTo,
this.sReferences,
this.requestDsn(),
this.requestReadReceipt(),
this.markAsImportant()
this.getMessageRequestParams(sSentFolder)
);
}
}
@ -445,22 +450,7 @@ class ComposePopupView extends AbstractViewNext {
Remote.saveMessage(
this.saveMessageResponse,
this.currentIdentity() ? this.currentIdentity().id() : '',
this.draftFolder(),
this.draftUid(),
FolderStore.draftFolder(),
this.to(),
this.cc(),
this.bcc(),
this.replyTo(),
this.subject(),
this.oEditor ? this.oEditor.isHtml() : false,
this.oEditor ? this.oEditor.getData(true) : '',
this.prepearAttachmentsForSendOrSave(),
this.aDraftInfo,
this.sInReplyTo,
this.sReferences,
this.markAsImportant()
this.getMessageRequestParams(FolderStore.draftFolder())
);
}

View file

@ -5107,7 +5107,7 @@ NewThemeLink IncludeCss LoadingDescriptionEsc TemplatesLink LangLink IncludeBack
$sMessageFolder = $this->GetActionParam('MessageFolder', '');
$sMessageUid = $this->GetActionParam('MessageUid', '');
$sDraftFolder = $this->GetActionParam('DraftFolder', '');
$sDraftFolder = $this->GetActionParam('SaveFolder', '');
if (0 === strlen($sDraftFolder))
{
throw new Exceptions\ClientException(Notifications::UnknownError);
@ -5333,7 +5333,7 @@ NewThemeLink IncludeCss LoadingDescriptionEsc TemplatesLink LangLink IncludeBack
$sDraftFolder = $this->GetActionParam('MessageFolder', '');
$sDraftUid = $this->GetActionParam('MessageUid', '');
$sSentFolder = $this->GetActionParam('SentFolder', '');
$sSentFolder = $this->GetActionParam('SaveFolder', '');
$aDraftInfo = $this->GetActionParam('DraftInfo', null);
$bDsn = '1' === (string) $this->GetActionParam('Dsn', '0');