芝麻web文件管理V1.00
编辑当前文件:/home/pulsehostuk9/public_html/cloud.pulsehost.co.uk/modules/MailWebclient/js/AccountList.js
'use strict'; var _ = require('underscore'), ko = require('knockout'), Types = require('%PathToCoreWebclientModule%/js/utils/Types.js'), App = require('%PathToCoreWebclientModule%/js/App.js'), MainTab = App.isNewTab() && window.opener ? window.opener.MainTabMailMethods : null, Routing = require('%PathToCoreWebclientModule%/js/Routing.js'), CoreAjax = require('%PathToCoreWebclientModule%/js/Ajax.js'), Ajax = require('modules/%ModuleName%/js/Ajax.js'), LinksUtils = require('modules/%ModuleName%/js/utils/Links.js'), Settings = require('modules/%ModuleName%/js/Settings.js'), CAccountModel = require('modules/%ModuleName%/js/models/CAccountModel.js'), CFetcherModel = require('modules/%ModuleName%/js/models/CFetcherModel.js'), CAliasModel = require('modules/%ModuleName%/js/models/CAliasModel.js'), CIdentityModel = require('modules/%ModuleName%/js/models/CIdentityModel.js') ; /** * @constructor */ function CAccountListModel() { this.collection = ko.observableArray([]); this.unifiedMailboxAccounts = ko.computed(function () { if (Settings.AllowUnifiedInbox) { return _.filter(this.collection(), function (oAccount) { return oAccount.includeInUnifiedMailbox(); }); } return []; }, this); this.unifiedInboxAllowed = ko.computed(function () { return this.unifiedMailboxAccounts().length > 1; }, this); this.unifiedInboxReady = ko.observable(false); } /** * @param {string} sHash */ CAccountListModel.prototype.getAccountByHash = function (sHash) { return _.find(this.collection(), function (oAcct) { return oAcct.hash() === sHash; }, this); }; /** * @param {string} sNewCurrentHash */ CAccountListModel.prototype.changeCurrentAccountByHash = function (sNewCurrentHash) { var oAccount = this.getAccountByHash(sNewCurrentHash); if (oAccount && oAccount.id() !== this.currentId()) { this.changeCurrentAccount(oAccount.id(), false); } }; /** * Changes current account. Sets hash to show new account data. * * @param {number} iNewCurrentId * @param {boolean} bPassToMail */ CAccountListModel.prototype.changeCurrentAccount = function (iNewCurrentId, bPassToMail) { var oCurrentAccount = this.getCurrent(), oNewCurrentAccount = this.getAccount(iNewCurrentId) ; if (oNewCurrentAccount && this.currentId() !== iNewCurrentId) { if (oCurrentAccount) { oCurrentAccount.isCurrent(false); } this.currentId(iNewCurrentId); oNewCurrentAccount.isCurrent(true); } else if (!oCurrentAccount) { this.currentId(0); } if (bPassToMail) { Routing.setHash(LinksUtils.getMailbox()); } }; /** * @param {string} sNewEditedHash */ CAccountListModel.prototype.changeEditedAccountByHash = function (sNewEditedHash) { var oAccount = this.getAccountByHash(sNewEditedHash); if (oAccount && oAccount.id() !== this.editedId()) { this.changeEditedAccount(oAccount.id()); } }; /** * Changes editable account. * * @param {number} iNewEditedId */ CAccountListModel.prototype.changeEditedAccount = function (iNewEditedId) { var oEditedAccount = this.getEdited(), oNewEditedAccount = this.getAccount(iNewEditedId) ; if (oNewEditedAccount && this.editedId() !== iNewEditedId) { if (oEditedAccount) { oEditedAccount.isEdited(false); } this.editedId(iNewEditedId); oNewEditedAccount.isEdited(true); } else if (!oEditedAccount) { this.editedId(0); } }; CAccountListModel.prototype.getDefaultFriendlyName = function() { var oCurrAccount = this.getCurrent(), oDefIdentity = _.find(oCurrAccount && oCurrAccount.identities() || [], function (oIdnt) { return oIdnt.isDefault(); }) || oCurrAccount ; return oDefIdentity ? oDefIdentity.friendlyName() || oDefIdentity.email() : ''; }; /** * @param {type} sHash * @returns {Object} */ CAccountListModel.prototype.getIdentityByHash = function(sHash) { var oIdentity = null; _.each(this.collection(), function (oAccount) { if (!oIdentity) { oIdentity = _.find(oAccount.identities() || [], function (oIdnt) { return oIdnt.hash() === sHash; }); } }, this); return oIdentity; }; /** * @param {type} sHash * @returns {Object} */ CAccountListModel.prototype.getFetcherByHash = function(sHash) { var oFoundFetcher = null; _.each(this.collection(), function (oAccount) { if (!oFoundFetcher) { oFoundFetcher = _.find(oAccount.fetchers(), function (oFetcher) { return oFetcher.hash() === sHash; }); } }, this); return oFoundFetcher; }; /** * @param {type} sHash * @returns {Object} */ CAccountListModel.prototype.getAliasByHash = function(sHash) { var oAlias = null; _.each(this.collection(), function (oAccount) { if (!oAlias) { oAlias = _.find(oAccount.aliases() || [], function (oAlias) { return oAlias.hash() === sHash; }); } }, this); return oAlias; }; /** * Fills the collection of accounts. * @param {Array} aAccounts */ CAccountListModel.prototype.parse = function (aAccounts) { if (_.isArray(aAccounts)) { this.collection(_.map(aAccounts, function (oRawAccount) { return new CAccountModel(oRawAccount); })); this.initObservables(this.collection().length > 0 ? this.collection()[0].id() : 0); } }; /** * @param {int} iCurrentId */ CAccountListModel.prototype.initObservables = function (iCurrentId) { var oCurrAccount = this.getAccount(iCurrentId); if (oCurrAccount) { oCurrAccount.isCurrent(true); oCurrAccount.isEdited(true); } this.currentId = ko.observable(iCurrentId); this.editedId = ko.observable(iCurrentId); }; /** * @return {boolean} */ CAccountListModel.prototype.hasAccount = function () { return this.collection().length > 0; }; /** * @param {number} iId * * @return {Object|undefined} */ CAccountListModel.prototype.getAccount = function (iId) { var oAccount = _.find(this.collection(), function (oAcct) { return oAcct.id() === iId; }, this); /** @type {Object|undefined} */ return oAccount; }; /** * @return {Object|undefined} */ CAccountListModel.prototype.getDefault = function () { var oAccount = _.find(this.collection(), function (oAcct) { return oAcct.bDefault; }, this); return oAccount; }; /** * @return {Object|undefined} */ CAccountListModel.prototype.getCurrent = function () { return this.getAccount(this.currentId()); }; /** * @return {Object|undefined} */ CAccountListModel.prototype.getEdited = function () { return this.getAccount(this.editedId()); }; /** * @param {number=} iAccountId * @return {string} */ CAccountListModel.prototype.getEmail = function (iAccountId) { iAccountId = iAccountId || this.currentId(); var sEmail = '', oAccount = this.getAccount(iAccountId) ; if (oAccount) { sEmail = oAccount.email(); } return sEmail; }; /** * @param {Object} oAccount */ CAccountListModel.prototype.addAccount = function (oAccount) { this.collection.push(oAccount); }; /** * @param {number} iId */ CAccountListModel.prototype.deleteAccount = function (iId) { this.collection.remove(function (oAcct) { return oAcct.id() === iId; }); var iFirstAccId = this.collection().length > 0 ? this.collection()[0].id() : 0; this.changeCurrentAccount(iFirstAccId, false); this.changeEditedAccount(iFirstAccId); }; /** * @param {number} iId * * @return {boolean} */ CAccountListModel.prototype.hasAccountWithId = function (iId) { var oAccount = _.find(this.collection(), function (oAcct) { return oAcct.id() === iId; }, this); return !!oAccount; }; CAccountListModel.prototype.populateFetchersIdentities = function () { this.populateFetchers(); this.populateIdentities(); this.populateAliases(); }; CAccountListModel.prototype.populateFetchers = function () { if (Settings.AllowFetchers) { CoreAjax.send(Settings.FetchersServerModuleName, 'GetFetchers', { 'AccountID': this.editedId() }, this.onGetFetchersResponse, this); } }; CAccountListModel.prototype.populateAliases = function (fAfterPopulateAliases) { if (Settings.AllowAliases) { CoreAjax.send( Settings.AliasesServerModuleName, 'GetAliases', { 'AccountID': this.editedId() }, function (oResponse, oRequest) { this.onGetAliasesResponse(oResponse, oRequest); if (_.isFunction(fAfterPopulateAliases)) { fAfterPopulateAliases(); } }, this ); } }; /** * @param {Object} oResponse * @param {Object} oRequest */ CAccountListModel.prototype.onGetFetchersResponse = function (oResponse, oRequest) { var oFetchers = {}; if (Types.isNonEmptyArray(oResponse.Result)) { _.each(oResponse.Result, function (oData) { var oFetcher = new CFetcherModel(); oFetcher.parse(oData); if (!oFetchers[oFetcher.accountId()]) { oFetchers[oFetcher.accountId()] = []; } oFetchers[oFetcher.accountId()].push(oFetcher); }); } _.each(this.collection(), function (oAccount) { var aFetchers = Types.isNonEmptyArray(oFetchers[oAccount.id()]) ? oFetchers[oAccount.id()] : []; oAccount.fetchers(aFetchers); }, this); }; /** * @param {Object} oResponse * @param {Object} oRequest */ CAccountListModel.prototype.onGetAliasesResponse = function (oResponse, oRequest) { var oAliases = {}; if (oResponse.Result && Types.isNonEmptyArray(oResponse.Result.ObjAliases)) { _.each(oResponse.Result.ObjAliases, function (oData) { var oAlias = new CAliasModel(); oAlias.parse(oData); if (!oAliases[oAlias.accountId()]) { oAliases[oAlias.accountId()] = []; } oAliases[oAlias.accountId()].push(oAlias); }); } _.each(this.collection(), function (oAccount) { var aAliases = Types.isNonEmptyArray(oAliases[oAccount.id()]) ? oAliases[oAccount.id()] : []; oAccount.aliases(aAliases); }, this); }; /** * @param {function} fAfterPopulateIdentities */ CAccountListModel.prototype.populateIdentities = function (fAfterPopulateIdentities) { if (Settings.AllowIdentities && this.collection().length >= 1) { Ajax.send('GetIdentities', null, function (oResponse, oRequest) { this.onGetIdentitiesResponse(oResponse, oRequest); if (_.isFunction(fAfterPopulateIdentities)) { fAfterPopulateIdentities(); } }, this); } }; /** * @param {Object} oResponse * @param {Object} oRequest */ CAccountListModel.prototype.onGetIdentitiesResponse = function (oResponse, oRequest) { var oIdentities = {}; if (Types.isNonEmptyArray(oResponse.Result)) { _.each(oResponse.Result, function (oIdentityData) { var oIdentity = new CIdentityModel(), iAccountId = -1 ; oIdentity.parse(oIdentityData); iAccountId = oIdentity.accountId(); if (!oIdentities[iAccountId]) { oIdentities[iAccountId] = []; } oIdentities[iAccountId].push(oIdentity); }); } _.each(this.collection(), function (oAccount) { var aIdentities = oIdentities[oAccount.id()], oIdentity = new CIdentityModel() ; if (!oAccount.bAllowUseIdentities || !Types.isNonEmptyArray(aIdentities)) { aIdentities = []; } oIdentity.parse({ AccountPart: true, Default: !_.find(aIdentities, function(oIdentity){ return oIdentity.isDefault(); }), Email: oAccount.email(), FriendlyName: oAccount.friendlyName(), IdAccount: oAccount.id(), EntityId: 0, // default identity id Signature: oAccount.signature(), UseSignature: oAccount.useSignature() }); aIdentities.unshift(oIdentity); oAccount.identities(aIdentities); }); }; /** * @param {Object} oSrcAccounts */ CAccountListModel.prototype.populateIdentitiesFromSourceAccount = function (oSrcAccounts) { if (oSrcAccounts) { _.each(this.collection(), function (oAccount) { var oSrcAccount = oSrcAccounts.getAccount(oAccount.id()); if (oSrcAccount) { oAccount.fetchers(oSrcAccount.fetchers()); oAccount.identities(oSrcAccount.identities()); oAccount.signature(oSrcAccount.signature()); oAccount.useSignature(oSrcAccount.useSignature()); } }); } }; CAccountListModel.prototype.getAccountsEmails = function () { return _.uniq(_.map(this.collection(), function (oAccount) { return oAccount.email(); })); }; CAccountListModel.prototype.getAllFullEmails = function () { var aFullEmails = []; _.each(this.collection(), function (oAccount) { if (oAccount) { if (Types.isNonEmptyArray(oAccount.identities())) { _.each(oAccount.identities(), function (oIdentity) { aFullEmails.push(oIdentity.fullEmail()); }); } else { aFullEmails.push(oAccount.fullEmail()); } _.each(oAccount.fetchers(), function (oFetcher) { if (oFetcher.isEnabled() && oFetcher.isOutgoingEnabled() && oFetcher.fullEmail() !== '') { aFullEmails.push(oFetcher.fullEmail()); } }); } }); return aFullEmails; }; CAccountListModel.prototype.getCurrentFetchersAndFiltersFolderNames = function () { var oAccount = this.getCurrent(), aFolders = [] ; if (oAccount) { if (oAccount.filters()) { _.each(oAccount.filters().collection(), function (oFilter) { aFolders.push(oFilter.folder()); }, this); } _.each(oAccount.fetchers(), function (oFetcher) { aFolders.push(oFetcher.folder()); }, this); } return aFolders; }; /** * @param {Array} aEmails * @returns {string} */ CAccountListModel.prototype.getAttendee = function (aEmails) { var aAccountsEmails = [], sAttendee = '' ; _.each(this.collection(), function (oAccount) { if (oAccount.isCurrent()) { aAccountsEmails = _.union([oAccount.email()], oAccount.getFetchersIdentitiesEmails(), aAccountsEmails); } else { aAccountsEmails = _.union(aAccountsEmails, [oAccount.email()], oAccount.getFetchersIdentitiesEmails()); } }); aAccountsEmails = _.uniq(aAccountsEmails); _.each(aAccountsEmails, _.bind(function (sAccountEmail) { if (sAttendee === '') { var sFoundEmail = _.find(aEmails, function (sEmail) { return (sEmail === sAccountEmail); }); if (sFoundEmail === sAccountEmail) { sAttendee = sAccountEmail; } } }, this)); return sAttendee; }; var AccountList = new CAccountListModel(); if (window.auroraAppData.Mail && _.isArray(window.auroraAppData.Mail.Accounts)) { AccountList.parse(window.auroraAppData.Mail.Accounts); } else { AccountList.parse([]); } if (MainTab) { AccountList.populateIdentitiesFromSourceAccount(MainTab.getAccountList()); } module.exports = AccountList;