feat(devicemanager): Introduce a UniversalDevice architecture with composable Feature system; add extensive new device/protocol support and discovery/refactors
This commit is contained in:
@@ -19,6 +19,13 @@ const SERVICE_TYPES = {
|
||||
IPP: '_ipp._tcp', // IPP printers
|
||||
IPPS: '_ipps._tcp', // IPP over TLS
|
||||
PDL: '_pdl-datastream._tcp', // Raw/JetDirect printers
|
||||
|
||||
// Speakers / Audio
|
||||
AIRPLAY: '_airplay._tcp', // AirPlay devices (Apple TV, HomePod, etc.)
|
||||
RAOP: '_raop._tcp', // Remote Audio Output Protocol (AirPlay audio)
|
||||
SONOS: '_sonos._tcp', // Sonos speakers
|
||||
GOOGLECAST: '_googlecast._tcp', // Chromecast / Google Cast devices
|
||||
SPOTIFY: '_spotify-connect._tcp', // Spotify Connect devices
|
||||
} as const;
|
||||
|
||||
/**
|
||||
@@ -26,11 +33,18 @@ const SERVICE_TYPES = {
|
||||
*/
|
||||
const DEFAULT_OPTIONS: Required<IDiscoveryOptions> = {
|
||||
serviceTypes: [
|
||||
// Scanners
|
||||
SERVICE_TYPES.ESCL,
|
||||
SERVICE_TYPES.ESCL_SECURE,
|
||||
SERVICE_TYPES.SANE,
|
||||
// Printers
|
||||
SERVICE_TYPES.IPP,
|
||||
SERVICE_TYPES.IPPS,
|
||||
// Speakers
|
||||
SERVICE_TYPES.AIRPLAY,
|
||||
SERVICE_TYPES.RAOP,
|
||||
SERVICE_TYPES.SONOS,
|
||||
SERVICE_TYPES.GOOGLECAST,
|
||||
],
|
||||
timeout: 10000,
|
||||
};
|
||||
@@ -281,11 +295,22 @@ export class MdnsDiscovery extends plugins.events.EventEmitter {
|
||||
case SERVICE_TYPES.IPPS:
|
||||
case SERVICE_TYPES.PDL:
|
||||
return 'printer';
|
||||
case SERVICE_TYPES.AIRPLAY:
|
||||
case SERVICE_TYPES.RAOP:
|
||||
case SERVICE_TYPES.SONOS:
|
||||
case SERVICE_TYPES.GOOGLECAST:
|
||||
case SERVICE_TYPES.SPOTIFY:
|
||||
return 'speaker';
|
||||
default:
|
||||
// Check if it's a scanner or printer based on service type pattern
|
||||
if (serviceType.includes('scan') || serviceType.includes('scanner')) {
|
||||
return 'scanner';
|
||||
}
|
||||
if (serviceType.includes('airplay') || serviceType.includes('raop') ||
|
||||
serviceType.includes('sonos') || serviceType.includes('cast') ||
|
||||
serviceType.includes('spotify')) {
|
||||
return 'speaker';
|
||||
}
|
||||
return 'printer';
|
||||
}
|
||||
}
|
||||
@@ -293,7 +318,7 @@ export class MdnsDiscovery extends plugins.events.EventEmitter {
|
||||
/**
|
||||
* Determine protocol from service type
|
||||
*/
|
||||
private getProtocol(serviceType: string): TScannerProtocol | 'ipp' {
|
||||
private getProtocol(serviceType: string): string {
|
||||
switch (serviceType) {
|
||||
case SERVICE_TYPES.ESCL:
|
||||
case SERVICE_TYPES.ESCL_SECURE:
|
||||
@@ -304,8 +329,17 @@ export class MdnsDiscovery extends plugins.events.EventEmitter {
|
||||
case SERVICE_TYPES.IPPS:
|
||||
case SERVICE_TYPES.PDL:
|
||||
return 'ipp';
|
||||
case SERVICE_TYPES.AIRPLAY:
|
||||
case SERVICE_TYPES.RAOP:
|
||||
return 'airplay';
|
||||
case SERVICE_TYPES.SONOS:
|
||||
return 'sonos';
|
||||
case SERVICE_TYPES.GOOGLECAST:
|
||||
return 'chromecast';
|
||||
case SERVICE_TYPES.SPOTIFY:
|
||||
return 'spotify';
|
||||
default:
|
||||
return 'ipp';
|
||||
return 'unknown';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user