ws4kp/server/scripts/modules/currentweatherscroll.js

96 lines
2.1 KiB
JavaScript
Raw Normal View History

2020-09-25 03:44:51 +00:00
'use strict';
/* globals draw, navigation */
// eslint-disable-next-line no-unused-vars
const currentWeatherScroll = (() => {
// local variables
let context; // currently active context
let blankDrawArea; // original state of context
let station;
let interval;
let screenIndex = 0;
// start drawing conditions
// reset starts from the first item in the text scroll list
const start = (_context) => {
// see if there is a context available
if (!_context) return;
// store see if the context is new
if (_context !== context) {
// clean the outgoing context
cleanLastContext();
// store the new blank context
blankDrawArea = _context.getImageData(0, 405, 640, 75);
}
// store the context locally
context = _context;
// set up the interval if needed
if (!interval) {
interval = setInterval(incrementInterval, 700);
}
// draw the data
drawScreen();
};
const stop = (reset) => {
cleanLastContext();
if (interval) interval = clearInterval(interval);
if (reset) screenIndex = 0;
};
const cleanLastContext = () => {
if (blankDrawArea) context.putImageData(blankDrawArea, 0, 405);
blankDrawArea = undefined;
context = undefined;
};
// increment interval, roll over
const incrementInterval = () => {
screenIndex = (screenIndex+1)%2;
// draw new text
drawScreen();
};
const drawScreen = () => {
// get the conditions
const data = navigation.getCurrentWeather();
// nothing to do if there's no data yet
if (!data) return;
if (!station) return;
// clean up any old text
context.putImageData(blankDrawArea, 0, 405);
switch (screenIndex) {
case 0:
default:
drawCondition(`Conditions at ${station.name.substr(0,20)}`);
break;
case 1:
drawCondition(`Page 2`);
break;
}
};
// internal draw function with preset parameters
const drawCondition = (text) => {
draw.text(context, 'Star4000', '24pt', '#ffffff', 70, 430, text, 2);
};
// store the latest station data
const setStation = (weatherParameters) => {
station = weatherParameters.stations[0].properties;
};
// return the api
return {
start,
stop,
setStation,
};
})();