Prioritize bleak over DBus for Flask compatibility

DBus/BlueZ requires a GLib main loop which Flask doesn't have.
Reordered backend priority: bleak > hcitool > bluetoothctl > dbus

Removed DBus option from UI since it won't work with Flask.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Smittix
2026-01-21 15:50:03 +00:00
parent c49b1e03f2
commit ed460761ff
2 changed files with 13 additions and 10 deletions

View File

@@ -17,10 +17,9 @@
<label>Scan Mode</label>
<select id="btScanMode">
<option value="auto">Auto (Recommended)</option>
<option value="dbus">DBus/BlueZ</option>
<option value="bleak">Bleak Library</option>
<option value="hcitool">hcitool (Legacy)</option>
<option value="bluetoothctl">bluetoothctl</option>
<option value="hcitool">hcitool (Linux)</option>
<option value="bluetoothctl">bluetoothctl (Linux)</option>
</select>
</div>
<div class="form-group">

View File

@@ -270,18 +270,15 @@ def _check_capabilities_permission(caps: SystemCapabilities) -> None:
def _determine_recommended_backend(caps: SystemCapabilities) -> None:
"""Determine the recommended scanning backend."""
# Prefer DBus/BlueZ if available and working
if caps.has_dbus and caps.has_bluez and caps.adapters:
if not caps.is_soft_blocked and not caps.is_hard_blocked:
caps.recommended_backend = 'dbus'
return
# NOTE: DBus/BlueZ requires a GLib main loop which Flask doesn't have.
# For Flask applications, we prefer bleak or subprocess-based tools.
# Fallback to bleak (cross-platform)
# Prefer bleak (cross-platform, works in Flask)
if caps.has_bleak:
caps.recommended_backend = 'bleak'
return
# Fallback to hcitool (requires root)
# Fallback to hcitool (requires root on Linux)
if caps.has_hcitool and caps.is_root:
caps.recommended_backend = 'hcitool'
return
@@ -291,6 +288,13 @@ def _determine_recommended_backend(caps: SystemCapabilities) -> None:
caps.recommended_backend = 'bluetoothctl'
return
# DBus is last resort - won't work properly with Flask but keep as option
# for potential future use with a separate scanning daemon
if caps.has_dbus and caps.has_bluez and caps.adapters:
if not caps.is_soft_blocked and not caps.is_hard_blocked:
caps.recommended_backend = 'dbus'
return
caps.recommended_backend = 'none'
if not caps.issues:
caps.issues.append('No suitable Bluetooth scanning backend available')