matterbridge-roborock-vacuum-plugin
Version:
Matterbridge Roborock Vacuum Plugin
57 lines • 2.5 kB
JavaScript
import { DeviceModel } from '../../../roborockCommunication/models/index.js';
import { CleaningModeHandler } from '../handlers/cleaningModeHandler.js';
import { CustomCleanModeHandler } from '../handlers/customCleanModeHandler.js';
import { DefaultCleanModeHandler } from '../handlers/defaultCleanModeHandler.js';
import { GoVacationHandler } from '../handlers/goVacationHandler.js';
import { PresetCleanModeHandler } from '../handlers/presetCleanModeHandler.js';
import { SmartPlanHandler } from '../handlers/smartPlanHandler.js';
import { CleanModeDisplayLabel, CleanModeLabelInfo, getModeDisplayMap, getModeSettingsMap } from './cleanModeConfig.js';
import { getAllModesForDevice, hasSmartPlan } from './deviceCapabilityRegistry.js';
import { ModeHandlerRegistry } from './modeHandlerRegistry.js';
import { baseRunModeConfigs } from './runModeConfig.js';
const goVacationEntry = {
[CleanModeLabelInfo[CleanModeDisplayLabel.GoVacation].mode]: CleanModeLabelInfo[CleanModeDisplayLabel.GoVacation].label,
};
const configCache = new Map();
/**
* Build a BehaviorConfig for the given device model.
* Extra modes are resolved from the device capability registry.
* Results are cached per model for efficiency.
*/
export function buildBehaviorConfig(model) {
if (configCache.has(model)) {
return configCache.get(model);
}
const withSmartPlan = hasSmartPlan(model);
const allModes = getAllModesForDevice(model);
const registry = new ModeHandlerRegistry().register(new CleaningModeHandler()).register(new GoVacationHandler());
if (withSmartPlan) {
registry.register(new SmartPlanHandler());
}
registry
.register(new DefaultCleanModeHandler())
.register(new PresetCleanModeHandler())
.register(new CustomCleanModeHandler());
const config = {
name: withSmartPlan ? 'BehaviorSmart' : 'DefaultBehavior',
cleanModes: { ...getModeDisplayMap(allModes), ...goVacationEntry },
cleanSettings: getModeSettingsMap(allModes),
runModeConfigs: baseRunModeConfigs,
registry,
};
configCache.set(model, config);
return config;
}
/**
* @deprecated Use buildBehaviorConfig(model) instead.
*/
export function createDefaultBehaviorConfig() {
return buildBehaviorConfig('');
}
/**
* @deprecated Use buildBehaviorConfig(model) instead.
*/
export function createSmartBehaviorConfig() {
return buildBehaviorConfig(DeviceModel.QREVO_EDGE_5V1);
}
//# sourceMappingURL=behaviorConfig.js.map