UNPKG

matterbridge-roborock-vacuum-plugin

Version:
85 lines 3.32 kB
import { CleanSequenceType, MopWaterFlow, VacuumSuctionPower } from '../enums/index.js'; import { CleanModeDisplayLabel, CleanModeLabelInfo } from './cleanModeConfig.js'; var BehaviorType; (function (BehaviorType) { BehaviorType["Default"] = "default"; BehaviorType["Smart"] = "smart"; })(BehaviorType || (BehaviorType = {})); /** * Resolve current clean mode from device settings using mode configurations. * Supports both default and smart device types through configuration injection. */ export class ModeResolver { behavior; settingsToModeMap; customCheckFn; constructor(configs, customCheckFn, behavior = BehaviorType.Default) { this.behavior = behavior; this.settingsToModeMap = new Map(configs.map((c) => [this.serializeSetting(c.setting), c.mode])); this.customCheckFn = customCheckFn; } /** * Determine current mode from device settings. */ resolve(setting) { if (!setting || typeof setting !== 'object') { return undefined; } if (this.customCheckFn) { const customResult = this.customCheckFn(setting); if (customResult !== undefined) { return customResult; } } const serialized = this.serializeSetting(setting); const exactMatch = this.settingsToModeMap.get(serialized); if (exactMatch !== undefined) { return exactMatch; } return this.resolveFallback(setting); } serializeSetting(setting) { return `${setting.suctionPower}:${setting.waterFlow}:${setting.mopRoute}`; } resolveFallback(setting) { if (setting.suctionPower === VacuumSuctionPower.Off) return CleanModeLabelInfo[CleanModeDisplayLabel.MopDefault].mode; if (setting.waterFlow === MopWaterFlow.Off) return CleanModeLabelInfo[CleanModeDisplayLabel.VacuumDefault].mode; if (setting.suctionPower !== VacuumSuctionPower.Off && setting.waterFlow !== MopWaterFlow.Off) return CleanModeLabelInfo[CleanModeDisplayLabel.VacuumAndMopDefault].mode; return undefined; } } /** * Create resolver for default devices. */ export function createDefaultModeResolver(configs) { return new ModeResolver(configs, (setting) => { if (setting.sequenceType === CleanSequenceType.OneTime) { return CleanModeLabelInfo[CleanModeDisplayLabel.VacFollowedByMop].mode; } if (setting.isCustomMode) { return CleanModeLabelInfo[CleanModeDisplayLabel.VacuumAndMopEnergySaving].mode; } return undefined; }, BehaviorType.Default); } /** * Create resolver for smart devices. */ export function createSmartModeResolver(configs) { return new ModeResolver(configs, (setting) => { if (setting.isSmartMode) { return CleanModeLabelInfo[CleanModeDisplayLabel.SmartPlan].mode; } if (setting.sequenceType === CleanSequenceType.OneTime) { return CleanModeLabelInfo[CleanModeDisplayLabel.VacFollowedByMop].mode; } if (setting.isCustomMode) { return CleanModeLabelInfo[CleanModeDisplayLabel.VacuumAndMopEnergySaving].mode; } return undefined; }, BehaviorType.Smart); } //# sourceMappingURL=modeResolver.js.map