added more clue buttons and positioned them correctly, need to fix elapsed timer on clue page....

Error handling with clues improved.
This commit is contained in:
bobbert committed 2025-03-17 13:30:49 +00:00
1 parent 8a06fd4966
commit 4fa0419ba9
2 files changed
+16 -11

No files matched your search

BIN
View File
Binary file not shown.
+16 -11
View File
@@ -50,7 +50,7 @@ export default function EnhancedQRScanner({
try { try {
// Release any stream that might be stored in our ref // Release any stream that might be stored in our ref
if (cameraStreamRef.current) { if (cameraStreamRef.current) {
cameraStreamRef.current.getTracks().forEach(track => { cameraStreamRef.current.getTracks().forEach((track) => {
track.stop(); track.stop();
}); });
cameraStreamRef.current = null; cameraStreamRef.current = null;
@@ -58,7 +58,8 @@ export default function EnhancedQRScanner({
} }
// Also try to find and release any active video tracks that might be running // Also try to find and release any active video tracks that might be running
navigator.mediaDevices.getUserMedia({ audio: false, video: false }) navigator.mediaDevices
.getUserMedia({ audio: false, video: false })
.catch(() => { .catch(() => {
// This intentionally fails but helps release resources in some browsers // This intentionally fails but helps release resources in some browsers
}); });
@@ -185,7 +186,7 @@ export default function EnhancedQRScanner({
releaseCameraResources(); releaseCameraResources();
// Add a small delay to ensure resources are properly released // Add a small delay to ensure resources are properly released
await new Promise(resolve => setTimeout(resolve, 500)); await new Promise((resolve) => setTimeout(resolve, 500));
// Now try to get fresh camera access // Now try to get fresh camera access
const stream = await navigator.mediaDevices.getUserMedia({ const stream = await navigator.mediaDevices.getUserMedia({
@@ -209,7 +210,7 @@ export default function EnhancedQRScanner({
console.error("Failed to get camera permission:", err); console.error("Failed to get camera permission:", err);
// Increment retry count // Increment retry count
setRetryCount(prev => prev + 1); setRetryCount((prev) => prev + 1);
if ( if (
err.name === "NotAllowedError" || err.name === "NotAllowedError" ||
@@ -224,9 +225,13 @@ export default function EnhancedQRScanner({
err.name === "TrackStartError" || err.name === "TrackStartError" ||
retryCount < 2 // Try a few times before showing hardware error retryCount < 2 // Try a few times before showing hardware error
) { ) {
setError(`Camera temporarily unavailable. Please try again in a few moments.`); setError(
`Camera temporarily unavailable. Please try again in a few moments.`
);
} else { } else {
setError(`Camera error: ${err.message}. You may need to restart your browser or device.`); setError(
`Camera error: ${err.message}. You may need to restart your browser or device.`
);
} }
} }
}; };
@@ -245,7 +250,10 @@ export default function EnhancedQRScanner({
// Don't immediately deactivate camera on all errors // Don't immediately deactivate camera on all errors
// Some errors can be temporary // Some errors can be temporary
if (error.name === "NotAllowedError" || error.name === "PermissionDeniedError") { if (
error.name === "NotAllowedError" ||
error.name === "PermissionDeniedError"
) {
setCameraActive(false); setCameraActive(false);
} }
@@ -327,10 +335,7 @@ export default function EnhancedQRScanner({
</button> </button>
</div> </div>
) : ( ) : (
<button <button className="retry-button" onClick={requestCameraAccess}>
className="retry-button"
onClick={requestCameraAccess}
>
Retry Camera Access Retry Camera Access
</button> </button>
)} )}