mirror of
https://github.com/smittix/intercept.git
synced 2026-06-14 16:43:38 -07:00
Fix BT/WiFi run-state health and BT Locate tracking continuity
This commit is contained in:
@@ -1618,22 +1618,23 @@ const BluetoothMode = (function() {
|
||||
|
||||
function doLocateHandoff(device) {
|
||||
console.log('[BT] doLocateHandoff, BtLocate defined:', typeof BtLocate !== 'undefined');
|
||||
if (typeof BtLocate !== 'undefined') {
|
||||
BtLocate.handoff({
|
||||
device_id: device.device_id,
|
||||
mac_address: device.address,
|
||||
address_type: device.address_type || null,
|
||||
irk_hex: device.irk_hex || null,
|
||||
known_name: device.name || null,
|
||||
known_manufacturer: device.manufacturer_name || null,
|
||||
last_known_rssi: device.rssi_current,
|
||||
tx_power: device.tx_power || null,
|
||||
appearance_name: device.appearance_name || null,
|
||||
fingerprint_id: device.fingerprint_id || null,
|
||||
mac_cluster_count: device.mac_cluster_count || 0
|
||||
});
|
||||
}
|
||||
}
|
||||
if (typeof BtLocate !== 'undefined') {
|
||||
BtLocate.handoff({
|
||||
device_id: device.device_id,
|
||||
device_key: device.device_key || null,
|
||||
mac_address: device.address,
|
||||
address_type: device.address_type || null,
|
||||
irk_hex: device.irk_hex || null,
|
||||
known_name: device.name || null,
|
||||
known_manufacturer: device.manufacturer_name || null,
|
||||
last_known_rssi: device.rssi_current,
|
||||
tx_power: device.tx_power || null,
|
||||
appearance_name: device.appearance_name || null,
|
||||
fingerprint_id: device.fingerprint_id || device.fingerprint?.id || null,
|
||||
mac_cluster_count: device.mac_cluster_count || 0
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Public API
|
||||
return {
|
||||
|
||||
@@ -144,10 +144,12 @@ const BtLocate = (function() {
|
||||
if (mac) body.mac_address = mac;
|
||||
if (namePattern) body.name_pattern = namePattern;
|
||||
if (irk) body.irk_hex = irk;
|
||||
if (handoffData?.device_id) body.device_id = handoffData.device_id;
|
||||
if (handoffData?.known_name) body.known_name = handoffData.known_name;
|
||||
if (handoffData?.known_manufacturer) body.known_manufacturer = handoffData.known_manufacturer;
|
||||
if (handoffData?.last_known_rssi) body.last_known_rssi = handoffData.last_known_rssi;
|
||||
if (handoffData?.device_id) body.device_id = handoffData.device_id;
|
||||
if (handoffData?.device_key) body.device_key = handoffData.device_key;
|
||||
if (handoffData?.fingerprint_id) body.fingerprint_id = handoffData.fingerprint_id;
|
||||
if (handoffData?.known_name) body.known_name = handoffData.known_name;
|
||||
if (handoffData?.known_manufacturer) body.known_manufacturer = handoffData.known_manufacturer;
|
||||
if (handoffData?.last_known_rssi) body.last_known_rssi = handoffData.last_known_rssi;
|
||||
|
||||
// Include user location as fallback when GPS unavailable
|
||||
const userLat = localStorage.getItem('observerLat');
|
||||
@@ -159,10 +161,11 @@ const BtLocate = (function() {
|
||||
|
||||
console.log('[BtLocate] Starting with body:', body);
|
||||
|
||||
if (!body.mac_address && !body.name_pattern && !body.irk_hex && !body.device_id) {
|
||||
alert('Please provide at least a MAC address, name pattern, IRK, or use hand-off from Bluetooth mode.');
|
||||
return;
|
||||
}
|
||||
if (!body.mac_address && !body.name_pattern && !body.irk_hex &&
|
||||
!body.device_id && !body.device_key && !body.fingerprint_id) {
|
||||
alert('Please provide at least one target identifier or use hand-off from Bluetooth mode.');
|
||||
return;
|
||||
}
|
||||
|
||||
fetch('/bt_locate/start', {
|
||||
method: 'POST',
|
||||
@@ -248,14 +251,17 @@ const BtLocate = (function() {
|
||||
}
|
||||
});
|
||||
|
||||
eventSource.addEventListener('session_ended', function() {
|
||||
showIdleUI();
|
||||
disconnectSSE();
|
||||
});
|
||||
|
||||
eventSource.onerror = function() {
|
||||
console.warn('[BtLocate] SSE error, polling fallback active');
|
||||
};
|
||||
eventSource.addEventListener('session_ended', function() {
|
||||
showIdleUI();
|
||||
disconnectSSE();
|
||||
});
|
||||
|
||||
eventSource.onerror = function() {
|
||||
console.warn('[BtLocate] SSE error, polling fallback active');
|
||||
if (eventSource && eventSource.readyState === EventSource.CLOSED) {
|
||||
eventSource = null;
|
||||
}
|
||||
};
|
||||
|
||||
// Start polling fallback (catches data even if SSE fails)
|
||||
startPolling();
|
||||
@@ -315,11 +321,16 @@ const BtLocate = (function() {
|
||||
return;
|
||||
}
|
||||
|
||||
updateScanStatus(data);
|
||||
updateHudInfo(data);
|
||||
|
||||
// Show diagnostics
|
||||
const diagEl = document.getElementById('btLocateDiag');
|
||||
updateScanStatus(data);
|
||||
updateHudInfo(data);
|
||||
|
||||
// Recover live stream if browser closed SSE connection.
|
||||
if (!eventSource || eventSource.readyState === EventSource.CLOSED) {
|
||||
connectSSE();
|
||||
}
|
||||
|
||||
// Show diagnostics
|
||||
const diagEl = document.getElementById('btLocateDiag');
|
||||
if (diagEl) {
|
||||
let diag = 'Polls: ' + (data.poll_count || 0) +
|
||||
(data.poll_thread_alive === false ? ' DEAD' : '') +
|
||||
|
||||
Reference in New Issue
Block a user