diff --git a/src/device/protocol/buttplugIo/buttplugIoDeviceFactory.ts b/src/device/protocol/buttplugIo/buttplugIoDeviceFactory.ts index 2cdf2916..58314564 100644 --- a/src/device/protocol/buttplugIo/buttplugIoDeviceFactory.ts +++ b/src/device/protocol/buttplugIo/buttplugIoDeviceFactory.ts @@ -21,11 +21,20 @@ export default class ButtplugIoDeviceFactory private readonly logger: Logger; - public constructor(uuidFactory: UuidFactory, dateFactory: DateFactory, settings: Settings, logger: Logger) { + private readonly useDeviceNameAsId: boolean; + + public constructor( + uuidFactory: UuidFactory, + dateFactory: DateFactory, + settings: Settings, + logger: Logger, + useDeviceNameAsId: boolean + ) { this.uuidFactory = uuidFactory; this.dateFactory = dateFactory; this.settings = settings; this.logger = logger; + this.useDeviceNameAsId = useDeviceNameAsId; } public create(buttplugDevice: ButtplugClientDevice, provider: string): ButtplugIoDevice { @@ -86,7 +95,7 @@ export default class ButtplugIoDeviceFactory private createKnownDevice(buttplugDevice: ButtplugClientDevice, provider: string): KnownDevice { // Since we don't get a unique identifier for the Bluetooth device from Intiface, // we need to use the index assigned to the device by Intiface. It's the best we have. - const deviceId = `buttplugio-${buttplugDevice.index}`; + const deviceId = `buttplugio-${this.useDeviceNameAsId ? buttplugDevice.name : buttplugDevice.index}`; let knownDevice = this.settings.getKnownDeviceById(deviceId) if (null !== knownDevice) { diff --git a/src/device/protocol/buttplugIo/buttplugIoDeviceFactoryFactory.ts b/src/device/protocol/buttplugIo/buttplugIoDeviceFactoryFactory.ts new file mode 100644 index 00000000..d60c7beb --- /dev/null +++ b/src/device/protocol/buttplugIo/buttplugIoDeviceFactoryFactory.ts @@ -0,0 +1,32 @@ +import ButtplugIoDeviceFactory from "./buttplugIoDeviceFactory.js"; +import UuidFactory from "../../../factory/uuidFactory.js"; +import Logger from "../../../logging/Logger.js"; +import DateFactory from "../../../factory/dateFactory.js"; +import Settings from "../../../settings/settings.js"; +import {ButtplugIoWebsocketConfig} from "./buttplugIoWebsocketDeviceProvider.js"; + +export default class ButtplugIoDeviceFactoryFactory +{ + private readonly uuidFactory: UuidFactory; + private readonly dateFactory: DateFactory; + private readonly settings: Settings; + private readonly logger: Logger; + + public constructor(uuidFactory: UuidFactory, dateFactory: DateFactory, settings: Settings, logger: Logger) { + this.uuidFactory = uuidFactory; + this.dateFactory = dateFactory; + this.settings = settings; + this.logger = logger; + } + + public create(config: ButtplugIoWebsocketConfig): ButtplugIoDeviceFactory + { + return new ButtplugIoDeviceFactory( + this.uuidFactory, + this.dateFactory, + this.settings, + this.logger, + config.useDeviceNameAsId + ); + } +} diff --git a/src/device/protocol/buttplugIo/buttplugIoWebsocketDeviceProvider.ts b/src/device/protocol/buttplugIo/buttplugIoWebsocketDeviceProvider.ts index efe45c42..3a7b7084 100644 --- a/src/device/protocol/buttplugIo/buttplugIoWebsocketDeviceProvider.ts +++ b/src/device/protocol/buttplugIo/buttplugIoWebsocketDeviceProvider.ts @@ -6,6 +6,11 @@ import ButtplugIoDeviceFactory from "./buttplugIoDeviceFactory.js"; import Logger from "../../../logging/Logger.js"; import DeviceProviderEvent from "../../provider/deviceProviderEvent.js"; +export type ButtplugIoWebsocketConfig = { + address: string, + useDeviceNameAsId: boolean, +} + export default class ButtplugIoWebsocketDeviceProvider extends DeviceProvider { public static readonly name = 'buttplugIoWebsocket'; diff --git a/src/device/protocol/buttplugIo/buttplugIoWebsocketDeviceProviderFactory.ts b/src/device/protocol/buttplugIo/buttplugIoWebsocketDeviceProviderFactory.ts index ec57a9c5..af718def 100644 --- a/src/device/protocol/buttplugIo/buttplugIoWebsocketDeviceProviderFactory.ts +++ b/src/device/protocol/buttplugIo/buttplugIoWebsocketDeviceProviderFactory.ts @@ -1,32 +1,25 @@ import DeviceProvider from "../../provider/deviceProvider.js"; import EventEmitter from "events"; -import SerialDeviceTransportFactory from "../../transport/serialDeviceTransportFactory.js"; import DeviceProviderFactory from "../../provider/deviceProviderFactory.js"; import Logger from "../../../logging/Logger.js"; -import ButtplugIoDeviceFactory from "./buttplugIoDeviceFactory.js"; -import ButtplugIoWebsocketDeviceProvider from "./buttplugIoWebsocketDeviceProvider.js"; - -type ButtplugIoWebsocketConfig = { - address: string, -} +import ButtplugIoWebsocketDeviceProvider, {ButtplugIoWebsocketConfig} from "./buttplugIoWebsocketDeviceProvider.js"; +import ButtplugIoDeviceFactoryFactory from "./buttplugIoDeviceFactoryFactory.js"; export default class ButtplugIoWebsocketDeviceProviderFactory implements DeviceProviderFactory { private readonly eventEmitter: EventEmitter; - private readonly deviceFactory: ButtplugIoDeviceFactory; - - private readonly deviceTransportFactory: SerialDeviceTransportFactory; + private readonly deviceFactoryFactory: ButtplugIoDeviceFactoryFactory; private readonly logger: Logger; public constructor( eventEmitter: EventEmitter, - deviceFactory: ButtplugIoDeviceFactory, + deviceFactoryFactory: ButtplugIoDeviceFactoryFactory, logger: Logger ) { this.eventEmitter = eventEmitter; - this.deviceFactory = deviceFactory; + this.deviceFactoryFactory = deviceFactoryFactory; this.logger = logger; } @@ -34,7 +27,7 @@ export default class ButtplugIoWebsocketDeviceProviderFactory implements DeviceP { return new ButtplugIoWebsocketDeviceProvider( this.eventEmitter, - this.deviceFactory, + this.deviceFactoryFactory.create(config), config.address, this.logger ); diff --git a/src/device/provider/deviceProviderFactory.ts b/src/device/provider/deviceProviderFactory.ts index 6a469620..b68abf5a 100644 --- a/src/device/provider/deviceProviderFactory.ts +++ b/src/device/provider/deviceProviderFactory.ts @@ -1,5 +1,4 @@ import DeviceProvider from "./deviceProvider.js"; -import {JsonObject} from "../../types.js"; export default interface DeviceProviderFactory { diff --git a/src/serviceMap.ts b/src/serviceMap.ts index 25eb1119..234db1d4 100644 --- a/src/serviceMap.ts +++ b/src/serviceMap.ts @@ -30,6 +30,7 @@ import GetLogController from "./controller/automation/getLogController.js"; import RunScriptController from "./controller/automation/runScriptController.js"; import StopScriptController from "./controller/automation/stopScriptController.js"; import StatusScriptController from "./controller/automation/statusScriptController.js"; +import ButtplugIoDeviceFactoryFactory from "./device/protocol/buttplugIo/buttplugIoDeviceFactoryFactory.js"; /* eslint-disable @typescript-eslint/naming-convention */ type ServiceMap = { @@ -50,6 +51,7 @@ type ServiceMap = { 'device.serial.factory.slvCtrlPlus': SlvCtrlPlusDeviceFactory, 'device.provider.factory.buttplugIoWebsocket': DeviceProviderFactory, 'device.serial.factory.buttplugIo': ButtplugIoDeviceFactory, + 'device.factory.factory.buttplugIo': ButtplugIoDeviceFactoryFactory, 'device.uniqueNameGenerator': DeviceNameGenerator, 'device.updater': DeviceUpdaterInterface, diff --git a/src/serviceProvider/deviceServiceProvider.ts b/src/serviceProvider/deviceServiceProvider.ts index 50d53f91..fb365fa3 100644 --- a/src/serviceProvider/deviceServiceProvider.ts +++ b/src/serviceProvider/deviceServiceProvider.ts @@ -18,7 +18,6 @@ import SlvCtrlPlusSerialDeviceProvider from "../device/protocol/slvCtrlPlus/slvC import ButtplugIoWebsocketDeviceProvider from "../device/protocol/buttplugIo/buttplugIoWebsocketDeviceProvider.js"; import ButtplugIoWebsocketDeviceProviderFactory from "../device/protocol/buttplugIo/buttplugIoWebsocketDeviceProviderFactory.js"; -import ButtplugIoDeviceFactory from "../device/protocol/buttplugIo/buttplugIoDeviceFactory.js"; import ButtplugIoDevice from "../device/protocol/buttplugIo/buttplugIoDevice.js"; import ButtplugIoDeviceUpdater from "../device/protocol/buttplugIo/buttplugIoDeviceUpdater.js"; import ServiceMap from "../serviceMap.js"; @@ -45,8 +44,8 @@ export default class DeviceServiceProvider implements ServiceProvider new ButtplugIoWebsocketDeviceProviderFactory( new EventEmitter(), - container.get('device.serial.factory.buttplugIo'), - container.get('logger.default'), + container.get('device.factory.factory.buttplugIo'), + container.get('logger.default') ) ); @@ -73,13 +72,6 @@ export default class DeviceServiceProvider implements ServiceProvider new ButtplugIoDeviceFactory( - container.get('factory.uuid'), - container.get('factory.date'), - container.get('settings'), - container.get('logger.default'), - )); - container.set('device.updater', () => { const plainToClass = container.get('serializer.plainToClass'); const deviceUpdater = new DelegateDeviceUpdater(); diff --git a/src/settings/deviceSource.ts b/src/settings/deviceSource.ts index adbed440..dbf1b0f6 100644 --- a/src/settings/deviceSource.ts +++ b/src/settings/deviceSource.ts @@ -1,5 +1,4 @@ import {Exclude, Expose} from "class-transformer"; -import {JsonObject} from "../types.js"; @Exclude() export default class DeviceSource diff --git a/src/settings/knownDevice.ts b/src/settings/knownDevice.ts index 2509da35..d1c55c19 100644 --- a/src/settings/knownDevice.ts +++ b/src/settings/knownDevice.ts @@ -1,5 +1,4 @@ import {Exclude, Expose} from "class-transformer"; -import {JsonObject} from "../types.js"; @Exclude() export default class KnownDevice