diff --git a/core/fse.js b/core/fse.js index 690b9cf8..15388e1f 100644 --- a/core/fse.js +++ b/core/fse.js @@ -26,12 +26,19 @@ const { getAddressedToInfo } = require('./mail_util.js'); const Events = require('./events.js'); const UserProps = require('./user_property.js'); const SysProps = require('./system_property.js'); +const FileArea = require('./file_base_area.js'); +const FileEntry = require('./file_entry.js'); +const DownloadQueue = require('./download_queue.js'); // deps const async = require('async'); const assert = require('assert'); const _ = require('lodash'); const moment = require('moment'); +const fse = require('fs-extra'); +const fs = require('graceful-fs'); +const paths = require('path'); +const sanatizeFilename = require('sanitize-filename'); exports.moduleInfo = { name : 'Full Screen Editor (FSE)', @@ -255,7 +262,12 @@ exports.FullScreenEditorModule = exports.getModule = class FullScreenEditorModul viewModeMenuHelp : function(formData, extraArgs, cb) { self.viewControllers.footerView.setFocus(false); return self.displayHelp(cb); - } + }, + + addToDownloadQueue : (formData, extraArgs, cb) => { + this.viewControllers.footerView.setFocus(false); + return this.addToDownloadQueue(cb); + }, }; } @@ -905,6 +917,82 @@ exports.FullScreenEditorModule = exports.getModule = class FullScreenEditorModul ); } + addToDownloadQueue(cb) { + this.client.term.rawWrite(ansi.resetScreen()); + + const sysTempDownloadArea = FileArea.getFileAreaByTag(FileArea.WellKnownAreaTags.TempDownloads); + const sysTempDownloadDir = FileArea.getAreaDefaultStorageDirectory(sysTempDownloadArea); + + const msgInfo = this.getHeaderFormatObj(); + + const outputFileName = paths.join( + sysTempDownloadDir, + sanatizeFilename( + `(${msgInfo.messageId}) ${msgInfo.subject}_(${this.message.modTimestamp.format('YYYY-MM-DD')}).txt`) + ); + + async.waterfall( + [ + (callback) => { + const messageBody = this.viewControllers.body + .getView(MciViewIds.body.message) + .getData( { forceLineTerms : true } ); + + fse.mkdirs(sysTempDownloadDir, err => { + return callback(err, messageBody); + }); + }, + (messageBody, callback) => { + return fs.writeFile(outputFileName, messageBody, 'utf8', callback); + }, + (callback) => { + fs.stat(outputFileName, (err, stats) => { + return callback(err, stats.size); + }); + }, + (fileSize, callback) => { + const newEntry = new FileEntry({ + areaTag : sysTempDownloadArea.areaTag, + fileName : paths.basename(outputFileName), + storageTag : sysTempDownloadArea.storageTags[0], + meta : { + upload_by_username : this.client.user.username, + upload_by_user_id : this.client.user.userId, + byte_size : fileSize, + session_temp_dl : 1, // download is valid until session is over + } + }); + + newEntry.desc = `${msgInfo.messageId} - ${msgInfo.subject}`; + + newEntry.persist(err => { + if(!err) { + // queue it! + DownloadQueue.get(this.client).addTemporaryDownload(newEntry); + } + return callback(err); + }); + }, + (callback) => { + theme.displayThemeArt( + { name : this.menuConfig.config.art.dlQueueAdd || 'msg_add_dl_queue', client : this.client }, + () => { + this.client.waitForKeyPress( () => { + this.redrawScreen( () => { + this.viewControllers[this.getFooterName()].setFocus(true); + return callback(null); + }); + }); + } + ); + } + ], + err => { + return cb(err); + } + ); + } + displayQuoteBuilder() { // // Clear body area diff --git a/core/msg_area_view_fse.js b/core/msg_area_view_fse.js index 1ca5617c..ed057438 100644 --- a/core/msg_area_view_fse.js +++ b/core/msg_area_view_fse.js @@ -102,11 +102,10 @@ exports.getModule = class AreaViewFSEModule extends FullScreenEditorModule { self.client.log(extraArgs, 'Missing extraArgs.menu'); return cb(null); - } + }, }); } - loadMessageByUuid(uuid, cb) { const msg = new Message(); msg.load( { uuid : uuid, user : this.client.user }, () => {