mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
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:
parent
6f49e9b80f
commit
7670d2073d
7 changed files with 185 additions and 306 deletions
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
'',
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue