driverRegistry.ts 1.29 KB
import { d320faxDriver } from '../drivers/d320fax'
import { genericTscDriver } from '../drivers/genericTsc'
import { gpD320fxDriver } from '../drivers/gpD320fx'
import { gpR3Driver } from '../drivers/gpR3'
import type { PrinterCandidate, PrinterDriver, ResolvedPrinterCandidate } from '../types/printer'

const printerDrivers: PrinterDriver[] = [
  gpR3Driver,
  gpD320fxDriver,
  d320faxDriver,
  genericTscDriver,
]

export function getPrinterDrivers (): PrinterDriver[] {
  return printerDrivers
}

export function getPrinterDriverByKey (key?: string): PrinterDriver {
  return printerDrivers.find(driver => driver.key === key) || genericTscDriver
}

export function resolvePrinterDriver (device: PrinterCandidate): PrinterDriver {
  let bestDriver: PrinterDriver = genericTscDriver
  let bestScore = -1
  printerDrivers.forEach((driver) => {
    const score = driver.matches(device)
    if (score > bestScore) {
      bestScore = score
      bestDriver = driver
    }
  })
  return bestDriver
}

export function describePrinterCandidate (device: PrinterCandidate): ResolvedPrinterCandidate {
  const driver = resolvePrinterDriver(device)
  return {
    ...device,
    driverKey: driver.key,
    driverName: driver.displayName,
    protocol: driver.protocol,
    resolvedType: driver.resolveConnectionType(device),
  }
}