From 5112b3cddbc1df07ecc7763fd1724a4f09c25944 Mon Sep 17 00:00:00 2001 From: heavyrubberslave Date: Tue, 30 Jan 2024 21:08:46 +0100 Subject: [PATCH 1/4] Add factory for factory --- .../buttplugIo/buttplugIoDeviceFactory.ts | 13 ++++++-- .../buttplugIoDeviceFactoryFactory.ts | 32 +++++++++++++++++++ .../buttplugIoWebsocketDeviceProvider.ts | 5 +++ ...uttplugIoWebsocketDeviceProviderFactory.ts | 19 ++++------- src/serviceProvider/deviceServiceProvider.ts | 6 ++-- 5 files changed, 57 insertions(+), 18 deletions(-) create mode 100644 src/device/protocol/buttplugIo/buttplugIoDeviceFactoryFactory.ts diff --git a/src/device/protocol/buttplugIo/buttplugIoDeviceFactory.ts b/src/device/protocol/buttplugIo/buttplugIoDeviceFactory.ts index 2cdf2916..9851ae90 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 = this.useDeviceNameAsId ? `buttplugio-${buttplugDevice.name}` : `buttplugio-${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..3e13e2d9 --- /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; + + 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/serviceProvider/deviceServiceProvider.ts b/src/serviceProvider/deviceServiceProvider.ts index 33430ba0..edd1f984 100644 --- a/src/serviceProvider/deviceServiceProvider.ts +++ b/src/serviceProvider/deviceServiceProvider.ts @@ -25,9 +25,9 @@ import Logger from "../logging/Logger.js"; 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 ButtplugIoDeviceFactoryFactory from "../device/protocol/buttplugIo/buttplugIoDeviceFactoryFactory.js"; export default class DeviceServiceProvider implements ServiceProvider { @@ -51,7 +51,7 @@ export default class DeviceServiceProvider implements ServiceProvider 'device.provider.factory.buttplugIoWebsocket', (): DeviceProviderFactory => new ButtplugIoWebsocketDeviceProviderFactory( new EventEmitter(), - container.get('device.serial.factory.buttplugIo') as ButtplugIoDeviceFactory, + container.get('device.factory.factory.buttplugIo') as ButtplugIoDeviceFactoryFactory, container.get('logger.default') as Logger ) ); @@ -79,7 +79,7 @@ export default class DeviceServiceProvider implements ServiceProvider container.get('logger.default') as Logger, )); - container.set('device.serial.factory.buttplugIo', () => new ButtplugIoDeviceFactory( + container.set('device.factory.factory.buttplugIo', () => new ButtplugIoDeviceFactoryFactory( container.get('factory.uuid') as UuidFactory, container.get('factory.date') as DateFactory, container.get('settings') as Settings, From a9090bdd08166ea153d735d1f7de74152c76fd02 Mon Sep 17 00:00:00 2001 From: heavyrubberslave Date: Tue, 30 Jan 2024 21:12:47 +0100 Subject: [PATCH 2/4] Add missing modifier --- src/device/protocol/buttplugIo/buttplugIoDeviceFactory.ts | 2 +- .../protocol/buttplugIo/buttplugIoDeviceFactoryFactory.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/device/protocol/buttplugIo/buttplugIoDeviceFactory.ts b/src/device/protocol/buttplugIo/buttplugIoDeviceFactory.ts index 9851ae90..c2572d84 100644 --- a/src/device/protocol/buttplugIo/buttplugIoDeviceFactory.ts +++ b/src/device/protocol/buttplugIo/buttplugIoDeviceFactory.ts @@ -95,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 = this.useDeviceNameAsId ? `buttplugio-${buttplugDevice.name}` : `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 index 3e13e2d9..d60c7beb 100644 --- a/src/device/protocol/buttplugIo/buttplugIoDeviceFactoryFactory.ts +++ b/src/device/protocol/buttplugIo/buttplugIoDeviceFactoryFactory.ts @@ -12,7 +12,7 @@ export default class ButtplugIoDeviceFactoryFactory private readonly settings: Settings; private readonly logger: Logger; - constructor(uuidFactory: UuidFactory, dateFactory: DateFactory, settings: Settings, logger: Logger) { + public constructor(uuidFactory: UuidFactory, dateFactory: DateFactory, settings: Settings, logger: Logger) { this.uuidFactory = uuidFactory; this.dateFactory = dateFactory; this.settings = settings; From 54356dec22bd745ae530bcaf50d8cc1d4d6153a8 Mon Sep 17 00:00:00 2001 From: heavyrubberslave Date: Tue, 30 Jan 2024 21:13:27 +0100 Subject: [PATCH 3/4] Remove unnecessary space --- src/device/protocol/buttplugIo/buttplugIoDeviceFactory.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/device/protocol/buttplugIo/buttplugIoDeviceFactory.ts b/src/device/protocol/buttplugIo/buttplugIoDeviceFactory.ts index c2572d84..58314564 100644 --- a/src/device/protocol/buttplugIo/buttplugIoDeviceFactory.ts +++ b/src/device/protocol/buttplugIo/buttplugIoDeviceFactory.ts @@ -95,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-${this.useDeviceNameAsId ? buttplugDevice.name : buttplugDevice.index}`; + const deviceId = `buttplugio-${this.useDeviceNameAsId ? buttplugDevice.name : buttplugDevice.index}`; let knownDevice = this.settings.getKnownDeviceById(deviceId) if (null !== knownDevice) { From c460128295c83318ba2b1c38e17d2171fe6eda12 Mon Sep 17 00:00:00 2001 From: heavyrubberslave Date: Thu, 1 Feb 2024 20:00:29 +0100 Subject: [PATCH 4/4] Merge main --- src/device/provider/deviceProviderFactory.ts | 1 - src/serviceMap.ts | 2 ++ src/serviceProvider/deviceServiceProvider.ts | 12 ++---------- src/settings/deviceSource.ts | 1 - src/settings/knownDevice.ts | 1 - 5 files changed, 4 insertions(+), 13 deletions(-) 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 5264166c..fb365fa3 100644 --- a/src/serviceProvider/deviceServiceProvider.ts +++ b/src/serviceProvider/deviceServiceProvider.ts @@ -20,7 +20,6 @@ import ButtplugIoWebsocketDeviceProviderFactory from "../device/protocol/buttplugIo/buttplugIoWebsocketDeviceProviderFactory.js"; import ButtplugIoDevice from "../device/protocol/buttplugIo/buttplugIoDevice.js"; import ButtplugIoDeviceUpdater from "../device/protocol/buttplugIo/buttplugIoDeviceUpdater.js"; -import ButtplugIoDeviceFactoryFactory from "../device/protocol/buttplugIo/buttplugIoDeviceFactoryFactory.js"; import ServiceMap from "../serviceMap.js"; export default class DeviceServiceProvider implements ServiceProvider @@ -45,8 +44,8 @@ export default class DeviceServiceProvider implements ServiceProvider new ButtplugIoWebsocketDeviceProviderFactory( new EventEmitter(), - container.get('device.serial.factory.buttplugIo') as ButtplugIoDeviceFactory, - container.get('logger.default') as Logger + 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') as UuidFactory, - container.get('factory.date') as DateFactory, - container.get('settings') as Settings, - container.get('logger.default') as Logger, - )); - 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