enigma-bbs/core/file_base_area_select.js

88 lines
2.9 KiB
JavaScript
Raw Normal View History

2017-09-04 02:45:00 +00:00
/* jslint node: true */
'use strict';
// enigma-bbs
2017-11-24 23:23:15 +00:00
const MenuModule = require('./menu_module.js').MenuModule;
const { getSortedAvailableFileAreas } = require('./file_base_area.js');
2017-11-24 23:23:15 +00:00
const StatLog = require('./stat_log.js');
2017-09-04 02:45:00 +00:00
// deps
const async = require('async');
2017-09-04 02:45:00 +00:00
exports.moduleInfo = {
name : 'File Area Selector',
desc : 'Select from available file areas',
author : 'NuSkooler',
2017-09-04 02:45:00 +00:00
};
const MciViewIds = {
areaList : 1,
2017-09-04 02:45:00 +00:00
};
exports.getModule = class FileAreaSelectModule extends MenuModule {
constructor(options) {
super(options);
2017-09-04 02:45:00 +00:00
this.menuMethods = {
selectArea : (formData, extraArgs, cb) => {
const filterCriteria = {
areaTag : formData.value.areaTag,
};
2017-09-04 02:45:00 +00:00
const menuOpts = {
extraArgs : {
filterCriteria : filterCriteria,
},
menuFlags : [ 'popParent', 'mergeFlags' ],
};
2017-09-04 02:45:00 +00:00
return this.gotoMenu(this.menuConfig.config.fileBaseListEntriesMenu || 'fileBaseListEntries', menuOpts, cb);
}
};
}
2017-09-04 02:45:00 +00:00
mciReady(mciData, cb) {
super.mciReady(mciData, err => {
if(err) {
return cb(err);
}
2017-09-04 02:45:00 +00:00
const self = this;
2017-09-04 02:45:00 +00:00
async.waterfall(
[
function mergeAreaStats(callback) {
const areaStats = StatLog.getSystemStat('file_base_area_stats') || { areas : {} };
2017-09-04 02:45:00 +00:00
// we could use 'sort' alone, but area/conf sorting has some special properties; user can still override
const availAreas = getSortedAvailableFileAreas(self.client);
availAreas.forEach(area => {
const stats = areaStats.areas[area.areaTag];
area.totalFiles = stats ? stats.files : 0;
area.totalBytes = stats ? stats.bytes : 0;
});
2017-09-04 02:45:00 +00:00
return callback(null, availAreas);
},
function prepView(availAreas, callback) {
self.prepViewController('allViews', 0, mciData.menu, (err, vc) => {
if(err) {
return callback(err);
}
2017-09-04 02:45:00 +00:00
const areaListView = vc.getView(MciViewIds.areaList);
areaListView.setItems(availAreas.map(area => Object.assign(area, { text : area.name, data : area.areaTag } )));
areaListView.redraw();
return callback(null);
});
}
],
err => {
return cb(err);
}
);
});
}
2017-09-04 02:45:00 +00:00
};