resolve camara scan stream failure
Release Inventarsystem / release-docker (push) Successful in 2m15s
Release Inventarsystem / release-docker (push) Successful in 2m15s
This commit is contained in:
@@ -805,74 +805,92 @@
|
|||||||
deleteLibraryItem(itemId);
|
deleteLibraryItem(itemId);
|
||||||
}
|
}
|
||||||
|
|
||||||
// =========================================================================
|
async function startScanner(callback = null) {
|
||||||
// 3. CORE SCANNER ROUTING ENGINE (QUAGGA2)
|
if (scannerRunning) {
|
||||||
// =========================================================================
|
console.warn("Scanner is already running. Stopping it first...");
|
||||||
function startScanner(targetCallback) {
|
await stopScanner();
|
||||||
const readerWrap = document.getElementById('scanReaderWrap');
|
}
|
||||||
|
|
||||||
|
activeScannerCallback = callback;
|
||||||
|
|
||||||
|
const scannerWrap = document.querySelector('.library-scan-reader-wrap');
|
||||||
const toggleBtn = document.getElementById('toggleScannerBtn');
|
const toggleBtn = document.getElementById('toggleScannerBtn');
|
||||||
|
|
||||||
activeScannerCallback = targetCallback;
|
// 1. CRITICAL FIX: Make the container visible BEFORE Quagga initializes
|
||||||
|
// Quagga cannot calculate video dimensions if display is 'none'
|
||||||
|
if (scannerWrap) {
|
||||||
|
scannerWrap.style.display = 'block';
|
||||||
|
}
|
||||||
|
|
||||||
if (readerWrap) readerWrap.style.display = 'block';
|
setScanStatus('Starte Kamera...', 'warn');
|
||||||
setScanStatus('Initializing camera...', 'warn');
|
|
||||||
|
|
||||||
const scannerContainer = document.querySelector('.library-scan-reader-wrap');
|
|
||||||
scannerContainer.style.display = 'block';
|
|
||||||
|
|
||||||
Quagga.init({
|
// 2. Initialize Quagga with a slight delay to allow the DOM to render the block
|
||||||
inputStream: {
|
setTimeout(() => {
|
||||||
name: "Live",
|
Quagga.init({
|
||||||
type: "LiveStream",
|
inputStream: {
|
||||||
target: document.querySelector('.library-scan-reader'),
|
name: "Live",
|
||||||
constraints: {
|
type: "LiveStream",
|
||||||
width: 640,
|
// This MUST match the inner div where the video should appear
|
||||||
height: 480,
|
target: document.querySelector('.library-scan-reader'),
|
||||||
facingMode: "environment"
|
constraints: {
|
||||||
|
width: 640,
|
||||||
|
height: 480,
|
||||||
|
facingMode: "environment" // Prefer back camera on mobile
|
||||||
|
}
|
||||||
},
|
},
|
||||||
},
|
locator: {
|
||||||
decoder: {
|
patchSize: "medium",
|
||||||
readers: [
|
halfSample: true
|
||||||
"code_128_reader",
|
},
|
||||||
"ean_reader",
|
decoder: {
|
||||||
"code_39_reader",
|
// Keep only the barcode types you actually use to improve performance
|
||||||
"upc_reader",
|
readers: ["code_128_reader", "ean_reader", "code_39_reader"]
|
||||||
"codabar_reader",
|
},
|
||||||
"i2of5_reader"
|
locate: true
|
||||||
]
|
}, function(err) {
|
||||||
}
|
if (err) {
|
||||||
}, function(err) {
|
// This will finally log the actual error (e.g., NotAllowedError) if permissions fail
|
||||||
if (err) {
|
console.error("Quagga initialization failed:", err);
|
||||||
console.error('Scanner start failed:', err);
|
setScanStatus('Kamera-Fehler: ' + (err.name || err), 'error');
|
||||||
if (readerWrap) readerWrap.style.display = 'none';
|
|
||||||
const detail = (err && (err.message || err.name)) ? ` (${err.message || err.name})` : '';
|
|
||||||
setScanStatus(`Scanner konnte nicht gestartet werden${detail}`, 'error');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Quagga.start();
|
if (scannerWrap) scannerWrap.style.display = 'none';
|
||||||
scannerRunning = true;
|
scannerRunning = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!targetCallback && toggleBtn) {
|
Quagga.start();
|
||||||
toggleBtn.textContent = 'Scanner stoppen';
|
scannerRunning = true;
|
||||||
}
|
setScanStatus('Scanner bereit.', 'ok');
|
||||||
setScanStatus('Scanner aktiv. Jetzt Code scannen.', 'warn');
|
|
||||||
});
|
if (toggleBtn) {
|
||||||
|
toggleBtn.textContent = 'Scanner stoppen';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, 50);
|
||||||
}
|
}
|
||||||
|
|
||||||
function stopScanner() {
|
async function stopScanner() {
|
||||||
if (!scannerRunning) return;
|
if (!scannerRunning) return;
|
||||||
|
|
||||||
const readerWrap = document.getElementById('scanReaderWrap');
|
try {
|
||||||
const toggleBtn = document.getElementById('toggleScannerBtn');
|
Quagga.stop();
|
||||||
|
} catch (e) {
|
||||||
|
console.warn("Error stopping Quagga (it may not have been running):", e);
|
||||||
|
}
|
||||||
|
|
||||||
Quagga.stop();
|
|
||||||
scannerRunning = false;
|
scannerRunning = false;
|
||||||
activeScannerCallback = null;
|
activeScannerCallback = null;
|
||||||
|
|
||||||
if (readerWrap) readerWrap.style.display = 'none';
|
// Hide the container to free up UI space
|
||||||
if (toggleBtn) toggleBtn.textContent = 'Scanner starten';
|
const scannerWrap = document.querySelector('.library-scan-reader-wrap');
|
||||||
setScanStatus('Scanner gestoppt.', 'warn');
|
if (scannerWrap) {
|
||||||
|
scannerWrap.style.display = 'none';
|
||||||
|
}
|
||||||
|
|
||||||
|
const toggleBtn = document.getElementById('toggleScannerBtn');
|
||||||
|
if (toggleBtn) {
|
||||||
|
toggleBtn.textContent = 'Kamera Scanner'; // Reset button text
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function isStudentCardBarcode(code) {
|
async function isStudentCardBarcode(code) {
|
||||||
|
|||||||
Reference in New Issue
Block a user