- Add subnet scanning for printer discovery in Docker environments

- Detect Docker environment automatically via /.dockerenv and cgroup
  - Show subnet input field in Add Printer dialog when running in Docker
  - Scan IP range for Bambu printer ports (8883 MQTT, 990 FTPS)
  - Query SSDP to get printer name/serial/model from discovered IPs
  - Map raw SSDP model codes to friendly names (BL-P001→X1C, O1D→H2D)
This commit is contained in:
maziggy
2025-12-28 09:40:47 +01:00
parent 017e36a0a6
commit 8acc91d3cd
10 changed files with 673 additions and 119 deletions
+26
View File
@@ -2190,8 +2190,22 @@ export interface DiscoveryStatus {
running: boolean;
}
export interface DiscoveryInfo {
is_docker: boolean;
ssdp_running: boolean;
scan_running: boolean;
}
export interface SubnetScanStatus {
running: boolean;
scanned: number;
total: number;
}
// Discovery API
export const discoveryApi = {
getInfo: () => request<DiscoveryInfo>('/discovery/info'),
getStatus: () => request<DiscoveryStatus>('/discovery/status'),
startDiscovery: (duration: number = 10) =>
@@ -2202,4 +2216,16 @@ export const discoveryApi = {
getDiscoveredPrinters: () =>
request<DiscoveredPrinter[]>('/discovery/printers'),
// Subnet scanning (for Docker environments)
startSubnetScan: (subnet: string, timeout: number = 1.0) =>
request<SubnetScanStatus>('/discovery/scan', {
method: 'POST',
body: JSON.stringify({ subnet, timeout }),
}),
getScanStatus: () => request<SubnetScanStatus>('/discovery/scan/status'),
stopSubnetScan: () =>
request<SubnetScanStatus>('/discovery/scan/stop', { method: 'POST' }),
};