Merge branch 'master' of https://git.jappel.io/jappel/scoreboard-js
Konflikt in scoreboard/controllers/cli.js zugunsten der Remote-Version aufgeloest: openBrowser()/killBrowser() bleiben erhalten, da routes/admin.js sie verwendet. Der lokale Testcode wurde verworfen (er rief zudem das child_process-Modul faelschlich als Funktion auf). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
commit
c4325ae8ac
19 changed files with 546 additions and 78 deletions
|
|
@ -1,23 +1,37 @@
|
|||
// CLI-Controller (Testdatei)
|
||||
// Zuständig für die Verarbeitung von Kommandozeilen-Befehlen des Scoreboards.
|
||||
// Aktuell nur ein Funktionstest mit einem einfachen `ls`-Befehl.
|
||||
// CLI-Controller
|
||||
// Startet und beendet den Anzeige-Browser auf dem Monitor-Rechner (Raspberry Pi).
|
||||
// Chromium wird im Kiosk-Modus auf Display :0 geöffnet und zeigt die Monitor-Ansicht an.
|
||||
|
||||
const exec = require('node:child_process');
|
||||
const { spawn } = require('node:child_process')
|
||||
|
||||
// Testaufruf: Listet den Inhalt des aktuellen Verzeichnisses auf,
|
||||
// um zu prüfen, ob child_process.exec korrekt funktioniert.
|
||||
exec('ls ./', (err, output) => {
|
||||
if (err) {
|
||||
console.error("could not execute command: ", err)
|
||||
return
|
||||
let command; // Referenz auf den laufenden Chromium-Prozess
|
||||
let browserOpen = false; // Status des Browsers, verhindert Mehrfachstart
|
||||
|
||||
// Startet Chromium im Kiosk-Modus, sofern noch kein Browser laeuft
|
||||
async function openBrowser() {
|
||||
if(!browserOpen) {
|
||||
// Als Benutzer "pi" starten, damit der Prozess Zugriff auf das X-Display hat
|
||||
command = spawn('sudo', ['-upi', 'chromium-browser', '--display=:0', '--incognito', '--noerrors', '--hide-crash-restore-bubble', '--disable-infobars', '--kiosk', 'http://localhost']);
|
||||
|
||||
command.stdout.on('data', data => {
|
||||
console.log("stdout: ", data.toString());
|
||||
});
|
||||
|
||||
command.stderr.on('data', data => {
|
||||
console.log("sterr: ", data.toString());
|
||||
});
|
||||
browserOpen = true;
|
||||
}
|
||||
console.log("Output: \n", output)
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
// Beendet den laufenden Browserprozess, sofern einer gestartet wurde
|
||||
async function killBrowser() {
|
||||
if(browserOpen) {
|
||||
command.kill();
|
||||
browserOpen = false;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
openBrowser, killBrowser
|
||||
}
|
||||
|
|
|
|||
46
scoreboard/controllers/db.js
Normal file
46
scoreboard/controllers/db.js
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
"use strict";
|
||||
|
||||
let db;
|
||||
|
||||
// Import ESM into CJS file using immediately invoked function expression because of missing top-level await in CJS
|
||||
(async () => {
|
||||
const { LowSync } = await import('lowdb');
|
||||
const { JSONFileSync } = await import('lowdb/node');
|
||||
db = new LowSync(new JSONFileSync('db.json'), { teams: []})
|
||||
})();
|
||||
|
||||
function getTeams() {
|
||||
db.read();
|
||||
return db.data.teams
|
||||
}
|
||||
|
||||
// Adds passed teamName to db if not already existing
|
||||
function addTeam(teamName) {
|
||||
console.log(teamName)
|
||||
db.read();
|
||||
if(!db.data.teams.includes(teamName) && teamName != "") { // Teamname not in db
|
||||
db.data.teams.push(teamName);
|
||||
db.write();
|
||||
} else { // Teamname already in db
|
||||
}
|
||||
}
|
||||
|
||||
// Deletes passed teamName from db if existing
|
||||
function deleteTeam(teamName) {
|
||||
db.read();
|
||||
if(db.data.teams.includes(teamName) && teamName != "") { // Teamname in db
|
||||
db.data.teams.splice(db.data.teams.indexOf(teamName), 1) // Delete corresponding array entry
|
||||
db.write();
|
||||
}
|
||||
}
|
||||
|
||||
// Returns important values from db
|
||||
function getValues() {
|
||||
db.read();
|
||||
console.log(db.data)
|
||||
return db.data
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
getTeams, addTeam, deleteTeam, getValues
|
||||
}
|
||||
21
scoreboard/controllers/etc.js
Normal file
21
scoreboard/controllers/etc.js
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
let splashscreenEnabled = true;
|
||||
|
||||
// Toggles a splashscreen
|
||||
function toggleSplashScreen() {
|
||||
splashscreenEnabled = !splashscreenEnabled;
|
||||
}
|
||||
|
||||
// Returns splashscreen enabled attribute
|
||||
function getSplashscreen() {
|
||||
return splashscreenEnabled;
|
||||
}
|
||||
|
||||
function getValues() {
|
||||
return {
|
||||
splashscreenEnabled: splashscreenEnabled,
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
toggleSplashScreen, getSplashscreen, getValues
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
const io = require('./socketio');
|
||||
const db = require('../controllers/db');
|
||||
|
||||
let enabled = false;
|
||||
let enabled = true;
|
||||
let teamA = {
|
||||
name: "Team A",
|
||||
name2: "",
|
||||
|
|
@ -13,7 +14,8 @@ let teamB = {
|
|||
score: 0,
|
||||
isSpielgemeinschaft: 0,
|
||||
};
|
||||
let sideswitch = false;
|
||||
let sideswitch = false; // Attribute to switch sides after halftime
|
||||
let referenceMirrored = false; // If sitting behind the scoreboard, switch sides for admin board
|
||||
|
||||
// Funktionsübersicht (Prototypen ohne Implementierung — nur zur Übersicht)
|
||||
function setEnabled(status) {};
|
||||
|
|
@ -21,7 +23,7 @@ function configTeam(team, name, name2, isSpielgemeinschaft) {};
|
|||
function setScore(team, score) {};
|
||||
function alterScore(team, dir) {};
|
||||
function clearScore() {};
|
||||
function toggleSideSwitch() {};
|
||||
function toggleSideswitch() {};
|
||||
function getEnabled() {};
|
||||
function getValues() {};
|
||||
|
||||
|
|
@ -91,6 +93,11 @@ function toggleSideswitch() {
|
|||
io.sockets.emit('scoreSideswitch', '');
|
||||
}
|
||||
|
||||
// Mirror team position on admin panel
|
||||
function toggleReferenceMirrored() {
|
||||
referenceMirrored = !referenceMirrored;
|
||||
}
|
||||
|
||||
// Return enabled value
|
||||
function getEnabled() {
|
||||
return enabled
|
||||
|
|
@ -112,10 +119,12 @@ function getValues() {
|
|||
teamA: teamA,
|
||||
teamB: teamB,
|
||||
sideswitch: sideswitch,
|
||||
referenceMirrored: referenceMirrored,
|
||||
print: print(),
|
||||
teams: db.getTeams(),
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
setEnabled, configTeam, setScore, alterScore, clearScore, toggleSideswitch, getEnabled, getValues
|
||||
setEnabled, configTeam, setScore, alterScore, clearScore, toggleSideswitch, toggleReferenceMirrored, getEnabled, getValues,
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue