Code refactoring (Q -> Promise)

This commit is contained in:
RainLoop Team 2016-05-23 20:33:01 +03:00
parent 7e4479d655
commit 1323a9ce52
10 changed files with 164 additions and 139 deletions

View file

@ -409,7 +409,7 @@ class AppUser extends AbstractApp
{ {
callback(!!value); callback(!!value);
} }
}).fail(() => { }).catch(() => {
if (callback) if (callback)
{ {
_.delay(() => callback(false), 1); _.delay(() => callback(false), 1);
@ -423,7 +423,7 @@ class AppUser extends AbstractApp
.abort('Folders') .abort('Folders')
.fastResolve(true) .fastResolve(true)
.then(() => promise) .then(() => promise)
.fail((errorCode) => { .catch((errorCode) => {
FolderStore.folderList.error(Translator.getNotification(errorCode, '', errorDefCode)); FolderStore.folderList.error(Translator.getNotification(errorCode, '', errorDefCode));
}).fin(() => { }).fin(() => {
Promises.foldersReloadWithTimeout(FolderStore.foldersLoading); Promises.foldersReloadWithTimeout(FolderStore.foldersLoading);
@ -453,14 +453,18 @@ class AppUser extends AbstractApp
: (oItem.users && oItem.users[0] ? oItem.users[0].userId.userid : '') : (oItem.users && oItem.users[0] ? oItem.users[0].userId.userid : '')
; ;
if (oItem.users) { if (oItem.users)
{
_.each(oItem.users, (item) => { _.each(oItem.users, (item) => {
oEmail.clear(); if (item.userId)
oEmail.mailsoParse(item.userId.userid);
if (oEmail.validate())
{ {
aEmails.push(oEmail.email); oEmail.clear();
aUsers.push(item.userId.userid); oEmail.mailsoParse(item.userId.userid);
if (oEmail.validate())
{
aEmails.push(oEmail.email);
aUsers.push(item.userId.userid);
}
} }
}); });
} }

View file

@ -6,7 +6,7 @@
var var
$ = require('$'), $ = require('$'),
_ = require('_'), _ = require('_'),
Q = require('Q'), Promise = require('Promise'),
Consts = require('Common/Consts'), Consts = require('Common/Consts'),
Enums = require('Common/Enums'), Enums = require('Common/Enums'),
@ -58,151 +58,151 @@
AbstractAjaxPromises.prototype.ajaxRequest = function (sAction, bPost, iTimeOut, oParameters, sAdditionalGetString, fTrigger) AbstractAjaxPromises.prototype.ajaxRequest = function (sAction, bPost, iTimeOut, oParameters, sAdditionalGetString, fTrigger)
{ {
var var self = this;
oH = null, return new Promise(function(resolve, reject) {
self = this,
iStart = Utils.microtime(),
oDeferred = Q.defer()
;
iTimeOut = Utils.isNormal(iTimeOut) ? iTimeOut : Consts.DEFAULT_AJAX_TIMEOUT; var
sAdditionalGetString = Utils.isUnd(sAdditionalGetString) ? '' : Utils.pString(sAdditionalGetString); oH = null,
iStart = Utils.microtime()
;
if (bPost) iTimeOut = Utils.isNormal(iTimeOut) ? iTimeOut : Consts.DEFAULT_AJAX_TIMEOUT;
{ sAdditionalGetString = Utils.isUnd(sAdditionalGetString) ? '' : Utils.pString(sAdditionalGetString);
oParameters['XToken'] = Settings.appSettingsGet('token');
}
Plugins.runHook('ajax-default-request', [sAction, oParameters, sAdditionalGetString]); if (bPost)
this.setTrigger(fTrigger, true);
oH = $.ajax({
'type': bPost ? 'POST' : 'GET',
'url': Links.ajax(sAdditionalGetString),
'async': true,
'dataType': 'json',
'data': bPost ? (oParameters || {}) : {},
'timeout': iTimeOut,
'global': true
}).always(function (oData, sTextStatus) {
var bCached = false, oErrorData = null, sType = Enums.StorageResultType.Error;
if (oData && oData['Time'])
{ {
bCached = Utils.pInt(oData['Time']) > Utils.microtime() - iStart; oParameters['XToken'] = Settings.appSettingsGet('token');
} }
// backward capability Plugins.runHook('ajax-default-request', [sAction, oParameters, sAdditionalGetString]);
switch (true)
{
case 'success' === sTextStatus && oData && oData.Result && sAction === oData.Action:
sType = Enums.StorageResultType.Success;
break;
case 'abort' === sTextStatus && (!oData || !oData.__aborted__):
sType = Enums.StorageResultType.Abort;
break;
}
Plugins.runHook('ajax-default-response', [sAction, self.setTrigger(fTrigger, true);
Enums.StorageResultType.Success === sType ? oData : null, sType, bCached, oParameters]);
if ('success' === sTextStatus) oH = $.ajax({
{ 'type': bPost ? 'POST' : 'GET',
if (oData && oData.Result && sAction === oData.Action) 'url': Links.ajax(sAdditionalGetString),
'async': true,
'dataType': 'json',
'data': bPost ? (oParameters || {}) : {},
'timeout': iTimeOut,
'global': true
}).always(function (oData, sTextStatus) {
var bCached = false, oErrorData = null, sType = Enums.StorageResultType.Error;
if (oData && oData['Time'])
{ {
oData.__cached__ = bCached; bCached = Utils.pInt(oData['Time']) > Utils.microtime() - iStart;
oDeferred.resolve(oData);
} }
else if (oData && oData.Action)
// backward capability
switch (true)
{
case 'success' === sTextStatus && oData && oData.Result && sAction === oData.Action:
sType = Enums.StorageResultType.Success;
break;
case 'abort' === sTextStatus && (!oData || !oData.__aborted__):
sType = Enums.StorageResultType.Abort;
break;
}
Plugins.runHook('ajax-default-response', [sAction,
Enums.StorageResultType.Success === sType ? oData : null, sType, bCached, oParameters]);
if ('success' === sTextStatus)
{
if (oData && oData.Result && sAction === oData.Action)
{
oData.__cached__ = bCached;
resolve(oData);
}
else if (oData && oData.Action)
{
oErrorData = oData;
reject(oData.ErrorCode ? oData.ErrorCode : Enums.Notification.AjaxFalse);
}
else
{
oErrorData = oData;
reject(Enums.Notification.AjaxParse);
}
}
else if ('timeout' === sTextStatus)
{ {
oErrorData = oData; oErrorData = oData;
oDeferred.reject(oData.ErrorCode ? oData.ErrorCode : Enums.Notification.AjaxFalse); reject(Enums.Notification.AjaxTimeout);
}
else if ('abort' === sTextStatus)
{
if (!oData || !oData.__aborted__)
{
reject(Enums.Notification.AjaxAbort);
}
} }
else else
{ {
oErrorData = oData; oErrorData = oData;
oDeferred.reject(Enums.Notification.AjaxParse); reject(Enums.Notification.AjaxParse);
}
}
else if ('timeout' === sTextStatus)
{
oErrorData = oData;
oDeferred.reject(Enums.Notification.AjaxTimeout);
}
else if ('abort' === sTextStatus)
{
if (!oData || !oData.__aborted__)
{
oDeferred.reject(Enums.Notification.AjaxAbort);
}
}
else
{
oErrorData = oData;
oDeferred.reject(Enums.Notification.AjaxParse);
}
if (self.oRequests[sAction])
{
self.oRequests[sAction] = null;
delete self.oRequests[sAction];
}
self.setTrigger(fTrigger, false);
if (oErrorData)
{
if (-1 < Utils.inArray(oErrorData.ErrorCode, [
Enums.Notification.AuthError, Enums.Notification.AccessError,
Enums.Notification.ConnectionError, Enums.Notification.DomainNotAllowed, Enums.Notification.AccountNotAllowed,
Enums.Notification.MailServerError, Enums.Notification.UnknownNotification, Enums.Notification.UnknownError
]))
{
Globals.iAjaxErrorCount++;
} }
if (Enums.Notification.InvalidToken === oErrorData.ErrorCode) if (self.oRequests[sAction])
{ {
Globals.iTokenErrorCount++; self.oRequests[sAction] = null;
delete self.oRequests[sAction];
} }
if (Consts.TOKEN_ERROR_LIMIT < Globals.iTokenErrorCount) self.setTrigger(fTrigger, false);
if (oErrorData)
{ {
if (Globals.__APP__ && Globals.__APP__.loginAndLogoutReload) if (-1 < Utils.inArray(oErrorData.ErrorCode, [
Enums.Notification.AuthError, Enums.Notification.AccessError,
Enums.Notification.ConnectionError, Enums.Notification.DomainNotAllowed, Enums.Notification.AccountNotAllowed,
Enums.Notification.MailServerError, Enums.Notification.UnknownNotification, Enums.Notification.UnknownError
]))
{ {
Globals.__APP__.loginAndLogoutReload(false, true); Globals.iAjaxErrorCount++;
}
if (Enums.Notification.InvalidToken === oErrorData.ErrorCode)
{
Globals.iTokenErrorCount++;
}
if (Consts.TOKEN_ERROR_LIMIT < Globals.iTokenErrorCount)
{
if (Globals.__APP__ && Globals.__APP__.loginAndLogoutReload)
{
Globals.__APP__.loginAndLogoutReload(false, true);
}
}
if (oErrorData.ClearAuth || oErrorData.Logout || Consts.AJAX_ERROR_LIMIT < Globals.iAjaxErrorCount)
{
if (Globals.__APP__ && Globals.__APP__.clearClientSideToken)
{
Globals.__APP__.clearClientSideToken();
}
if (Globals.__APP__ && !oErrorData.ClearAuth && Globals.__APP__.loginAndLogoutReload)
{
Globals.__APP__.loginAndLogoutReload(false, true);
}
} }
} }
if (oErrorData.ClearAuth || oErrorData.Logout || Consts.AJAX_ERROR_LIMIT < Globals.iAjaxErrorCount) });
if (oH)
{
if (self.oRequests[sAction])
{ {
if (Globals.__APP__ && Globals.__APP__.clearClientSideToken) self.oRequests[sAction] = null;
{ delete self.oRequests[sAction];
Globals.__APP__.clearClientSideToken();
}
if (Globals.__APP__ && !oErrorData.ClearAuth && Globals.__APP__.loginAndLogoutReload)
{
Globals.__APP__.loginAndLogoutReload(false, true);
}
} }
}
self.oRequests[sAction] = oH;
}
}); });
if (oH)
{
if (this.oRequests[sAction])
{
this.oRequests[sAction] = null;
delete this.oRequests[sAction];
}
this.oRequests[sAction] = oH;
}
return oDeferred.promise;
}; };
AbstractAjaxPromises.prototype.getRequest = function (sAction, fTrigger, sAdditionalGetString, iTimeOut) AbstractAjaxPromises.prototype.getRequest = function (sAction, fTrigger, sAdditionalGetString, iTimeOut)

View file

@ -5,7 +5,7 @@
var var
_ = require('_'), _ = require('_'),
Q = require('Q'), Promise = require('Promise'),
Utils = require('Common/Utils') Utils = require('Common/Utils')
; ;
@ -26,16 +26,12 @@
AbstractBasicPromises.prototype.fastResolve = function (mData) AbstractBasicPromises.prototype.fastResolve = function (mData)
{ {
var oDeferred = Q.defer(); return Promise.resolve(mData);
oDeferred.resolve(mData);
return oDeferred.promise;
}; };
AbstractBasicPromises.prototype.fastReject = function (mData) AbstractBasicPromises.prototype.fastReject = function (mData)
{ {
var oDeferred = Q.defer(); return Promise.reject(mData);
oDeferred.reject(mData);
return oDeferred.promise;
}; };
AbstractBasicPromises.prototype.setTrigger = function (mTrigger, bValue) AbstractBasicPromises.prototype.setTrigger = function (mTrigger, bValue)

View file

@ -9,6 +9,7 @@
kn = require('Knoin/Knoin'), kn = require('Knoin/Knoin'),
Translator = require('Common/Translator'), Translator = require('Common/Translator'),
Settings = require('Storage/Settings'),
Utils = require('Common/Utils') Utils = require('Common/Utils')
; ;
@ -237,6 +238,23 @@
return false; return false;
}; };
PgpUserStore.prototype.findKeyExternal = function (sEmail, fCallback)
{
if (this.openpgp.HKP && Settings.appSettingsGet('openpgpPublicKeyServer'))
{
var oHkp = new this.openpgp.HKP(Settings.appSettingsGet('openpgpPublicKeyServer').replace(/\/$/, ''));
oHkp.lookup({query: sEmail}).then(function(sKey) {
fCallback(sKey);
}, function() {
fCallback(null);
});
}
else
{
fCallback(null);
}
};
PgpUserStore.prototype.verifyMessage = function (oMessage, fCallback) PgpUserStore.prototype.verifyMessage = function (oMessage, fCallback)
{ {
var oValid = null, aResult = [], aPublicKeys = [], aSigningKeyIds = []; var oValid = null, aResult = [], aPublicKeys = [], aSigningKeyIds = [];
@ -245,6 +263,10 @@
aSigningKeyIds = oMessage.getSigningKeyIds(); aSigningKeyIds = oMessage.getSigningKeyIds();
if (aSigningKeyIds && 0 < aSigningKeyIds.length) if (aSigningKeyIds && 0 < aSigningKeyIds.length)
{ {
// this.findKeyExternal('support@rainloop.net', function(key) {
// console.log(key);
// });
aPublicKeys = this.findPublicKeysBySigningKeyIds(aSigningKeyIds); aPublicKeys = this.findPublicKeysBySigningKeyIds(aSigningKeyIds);
if (aPublicKeys && 0 < aPublicKeys.length) if (aPublicKeys && 0 < aPublicKeys.length)
{ {

View file

@ -1078,7 +1078,7 @@
{ {
self.downloadAsZipError(true); self.downloadAsZipError(true);
} }
}).fail(function () { }).catch(function () {
self.downloadAsZipError(true); self.downloadAsZipError(true);
}); });
} }
@ -1102,7 +1102,7 @@
{ {
self.saveToOwnCloudError(true); self.saveToOwnCloudError(true);
} }
}).fail(function () { }).catch(function () {
self.saveToOwnCloudError(true); self.saveToOwnCloudError(true);
}); });
} }
@ -1159,7 +1159,7 @@
self.saveToDropboxError(true); self.saveToDropboxError(true);
} }
} }
}).fail(function () { }).catch(function () {
self.saveToDropboxError(true); self.saveToDropboxError(true);
}); });
} }

View file

@ -193,7 +193,6 @@ cfg.paths.js = {
'vendors/knockout-sortable/knockout-sortable.min.js', 'vendors/knockout-sortable/knockout-sortable.min.js',
'vendors/ssm/ssm.min.js', 'vendors/ssm/ssm.min.js',
'vendors/jua/jua.min.js', 'vendors/jua/jua.min.js',
'vendors/Q/q.min.js',
'vendors/opentip/opentip-jquery.min.js', 'vendors/opentip/opentip-jquery.min.js',
'vendors/Autolinker/Autolinker.min.js', 'vendors/Autolinker/Autolinker.min.js',
'vendors/lightGallery/dist/js/lightgallery.min.js', 'vendors/lightGallery/dist/js/lightgallery.min.js',

View file

@ -2,7 +2,7 @@
"name": "RainLoop", "name": "RainLoop",
"title": "RainLoop Webmail", "title": "RainLoop Webmail",
"version": "1.10.1", "version": "1.10.1",
"release": "117", "release": "118",
"ownCloudPackageVersion": "4.17", "ownCloudPackageVersion": "4.17",
"description": "Simple, modern & fast web-based email client", "description": "Simple, modern & fast web-based email client",
"homepage": "http://rainloop.net", "homepage": "http://rainloop.net",

View file

@ -1478,7 +1478,8 @@ class Actions
'languages' => $this->GetLanguages(false), 'languages' => $this->GetLanguages(false),
'languagesAdmin' => $this->GetLanguages(true), 'languagesAdmin' => $this->GetLanguages(true),
'attachmentsActions' => $aAttachmentsActions, 'attachmentsActions' => $aAttachmentsActions,
'rsaPublicKey' => $sRsaPublicKey 'rsaPublicKey' => $sRsaPublicKey,
'openpgpPublicKeyServer' => $oConfig->Get('security', 'openpgp_public_key_server', '')
), $bAdmin ? array( ), $bAdmin ? array(
'adminPath' => \strtolower($oConfig->Get('security', 'admin_panel_key', 'admin')), 'adminPath' => \strtolower($oConfig->Get('security', 'admin_panel_key', 'admin')),
'allowAdminPanel' => (bool) $oConfig->Get('security', 'allow_admin_panel', true), 'allowAdminPanel' => (bool) $oConfig->Get('security', 'allow_admin_panel', true),

View file

@ -197,7 +197,10 @@ class Application extends \RainLoop\Config\AbstractConfig
'custom_server_signature' => array('RainLoop'), 'custom_server_signature' => array('RainLoop'),
'x_frame_options_header' => array(''), 'x_frame_options_header' => array(''),
'openpgp' => array(false), 'openpgp' => array(false),
'openpgp_public_key_server' => array(''),
'use_rsa_encryption' => array(false), 'use_rsa_encryption' => array(false),
'admin_login' => array('admin', 'Login and password for web admin panel'), 'admin_login' => array('admin', 'Login and password for web admin panel'),
'admin_password' => array('12345'), 'admin_password' => array('12345'),
@ -357,7 +360,7 @@ Enables caching in the system'),
'index' => array('v1', 'Additional caching key. If changed, cache is purged'), 'index' => array('v1', 'Additional caching key. If changed, cache is purged'),
'fast_cache_driver' => array('files', 'Can be: files, APC, memcache, redis'), 'fast_cache_driver' => array('files', 'Can be: files, APC, memcache, redis (beta)'),
'fast_cache_index' => array('v1', 'Additional caching key. If changed, fast cache is purged'), 'fast_cache_index' => array('v1', 'Additional caching key. If changed, fast cache is purged'),
'http' => array(true, 'Browser-level cache. If enabled, caching is maintainted without using files'), 'http' => array(true, 'Browser-level cache. If enabled, caching is maintainted without using files'),

View file

@ -73,7 +73,7 @@ module.exports = {
'ssm': 'window.ssm', 'ssm': 'window.ssm',
'key': 'window.key', 'key': 'window.key',
'_': 'window._', '_': 'window._',
'Q': 'window.Q', 'Promise': 'window.Promise',
'$': 'window.jQuery' '$': 'window.jQuery'
} }
}; };