芝麻web文件管理V1.00
编辑当前文件:/home/pulsehostuk9/www/cloud.pulsehost.co.uk/modules/MailWebclient/js/models/CAttachmentModel.js
'use strict'; var _ = require('underscore'), $ = require('jquery'), ko = require('knockout'), TextUtils = require('%PathToCoreWebclientModule%/js/utils/Text.js'), Types = require('%PathToCoreWebclientModule%/js/utils/Types.js'), App = require('%PathToCoreWebclientModule%/js/App.js'), WindowOpener = require('%PathToCoreWebclientModule%/js/WindowOpener.js'), CAbstractFileModel = require('%PathToCoreWebclientModule%/js/models/CAbstractFileModel.js'), Ajax = require('modules/%ModuleName%/js/Ajax.js') ; /** * @constructor * @extends CCommonFileModel */ function CAttachmentModel(iAccountId) { this.iAccountId = iAccountId || App.currentAccountId(); this.folderName = ko.observable(''); this.messageUid = ko.observable(''); this.cid = ko.observable(''); this.contentLocation = ko.observable(''); this.inline = ko.observable(false); this.linked = ko.observable(false); this.mimePartIndex = ko.observable(''); this.messagePart = ko.observable(null); CAbstractFileModel.call(this); this.cancelButtonTooltip = TextUtils.i18n('COREWEBCLIENT/ACTION_REMOVE'); this.content = ko.observable(''); this.isMessageType = ko.computed(function () { this.mimeType(); this.mimePartIndex(); return (this.mimeType() === 'message/rfc822'); }, this); } _.extendOwn(CAttachmentModel.prototype, CAbstractFileModel.prototype); /** * Method is used in other modules * @returns {CAttachmentModel} */ CAttachmentModel.prototype.getNewInstance = function () { return new CAttachmentModel(this.iAccountId); }; CAttachmentModel.prototype.getCopy = function () { var oCopy = new CAttachmentModel(this.iAccountId); oCopy.copyProperties(this); return oCopy; }; CAttachmentModel.prototype.copyProperties = function (oSource) { this.folderName(oSource.folderName()); this.messageUid(oSource.messageUid()); this.cid(oSource.cid()); this.contentLocation(oSource.contentLocation()); this.inline(oSource.inline()); this.linked(oSource.linked()); this.mimePartIndex(oSource.mimePartIndex()); this.messagePart(oSource.messagePart()); this.content(oSource.content()); this.fileName(oSource.fileName()); this.tempName(oSource.tempName()); this.size(oSource.size()); this.hash(oSource.hash()); this.mimeType(oSource.mimeType()); this.thumbnailSrc(oSource.thumbnailSrc()); this.thumbnailLoaded(oSource.thumbnailLoaded()); this.statusText(oSource.statusText()); this.uploaded(oSource.uploaded()); const newActionsData = {}; this.oActionsData = Object.assign(newActionsData, oSource.oActionsData); this.actions([...oSource.actions()]); this.thumbUrlInQueue(oSource.thumbUrlInQueue()); this.subFilesExpanded(oSource.subFilesExpanded()); this.subFiles([...oSource.subFiles()]); App.broadcastEvent('%ModuleName%::CopyFileProperties::after', { file: this, source: oSource }); }; /** * Parses attachment data from server. * * @param {AjaxAttachmenResponse} oData */ CAttachmentModel.prototype.additionalParse = function (oData) { this.content(Types.pString(oData.Content)); this.mimePartIndex(Types.pString(oData.MimePartIndex)); if (this.isMessageType() && this.mimePartIndex() === '') { this.actions(_.without(this.actions(), 'view')); } this.cid(Types.pString(oData.CID)); this.contentLocation(Types.pString(oData.ContentLocation)); this.inline(!!oData.IsInline); this.linked(!!oData.IsLinked); App.broadcastEvent('%ModuleName%::ParseFile::after', this); }; /** * @param {string} sFolderName * @param {string} sMessageUid */ CAttachmentModel.prototype.setMessageData = function (sFolderName, sMessageUid) { this.folderName(sFolderName); this.messageUid(sMessageUid); }; /** * @param {Object} oResult * @param {Object} oRequest */ CAttachmentModel.prototype.onGetMessageResponse = function (oResult, oRequest) { var oParameters = oRequest.Parameters, oResult = oResult.Result, CMessageModel = require('modules/%ModuleName%/js/models/CMessageModel.js'), oMessage = new CMessageModel() ; if (oResult && this.oNewWindow) { oResult.TimeStampInUTC = oResult.ReceivedOrDateTimeStampInUTC; oMessage.parse(oResult, oParameters.AccountID, false, true); this.messagePart(oMessage); this.messagePart().viewMessage(this.oNewWindow); this.oNewWindow = undefined; } }; /** * Starts viewing attachment on click. */ CAttachmentModel.prototype.viewFile = function () { if (this.isMessageType()) { this.viewMessageFile(); } else { this.viewCommonFile(); } }; /** * Starts viewing attachment on click. */ CAttachmentModel.prototype.viewMessageFile = function () { var oWin = null, sLoadingText = '
' + TextUtils.i18n('COREWEBCLIENT/INFO_LOADING') + '
' ; oWin = WindowOpener.open('', this.fileName()); if (oWin) { if (this.messagePart()) { this.messagePart().viewMessage(oWin); } else { $(oWin.document.body).html(sLoadingText); this.oNewWindow = oWin; Ajax.send('GetMessage', { 'AccountID': this.iAccountId, 'Folder': this.folderName(), 'Uid': this.messageUid(), 'Rfc822MimeIndex': this.mimePartIndex() }, this.onGetMessageResponse, this); } oWin.focus(); } }; /** * @param {Object} oResponse * @param {string} sFileUid */ CAttachmentModel.prototype.fillDataAfterUploadComplete = function (oResponse, sFileUid) { this.cid(Types.pString(sFileUid)); if (oResponse && oResponse.Result && oResponse.Result.Attachment) { this.tempName(Types.pString(oResponse.Result.Attachment.TempName)); this.mimeType(Types.pString(oResponse.Result.Attachment.MimeType)); this.size(Types.pInt(oResponse.Result.Attachment.Size)); this.hash(Types.pString(oResponse.Result.Attachment.Hash)); this.parseActions(oResponse.Result.Attachment); } }; /** * Parses contact attachment data from server. * * @param {Object} oData * @param {string} sMessageFolder * @param {string} sMessageUid */ CAttachmentModel.prototype.parseFromUpload = function (oData, sMessageFolder, sMessageUid) { this.setMessageData(sMessageFolder, sMessageUid); this.fileName(Types.pString(oData.Name)); this.tempName(oData.TempName ? Types.pString(oData.TempName) : this.fileName()); this.mimeType(Types.pString(oData.MimeType)); this.size(Types.pInt(oData.Size)); this.hash(Types.pString(oData.Hash)); this.parseActions(oData); this.uploadUid(this.hash()); this.uploaded(true); this.uploadStarted(false); }; CAttachmentModel.prototype.parseActions = function (oData) { this.thumbUrlInQueue(Types.pString(oData.ThumbnailUrl) !== '' ? Types.pString(oData.ThumbnailUrl) + '/' + Math.random() : ''); this.commonParseActions(oData); if (this.isMessageType()) { if (this.folderName() !== '' && this.messageUid() !== '') { if (!this.hasAction('view')) { this.actions.unshift('view'); } this.otherTemplates.push({ name: '%ModuleName%_PrintMessageView', data: this.messagePart }); } else { this.actions(_.without(this.actions(), 'view')); } } else { // have to check source data since this.inline is not populated yet if (!oData.IsInline) { this.commonExcludeActions(); } } }; CAttachmentModel.prototype.errorFromUpload = function () { this.uploaded(true); this.uploadError(true); this.uploadStarted(false); this.statusText(TextUtils.i18n('COREWEBCLIENT/ERROR_UPLOAD_UNKNOWN')); }; module.exports = CAttachmentModel;