-
-
+
+
-
+
@@ -575,7 +581,7 @@
-
+
${renderTerminalRows(pcs, 'Kontrolery (PC)', true)}
@@ -589,12 +595,12 @@
function renderTerminalRows(terminals, title, allowRestart) {
if(!terminals.length) return '';
-
+
const rows = terminals.map(t => {
const isRun = t.status?.toLowerCase() === 'running';
const statusCls = isRun ? "text-emerald-500" : "text-slate-400 dark:text-slate-500";
const dotCls = isRun ? "bg-emerald-500" : "bg-slate-300 dark:bg-slate-600";
-
+
// Indywidualne przyciski
let actions = `
@@ -643,10 +649,17 @@
}
async function runCommand(command, locationId, type) {
- const locName = state.terminals.find(t => t.location_id === locationId)?.location_name || locationId;
- const typeName = type === 'computer' ? 'Kontrolery' : 'Oświetlenie';
- const actionName = command === COMMAND_WAKE ? "Włączenie" : (command === COMMAND_SHUTDOWN ? "Wyłączenie" : "Restart");
-
+ const locName = locationId === 'all' ? "Cała wystawa" : (state.terminals.find(t => t.location_id === locationId)?.location_name || locationId);
+ const typeName = type === 'computer' ? 'Kontrolery' : (type === 'ctrl' ? 'Oświetlenie' : 'Wszystkie urządzenia');
+
+ // Logika nazw dla nowych komend
+ let actionName = "";
+ if(command === COMMAND_WAKE) actionName = "Włączenie";
+ else if(command === COMMAND_SHUTDOWN) actionName = "Wyłączenie";
+ else if(command === COMMAND_RESTART) actionName = "Restart";
+ else if(command === COMMAND_AUDIO_ON) actionName = "Włączenie Audio";
+ else if(command === COMMAND_AUDIO_OFF) actionName = "Wyłączenie Audio";
+
const confirmed = await customConfirm(
`Akcja grupowa: ${actionName}`,
`Lokalizacja: ${locName}\nUrządzenia: ${typeName}\n\nCzy na pewno chcesz kontynuować?`
@@ -655,14 +668,20 @@
}
async function runSingleCommand(command, terminalId, terminalName) {
- const actionName = command === COMMAND_WAKE ? "Włączenie" : (command === COMMAND_SHUTDOWN ? "Wyłączenie" : "Restart");
- const terminal = state.terminals.find(t => String(t.id) === String(terminalId));
+ let actionName = "";
+ if(command === COMMAND_WAKE) actionName = "Włączenie";
+ else if(command === COMMAND_SHUTDOWN) actionName = "Wyłączenie";
+ else if(command === COMMAND_RESTART) actionName = "Restart";
+ else if(command === COMMAND_AUDIO_ON) actionName = "Włączenie Audio";
+ else if(command === COMMAND_AUDIO_OFF) actionName = "Wyłączenie Audio";
+ const terminal = state.terminals.find(t => String(t.id) === String(terminalId));
+
const confirmed = await customConfirm(
`Pojedyncza Akcja: ${actionName}`,
`Urządzenie: ${terminalName}\nIP: ${terminal?.ip || 'Brak IP'}\n\nCzy na pewno wysłać polecenie?`
);
-
+
if(confirmed) {
if(terminal) executeCommandBulk(command, [terminal], terminalName);
}
@@ -681,11 +700,11 @@
async function executeCommandBulk(command, targets, scopeLabel) {
state.busy = true;
setStatus(`Wysyłanie polecenia ${command} do ${targets.length} urządzeń (${scopeLabel})...`, false);
-
+
try {
// Wykrywanie Trybu Preview wstrzymuje żądania FETCH
const isPreview = window.location.protocol === 'about:' || window.location.protocol === 'blob:' || window.location.hostname === '';
-
+
let failedCount = 0;
for(const t of targets) {
@@ -699,7 +718,7 @@
const body = new URLSearchParams();
body.set("command", command);
body.set("tag_id", t.id);
-
+
const res = await fetch(API_COMMAND, { method: "POST", body: body });
if(!res.ok) failedCount++;
} catch(e) {
@@ -707,10 +726,10 @@
}
}
}
-
+
if(failedCount > 0) setStatus(`Zakończono z błędami. Niepowodzenia: ${failedCount}/${targets.length}`, true);
else setStatus(`Polecenie wykonane pomyślnie dla ${targets.length} urządzeń.`, false);
-
+
setTimeout(() => refreshTerminals(true), 1500);
} finally {
state.busy = false;
@@ -722,4 +741,4 @@
}