* Don't crash with bad string formats

* File listing: If we fail to get an archive listing, fix attempt to format the string with a non-object
This commit is contained in:
Bryan Ashby 2018-08-05 10:50:47 -06:00
parent 5bd7ecdb88
commit 746bd5abd0
2 changed files with 29 additions and 13 deletions

View File

@ -589,15 +589,22 @@ exports.getModule = class FileAreaList extends MenuModule {
}); });
} }
setFileListNoListing(text) {
const fileListView = this.viewControllers.detailsFileList.getView(MciViewIds.detailsFileList.fileList);
if(fileListView) {
fileListView.complexItems = false;
fileListView.setItems( [ text ] );
fileListView.redraw();
}
}
populateFileListing() { populateFileListing() {
const fileListView = this.viewControllers.detailsFileList.getView(MciViewIds.detailsFileList.fileList); const fileListView = this.viewControllers.detailsFileList.getView(MciViewIds.detailsFileList.fileList);
if(this.currentFileEntry.entryInfo.archiveType) { if(this.currentFileEntry.entryInfo.archiveType) {
this.cacheArchiveEntries( (err, cacheStatus) => { this.cacheArchiveEntries( (err, cacheStatus) => {
if(err) { if(err) {
// :TODO: Handle me!!! return this.setFileListNoListing('Failed to get file listing');
fileListView.setItems( [ 'Failed getting file listing' ] ); // :TODO: make this not suck
return;
} }
if('re-cached' === cacheStatus) { if('re-cached' === cacheStatus) {
@ -606,7 +613,8 @@ exports.getModule = class FileAreaList extends MenuModule {
} }
}); });
} else { } else {
fileListView.setItems( [ stringFormat(this.menuConfig.config.notAnArchiveFormat || 'Not an archive', { fileName : this.currentFileEntry.fileName } ) ] ); const notAnArchiveFileName = stringFormat(this.menuConfig.config.notAnArchiveFormat || 'Not an archive', { fileName : this.currentFileEntry.fileName } );
this.setFileListNoListing(notAnArchiveFileName);
} }
} }

View File

@ -331,17 +331,25 @@ module.exports = function format(fmt, obj) {
transformer = match[2]; transformer = match[2];
formatSpec = match[3]; formatSpec = match[3];
value = getValue(obj, objPath); try {
if(transformer) { value = getValue(obj, objPath);
value = transformValue(transformer, value); if(transformer) {
} value = transformValue(transformer, value);
}
tokens = tokenizeFormatSpec(formatSpec || ''); tokens = tokenizeFormatSpec(formatSpec || '');
if(_.isNumber(value)) { if(_.isNumber(value)) {
out += formatNumber(value, tokens); out += formatNumber(value, tokens);
} else { } else {
out += formatString(value, tokens); out += formatString(value, tokens);
}
} catch(e) {
if(e instanceof KeyError) {
out += match[0]; // preserve full thing
} else if(e instanceof ValueError) {
out += value.toString();
}
} }
} }