Skip to content
Snippets Groups Projects
Commit 8819b354 authored by Denis Peters's avatar Denis Peters
Browse files

+ /panels/departure/worker.js

parent 8a62cabb
Branches
No related tags found
No related merge requests found
importScripts('/js/helper/AJAX.js');
importScripts('/js/helper/check.js');
importScripts('/js/helper/AbstractWorker.js');
class DepartureWorker extends AbstractWorker {
constructor() {
super();
this.setSpeed(360000);
}
processConfig(config) {
if (isObject(config) && isArrayNotEmpty(config['stops'])) {
config['stops_converted'] = [];
for (var i = 0; i < config['stops'].length; ++i) {
config['stops_converted'].push({url:'https://vrrf.finalrewind.org/'+config['stops'][i].split(':').join('/')+'.json',method:'GET',params:{frontend:'json'}});
}
}
return config;
}
tick(callback) {
var config = this.config;
if (isObject(config) && isArrayNotEmpty(config['stops_converted'])) {
AJAX.request(config['stops_converted']).then(function(results) {
if (results.length == 0) return;
var
reftime = new Date(),
result = {
vrrf_version: {
actual: '0.0.0.0',
expected: '0.0.0.0'
},
errors: {},
info: {},
lines: {},
raw: {}
},
rawLines = {};
reftime = calcDateValue(reftime.getFullYear(), reftime.getMonth()+1, reftime.getDate(), reftime.getHours(), reftime.getMinutes());
for (var i = 0; i < results.length; ++i) {
if (!results[i].success) continue;
var data = results[i].response;
if (!isObject(data)) data = JSON.parse(data);
var stopName = config['stops'][i].split('/').join(' - ');
result['vrrf_version']['actual'] = data['version'];
result['vrrf_version']['expected'] = '0.0.0.0';
result['errors'][stopName] = data['error'];
result['info'][stopName] = '';
result['raw'][stopName] = data['raw'];
for (var j = 0; j < data['raw'].length; ++j) {
var entry = data['raw'][j];
// filter
if (isObjectNotEmpty(config['filter']) && !passFilter(config['filter'], entry)) continue;
// interprete
var
schedDate = entry['sched_date'].split('.'),
schedTime = entry['sched_time'].split(':'),
deptime = calcDateValue(schedDate[2], schedDate[1], schedDate[0], schedTime[0], schedTime[1]);
var delay = parseInt(entry['delay']);
if (isNaN(delay)) delay = 0;
if (((deptime + delay) - reftime) > 0) {
var ident = /*entry['lineref']['operator']+'|'+entry['lineref']['type']+'|'+*/entry['line']+'|'+entry['lineref']['identifier']+'|'+entry['key'];
if (!isObjectNotEmpty(result['lines'][ident])) {
result['lines'][ident] = {
timeValue: deptime,
line: entry['line'],
destination: entry['destination'],
type: entry['type'],
stops: [{
timeValue: deptime,
time: entry['sched_time'],
delay: entry['delay'],
cancel: entry['is_cancelled'],
name: stopName,
info: entry['info']
}]
};
} else {
result['lines'][ident]['stops'].push({
timeValue: deptime,
time: entry['sched_time'],
delay: entry['delay'],
cancel: entry['is_cancelled'],
name: stopName,
info: entry['info']
});
}
}
}
}
result['lines'] = sortData(Object.values(result['lines']));
if (isNumber(config.max)) {
result['lines'] = result['lines'].slice(0, config.max);
}
callback(result);
});
}
}
}
function passFilter(filter, entry) {
if (isObjectNotEmpty(filter['bl'])) {
if (isArrayNotEmpty(filter['bl']['line'])
&& arrayContains(filter['bl']['line'], entry['line'])) {
return false;
}
if (isArrayNotEmpty(filter['bl']['type'])
&& arrayContains(filter['bl']['type'], entry['type'])) {
return false;
}
if (isArrayNotEmpty(filter['bl']['platform'])
&& arrayContains(filter['bl']['platform'], entry['platform'])) {
return false;
}
if (isArrayNotEmpty(filter['bl']['destination'])
&& arrayContains(filter['bl']['destination'], entry['destination'])) {
return false;
}
}
if (isObjectNotEmpty(filter['wl'])) {
if (isArrayNotEmpty(filter['wl']['line'])
&& !arrayContains(filter['wl']['line'], entry['line'])) {
return false;
}
if (isArrayNotEmpty(filter['wl']['type'])
&& !arrayContains(filter['wl']['type'], entry['type'])) {
return false;
}
if (isArrayNotEmpty(filter['wl']['platform'])
&& !arrayContains(filter['wl']['platform'], entry['platform'])) {
return false;
}
if (isArrayNotEmpty(filter['wl']['destination'])
&& !arrayContains(filter['wl']['destination'], entry['destination'])) {
return false;
}
}
return true;
}
function sortData(data) {
for (var i = 0; i < data.length; ++i) {
data[i]['stops'] = data[i]['stops'].sort(sortFn);
data[i]['timeValue'] = data[i]['stops'][0]['timeValue'];
}
return data.sort(sortFn);
}
function sortFn(a,b) {
return a['timeValue'] - b['timeValue'];
}
function calcDateValue(year, month, day, hour, minute) {
year = parseInt(year) * 12 * 31 * 24 * 60;
month = parseInt(month) * 31 * 24 * 60;
day = parseInt(day) * 24 * 60;
hour = parseInt(hour) * 60;
minute = parseInt(minute);
return year+month+day+hour+minute;
}
new DepartureWorker;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment