2 Commits

Author SHA1 Message Date
3d2ac7b931 release: v0.9.1-beta10 2026-04-25 14:06:54 +02:00
98303f1197 release: v0.9.1-beta9 2026-04-25 14:02:51 +02:00
3 changed files with 75 additions and 2 deletions

View File

@@ -1 +1 @@
0.9.1-beta8 0.9.1-beta10

View File

@@ -1271,7 +1271,13 @@ function setText(id,txt){var el=document.getElementById(id);if(el)el.textContent
document.getElementById('lang-btn').textContent=l==='de'?'EN':'DE'; document.getElementById('lang-btn').textContent=l==='de'?'EN':'DE';
document.documentElement.setAttribute('lang',l); document.documentElement.setAttribute('lang',l);
// defer until DOM ready // defer until DOM ready
window.addEventListener('DOMContentLoaded',function(){applyLang();}); window.addEventListener('DOMContentLoaded',function(){
applyLang();
// Beim ersten Start (keine Zugangsdaten) Settings-Modal automatisch öffnen
fetch('/api/settings').then(function(r){return r.json()}).then(function(d){
if(!d.printer_ip||!d.device_id)openSettings();
}).catch(function(){});
});
})(); })();
// ── Panel nav ── // ── Panel nav ──

67
start.sh Executable file
View File

@@ -0,0 +1,67 @@
#!/usr/bin/env bash
# start.sh KX-Bridge starten (baut Docker-Image automatisch wenn nötig)
set -euo pipefail
cd "$(dirname "$0")"
# .env anlegen falls nicht vorhanden
if [[ ! -f .env ]]; then
if [[ -f .env.example ]]; then
cp .env.example .env
echo "[start] .env aus .env.example erstellt"
else
touch .env
fi
fi
# Docker verfügbar?
if ! docker info > /dev/null 2>&1; then
echo "[start] Docker nicht gefunden bitte Docker installieren."
exit 1
fi
# Prüfen ob Build nötig ist
NEEDS_BUILD=0
if ! docker image inspect kx-bridge:latest > /dev/null 2>&1; then
echo "[start] Image nicht vorhanden baue kx-bridge:latest ..."
NEEDS_BUILD=1
else
# Image-Erstellungszeit in Unix-Sekunden
IMAGE_TS=$(docker inspect --format='{{.Created}}' kx-bridge:latest \
| python3 -c "import sys,datetime; s=sys.stdin.read().strip(); \
s=s[:26].rstrip('Z').replace('T',' '); \
print(int(datetime.datetime.fromisoformat(s).replace(tzinfo=datetime.timezone.utc).timestamp()))" 2>/dev/null || echo 0)
for f in Dockerfile \
05_scripts/kobrax_moonraker_bridge.py \
05_scripts/kobrax_client.py \
05_scripts/env_loader.py \
05_scripts/requirements.txt \
05_scripts/anycubic_slicer.crt \
05_scripts/anycubic_slicer.key; do
if [[ -f "$f" ]]; then
FILE_TS=$(python3 -c "import os; print(int(os.path.getmtime('$f')))" 2>/dev/null || echo 0)
if [[ $FILE_TS -gt $IMAGE_TS ]]; then
echo "[start] '$f' ist neuer als das Image baue neu ..."
NEEDS_BUILD=1
break
fi
fi
done
fi
if [[ $NEEDS_BUILD -eq 1 ]]; then
docker build -t kx-bridge:latest .
fi
# Container starten
echo "[start] Starte KX-Bridge ..."
docker-compose down 2>/dev/null || true
docker-compose up -d
echo ""
echo " ✓ KX-Bridge läuft"
echo " Web-UI : http://$(hostname -I | awk '{print $1}'):7125"
echo " Logs : docker-compose logs -f"
echo " Stop : docker-compose down"