snappymail/dev/Model/ComposeAttachment.js

104 lines
2.6 KiB
JavaScript
Raw Normal View History

2016-07-07 05:03:30 +08:00
import ko from 'ko';
import { pInt, friendlySize, mimeContentType, getFileExtension } from 'Common/Utils';
2016-07-07 05:03:30 +08:00
2019-07-05 03:19:24 +08:00
import { staticIconClass, staticFileType } from 'Model/Attachment';
import { AbstractModel } from 'Knoin/AbstractModel';
2016-07-07 05:03:30 +08:00
2019-07-05 03:19:24 +08:00
class ComposeAttachmentModel extends AbstractModel {
2016-07-07 05:03:30 +08:00
/**
* @param {string} id
* @param {string} fileName
* @param {?number=} size = null
* @param {boolean=} isInline = false
* @param {boolean=} isLinked = false
* @param {string=} CID = ''
* @param {string=} contentLocation = ''
*/
2019-07-05 03:19:24 +08:00
constructor(id, fileName, size = null, isInline = false, isLinked = false, CID = '', contentLocation = '') {
2016-07-07 05:03:30 +08:00
super('ComposeAttachmentModel');
this.id = id;
this.isInline = !!isInline;
this.isLinked = !!isLinked;
this.CID = CID;
this.contentLocation = contentLocation;
this.fromMessage = false;
this.fileName = ko.observable(fileName);
this.size = ko.observable(size);
this.tempName = ko.observable('');
this.progress = ko.observable(0);
this.error = ko.observable('');
this.waiting = ko.observable(true);
this.uploading = ko.observable(false);
this.enabled = ko.observable(true);
this.complete = ko.observable(false);
this.progressText = ko.computed(() => {
const p = this.progress();
return 0 === p ? '' : '' + (98 < p ? 100 : p) + '%';
});
this.progressStyle = ko.computed(() => {
const p = this.progress();
return 0 === p ? '' : 'width:' + (98 < p ? 100 : p) + '%';
});
this.title = ko.computed(() => {
return this.error() || this.fileName();
2016-07-07 05:03:30 +08:00
});
this.friendlySize = ko.computed(() => {
const localSize = this.size();
return null === localSize ? '' : friendlySize(localSize);
});
this.mimeType = ko.computed(() => mimeContentType(this.fileName()));
this.fileExt = ko.computed(() => getFileExtension(this.fileName()));
2019-07-05 03:19:24 +08:00
this.regDisposables([
this.progressText,
this.progressStyle,
this.title,
this.friendlySize,
this.mimeType,
this.fileExt
]);
2016-07-07 05:03:30 +08:00
}
/**
* @param {AjaxJsonComposeAttachment} json
* @returns {boolean}
*/
initByUploadJson(json) {
let bResult = false;
2019-07-05 03:19:24 +08:00
if (json) {
2016-07-07 05:03:30 +08:00
this.fileName(json.Name);
this.size(undefined === json.Size ? 0 : pInt(json.Size));
this.tempName(undefined === json.TempName ? '' : json.TempName);
2016-07-07 05:03:30 +08:00
this.isInline = false;
bResult = true;
}
return bResult;
}
/**
* @returns {string}
*/
iconClass() {
return staticIconClass(staticFileType(this.fileExt(), this.mimeType()))[0];
}
/**
* @returns {string}
*/
iconText() {
return staticIconClass(staticFileType(this.fileExt(), this.mimeType()))[1];
}
}
2019-07-05 03:19:24 +08:00
export { ComposeAttachmentModel, ComposeAttachmentModel as default };