displayArtAndPrepViewController() is now available in MenuModule and derived classes

* This functionality was common enough to move to MenuModule and can shorthand a good amount of boilerplate code. See code for usage.
This commit is contained in:
Bryan Ashby 2022-06-02 11:12:23 -06:00
parent f02624c14d
commit 2e4df79d52
No known key found for this signature in database
GPG Key ID: C2C1B501E4EFD994
4 changed files with 105 additions and 173 deletions

View File

@ -306,68 +306,17 @@ exports.getModule = class FileAreaList extends MenuModule {
return this.updateCustomViewTextsWithFilter(category, startId, this.currentFileEntry.entryInfo);
}
displayArtAndPrepViewController(name, options, cb) {
const self = this;
const config = this.menuConfig.config;
async.waterfall(
[
function readyAndDisplayArt(callback) {
if(options.clearScreen) {
self.client.term.rawWrite(ansi.resetScreen());
}
theme.displayThemedAsset(
config.art[name],
self.client,
{ font : self.menuConfig.font, trailingLF : false },
(err, artData) => {
return callback(err, artData);
}
);
},
function prepeareViewController(artData, callback) {
if(_.isUndefined(self.viewControllers[name])) {
const vcOpts = {
client : self.client,
formId : FormIds[name],
};
if(!_.isUndefined(options.noInput)) {
vcOpts.noInput = options.noInput;
}
const vc = self.addViewController(name, new ViewController(vcOpts));
displayArtDataPrepCallback(name, artData, viewController) {
if ('details' === name) {
try {
self.detailsInfoArea = {
this.detailsInfoArea = {
top: artData.mciMap.XY2.position,
bottom: artData.mciMap.XY3.position,
};
} catch(e) {
return callback(Errors.DoesNotExist('Missing XY2 and XY3 position indicators!'));
throw Errors.DoesNotExist('Missing XY2 and XY3 position indicators!');
}
}
const loadOpts = {
callingMenu : self,
mciMap : artData.mciMap,
formId : FormIds[name],
};
return vc.loadFromMenuConfig(loadOpts, callback);
}
self.viewControllers[name].setFocus(true);
return callback(null);
},
],
err => {
return cb(err);
}
);
}
displayBrowsePage(clearScreen, cb) {
@ -388,7 +337,12 @@ exports.getModule = class FileAreaList extends MenuModule {
return callback(null);
},
function prepArtAndViewController(callback) {
return self.displayArtAndPrepViewController('browse', { clearScreen : clearScreen }, callback);
return self.displayArtAndPrepViewController(
'browse',
FormIds.browse,
{ clearScreen : clearScreen, artDataPrep: self.displayArtDataPrepCallback.bind(self) },
callback
);
},
function loadCurrentFileInfo(callback) {
self.currentFileEntry = new FileEntry();
@ -462,7 +416,12 @@ exports.getModule = class FileAreaList extends MenuModule {
async.series(
[
function prepArtAndViewController(callback) {
return self.displayArtAndPrepViewController('details', { clearScreen : true }, callback);
return self.displayArtAndPrepViewController(
'details',
FormIds.details,
{ clearScreen : true, artDataPrep: self.displayArtDataPrepCallback.bind(self) },
callback
);
},
function populateViews(callback) {
self.populateCustomLabels('details', MciViewIds.details.customRangeStart);
@ -678,7 +637,16 @@ exports.getModule = class FileAreaList extends MenuModule {
gotoTopPos();
}
return self.displayArtAndPrepViewController(name, { clearScreen : false, noInput : true }, callback);
return self.displayArtAndPrepViewController(
name,
FormIds[name],
{
clearScreen : false,
noInput : true,
artDataPrep: self.displayArtDataPrepCallback.bind(self)
},
callback
);
},
function populateViews(callback) {
self.lastDetailsViewController = self.viewControllers[name];

View File

@ -168,7 +168,11 @@ exports.getModule = class FileBaseDownloadQueueManager extends MenuModule {
async.series(
[
function prepArtAndViewController(callback) {
return self.displayArtAndPrepViewController('queueManager', { clearScreen : clearScreen }, callback);
return self.displayArtAndPrepViewController(
'queueManager', FormIds.queueManager,
{ clearScreen : clearScreen },
callback
);
},
function populateViews(callback) {
return self.updateDownloadQueueView(callback);
@ -181,57 +185,4 @@ exports.getModule = class FileBaseDownloadQueueManager extends MenuModule {
}
);
}
displayArtAndPrepViewController(name, options, cb) {
const self = this;
const config = this.menuConfig.config;
async.waterfall(
[
function readyAndDisplayArt(callback) {
if(options.clearScreen) {
self.client.term.rawWrite(ansi.resetScreen());
}
theme.displayThemedAsset(
config.art[name],
self.client,
{ font : self.menuConfig.font, trailingLF : false },
(err, artData) => {
return callback(err, artData);
}
);
},
function prepeareViewController(artData, callback) {
if(_.isUndefined(self.viewControllers[name])) {
const vcOpts = {
client : self.client,
formId : FormIds[name],
};
if(!_.isUndefined(options.noInput)) {
vcOpts.noInput = options.noInput;
}
const vc = self.addViewController(name, new ViewController(vcOpts));
const loadOpts = {
callingMenu : self,
mciMap : artData.mciMap,
formId : FormIds[name],
};
return vc.loadFromMenuConfig(loadOpts, callback);
}
self.viewControllers[name].setFocus(true);
return callback(null);
},
],
err => {
return cb(err);
}
);
}
};

View File

@ -173,7 +173,12 @@ exports.getModule = class FileBaseWebDownloadQueueManager extends MenuModule {
async.series(
[
function prepArtAndViewController(callback) {
return self.displayArtAndPrepViewController('queueManager', { clearScreen : clearScreen }, callback);
return self.displayArtAndPrepViewController(
'queueManager',
FormIds.queueManager,
{ clearScreen : clearScreen },
callback
);
},
function prepareQueueDownloadLinks(callback) {
const webDlExpireTimeFormat = self.menuConfig.config.webDlExpireTimeFormat || 'YYYY-MMM-DD @ h:mm';
@ -226,57 +231,4 @@ exports.getModule = class FileBaseWebDownloadQueueManager extends MenuModule {
}
);
}
displayArtAndPrepViewController(name, options, cb) {
const self = this;
const config = this.menuConfig.config;
async.waterfall(
[
function readyAndDisplayArt(callback) {
if(options.clearScreen) {
self.client.term.rawWrite(ansi.resetScreen());
}
theme.displayThemedAsset(
config.art[name],
self.client,
{ font : self.menuConfig.font, trailingLF : false },
(err, artData) => {
return callback(err, artData);
}
);
},
function prepeareViewController(artData, callback) {
if(_.isUndefined(self.viewControllers[name])) {
const vcOpts = {
client : self.client,
formId : FormIds[name],
};
if(!_.isUndefined(options.noInput)) {
vcOpts.noInput = options.noInput;
}
const vc = self.addViewController(name, new ViewController(vcOpts));
const loadOpts = {
callingMenu : self,
mciMap : artData.mciMap,
formId : FormIds[name],
};
return vc.loadFromMenuConfig(loadOpts, callback);
}
self.viewControllers[name].setFocus(true);
return callback(null);
},
],
err => {
return cb(err);
}
);
}
};

View File

@ -11,6 +11,7 @@ const stringFormat = require('../core/string_format.js');
const MultiLineEditTextView = require('../core/multi_line_edit_text_view.js').MultiLineEditTextView;
const Errors = require('../core/enig_error.js').Errors;
const { getPredefinedMCIValue } = require('../core/predefined_mci.js');
const EnigAssert = require('./enigma_assert');
// deps
const async = require('async');
@ -563,6 +564,66 @@ exports.MenuModule = class MenuModule extends PluginModule {
});
}
displayArtAndPrepViewController(name, formId, options, cb) {
const config = this.menuConfig.config;
EnigAssert(_.isObject(config));
async.waterfall(
[
(callback) => {
if(options.clearScreen) {
this.client.term.rawWrite(ansi.resetScreen());
}
theme.displayThemedAsset(
config.art[name],
this.client,
{ font : this.menuConfig.font, trailingLF : false },
(err, artData) => {
return callback(err, artData);
}
);
},
(artData, callback) => {
if(_.isUndefined(this.viewControllers[name])) {
const vcOpts = {
client : this.client,
formId : formId,
};
if(!_.isUndefined(options.noInput)) {
vcOpts.noInput = options.noInput;
}
const vc = this.addViewController(name, new ViewController(vcOpts));
if (_.isFunction(options.artDataPrep)) {
try {
options.artDataPrep(name, artData, vc);
} catch(e) {
return callback(e);
}
}
const loadOpts = {
callingMenu : this,
mciMap : artData.mciMap,
formId : formId,
};
return vc.loadFromMenuConfig(loadOpts, callback);
}
this.viewControllers[name].setFocus(true);
return callback(null);
},
],
err => {
return cb(err);
}
);
}
setViewText(formName, mciId, text, appendMultiLine) {
const view = this.getView(formName, mciId);
if(!view) {