From 2d8e2b9d7d8026cbaab87afce3b5b465ff8f0b86 Mon Sep 17 00:00:00 2001 From: spaceAngel Date: Tue, 2 Nov 2021 00:10:31 +0100 Subject: [PATCH] [daemon][gui] departure tab (using opendata) #feature --- config.yml.sample | 8 ++- gui/css/transport.less | 43 +++++++++++++ gui/js/app.js | 9 ++- gui/js/mainPanel/transport.js | 64 +++++++++++++++++++ gui/snippets/body.html | 3 + gui/snippets/mainpanel/transport.html | 28 ++++++++ .../Configuration/Configuration.php | 17 +++++ .../Configuration/ConfigurationLoader.php | 14 ++++ .../PublicTransport/PublicTransportModule.php | 21 ++++++ src/CyberPanel/Server/tpl/config.js.php | 11 +++- 10 files changed, 214 insertions(+), 4 deletions(-) create mode 100644 gui/css/transport.less create mode 100644 gui/js/mainPanel/transport.js create mode 100644 gui/snippets/mainpanel/transport.html create mode 100644 src/CyberPanel/Integration/PublicTransport/Configuration/Configuration.php create mode 100644 src/CyberPanel/Integration/PublicTransport/Configuration/ConfigurationLoader.php create mode 100644 src/CyberPanel/Integration/PublicTransport/PublicTransportModule.php diff --git a/config.yml.sample b/config.yml.sample index 3993b8a..4875e0a 100644 --- a/config.yml.sample +++ b/config.yml.sample @@ -1,5 +1,6 @@ keys: lastfm: + golemio: systemLimits: systemLimits: cpu: @@ -52,7 +53,12 @@ mainpanel: - covid - hospitals - files + - transport + mail: host: imap.server.example port: 993 - username: user@server.com \ No newline at end of file + username: user@server.com +departures: + - Muzeum + - Můstek \ No newline at end of file diff --git a/gui/css/transport.less b/gui/css/transport.less new file mode 100644 index 0000000..c867865 --- /dev/null +++ b/gui/css/transport.less @@ -0,0 +1,43 @@ +.transport { + padding-bottom: 200px; + .departure { + margin: 10px 10px 10px 40px; + clear: both; + font-size: 22px; + + .type, .name, .meta, .timer { + float: left; + } + + .type { + font-size: 36px; + width: 70px; + text-align: center; + padding-top: 16px; + } + + .name { + font-size: 50px; + font-weight: bold; + width: 100px; + text-align: center; + padding-top: 6px; + } + + .meta { + padding: 10px 10px 0px 20px; + width:500px; + .delay { + color:red; + display: inline-block; + margin-left: 12px; + } + } + + .timer { + font-size:34px; + width:95px; + text-align: right; + } + } +} \ No newline at end of file diff --git a/gui/js/app.js b/gui/js/app.js index e2d4cc9..08ba797 100644 --- a/gui/js/app.js +++ b/gui/js/app.js @@ -1,7 +1,11 @@ /* global Vue, socket, - networkWidget, dateTimeWidget, keyboardWidget, systemInfoWidget, hwInfoWidget, macrosWidget, defaultDataStruct, mediaWidget, mainPanelWidget, lockScreenImage, fileManager, - upsStatus, speakerm, mail + networkWidget, dateTimeWidget, keyboardWidget, + systemInfoWidget, hwInfoWidget, macrosWidget, + defaultDataStruct, mediaWidget, mainPanelWidget, + downloadsWidget, covidWidget, + lockScreenImage, fileManager, speaker, + upsStatus, speakerm, mail, transport */ var cyberPanel; var mixins = []; @@ -69,6 +73,7 @@ document.addEventListener('DOMContentLoaded', function() { lastFmTrackInfo.init(); covidWidget.init(); mail.init(); + transport.init(); upsStatus.init(); speaker.init(); }); diff --git a/gui/js/mainPanel/transport.js b/gui/js/mainPanel/transport.js new file mode 100644 index 0000000..14d6cae --- /dev/null +++ b/gui/js/mainPanel/transport.js @@ -0,0 +1,64 @@ +/* global axios, config */ + +var transport = { + departures: [], + + stops: new Map(), + + init: function() { + if (document.getElementById('transport')) { + transport.updateData(); + setInterval( + function() { + transport.updateData() + }, 60000 + ); + } + }, + + updateData: async function() { + axios({ + method: 'get', + url: 'https://api.golemio.cz/v2/pid/departureboards/?' + config.publicTransportDepartures, + mode: 'no-cors', + headers: { + 'Content-Type': 'application/json', + 'X-Access-Token': config.keys.golemio + }, + }).then(async function (response) { + for (var i = 0; i < response.data.stops.length; i++) { + transport.stops.set( + response.data.stops[i].stop_id, + response.data.stops[i].stop_name, + ); + } + transport.departures = response.data.departures; + }); + }, + + timeDiff: function timeDifference(datestring) { + var date1 = Date.parse(datestring); + var difference = date1 - Date.now(); + return transport.timeToString(difference); + }, + + timeToString: function(timeval) { + + var daysDifference = Math.floor(timeval/1000/60/60/24); + timeval -= daysDifference*1000*60*60*24; + + var hoursDifference = Math.floor(timeval/1000/60/60); + timeval -= hoursDifference*1000*60*60; + + var minutesDifference = Math.floor(timeval/1000/60); + timeval -= minutesDifference*1000*60; + + var secondsDifference = Math.floor(timeval/1000); + if (secondsDifference < 10) { + secondsDifference = '0' + secondsDifference; + } + + return minutesDifference + ':' + secondsDifference; + + } +}; diff --git a/gui/snippets/body.html b/gui/snippets/body.html index 9db3c8e..2dc0978 100644 --- a/gui/snippets/body.html +++ b/gui/snippets/body.html @@ -32,6 +32,8 @@ ! + + @@ -51,6 +53,7 @@
+
diff --git a/gui/snippets/mainpanel/transport.html b/gui/snippets/mainpanel/transport.html new file mode 100644 index 0000000..577f839 --- /dev/null +++ b/gui/snippets/mainpanel/transport.html @@ -0,0 +1,28 @@ +
+ +
\ No newline at end of file diff --git a/src/CyberPanel/Integration/PublicTransport/Configuration/Configuration.php b/src/CyberPanel/Integration/PublicTransport/Configuration/Configuration.php new file mode 100644 index 0000000..aff1221 --- /dev/null +++ b/src/CyberPanel/Integration/PublicTransport/Configuration/Configuration.php @@ -0,0 +1,17 @@ +departures[] = $departure; + } + + public function getDepartures() : array { + return $this->departures; + } + +} diff --git a/src/CyberPanel/Integration/PublicTransport/Configuration/ConfigurationLoader.php b/src/CyberPanel/Integration/PublicTransport/Configuration/ConfigurationLoader.php new file mode 100644 index 0000000..cc78259 --- /dev/null +++ b/src/CyberPanel/Integration/PublicTransport/Configuration/ConfigurationLoader.php @@ -0,0 +1,14 @@ +addDeparture($departure); + } + return $configuration; + } +} diff --git a/src/CyberPanel/Integration/PublicTransport/PublicTransportModule.php b/src/CyberPanel/Integration/PublicTransport/PublicTransportModule.php new file mode 100644 index 0000000..f340410 --- /dev/null +++ b/src/CyberPanel/Integration/PublicTransport/PublicTransportModule.php @@ -0,0 +1,21 @@ +getSubSection('departures')->getDepartures() +); + return ' var config = { lastfmApiKey: "' . Configuration::getInstance()->getApiKey('lastfm') . '", + keys: { + golemio: "' . Configuration::getInstance()->getApiKey('golemio') . '" + }, panes: [' . implode(',', $mainpanel). '], sidebar: [' . implode(',', $sidebar). '], hwLimits: { @@ -28,6 +36,7 @@ }, memory: ' . Configuration::getInstance()->getSystemLimits()->getMemory() . ', storage: ' . Configuration::getInstance()->getSystemLimits()->getStorage() . ' - } + }, + publicTransportDepartures: "' . $publicTransportDepartures .'" }; ';