mirror of
https://github.com/netbymatt/ws4kp.git
synced 2026-04-17 17:19:30 -07:00
current conditions ready for data
This commit is contained in:
96
server/scripts/modules/currentweatherscroll.js
Normal file
96
server/scripts/modules/currentweatherscroll.js
Normal file
@@ -0,0 +1,96 @@
|
||||
'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,
|
||||
};
|
||||
})();
|
||||
Reference in New Issue
Block a user