/*
|
|
|
|
MIGRATE MODULE
|
|
|
|
Copyright (C) 2016-2019 by Xose Pérez <xose dot perez at gmail dot com>
|
|
|
|
*/
|
|
|
|
#include "settings.h"
|
|
|
|
void _cmpMoveIndexDown(const char * key, int offset = 0) {
|
|
if (hasSetting({key, 0})) return;
|
|
for (unsigned char index = 1; index < SETTINGS_MAX_LIST_COUNT; index++) {
|
|
const unsigned char prev = index - 1;
|
|
if (hasSetting({key, index})) {
|
|
setSetting({key, prev}, getSetting({key, index}).toInt() + offset);
|
|
} else {
|
|
delSetting({key, prev});
|
|
}
|
|
}
|
|
}
|
|
|
|
// Configuration versions
|
|
//
|
|
// 1: based on Embedis, no board definitions
|
|
// 2: based on Embedis, with board definitions 1-based
|
|
// 3: based on Embedis, with board definitions 0-based
|
|
// 4: based on Embedis, no board definitions
|
|
// 5: based on Embedis, updated rfb codes format
|
|
|
|
int migrateVersion() {
|
|
const static auto version = getSetting("cfg", CFG_VERSION);
|
|
if (version == CFG_VERSION) {
|
|
return 0;
|
|
}
|
|
|
|
return version;
|
|
}
|
|
|
|
void migrate() {
|
|
|
|
// We either get 0, when version did not change
|
|
// Or, the version we migrate from
|
|
const auto version = migrateVersion();
|
|
setSetting("cfg", CFG_VERSION);
|
|
|
|
if (!version) return;
|
|
|
|
switch (migrateVersion()) {
|
|
// migrate old version with 1-based indices
|
|
case 2:
|
|
_cmpMoveIndexDown("ledGPIO");
|
|
_cmpMoveIndexDown("ledLogic");
|
|
_cmpMoveIndexDown("btnGPIO");
|
|
_cmpMoveIndexDown("btnRelay", -1);
|
|
_cmpMoveIndexDown("relayGPIO");
|
|
_cmpMoveIndexDown("relayType");
|
|
// fall through
|
|
// get rid / move some existing keys from old migrate.ino
|
|
case 3:
|
|
moveSettings("chGPIO", "ltDimmerGPIO");
|
|
moveSettings("myDIGPIO", "ltMy92DIGPIO");
|
|
moveSettings("myDCKGPIO", "ltMy92DCKGPIO");
|
|
moveSettings("myChips", "ltMy92Chips");
|
|
moveSettings("myModel", "ltMy92Model");
|
|
moveSettings("chLogic", "ltDimmerInv");
|
|
moveSettings("ledLogic", "ledInv");
|
|
delSetting("lightProvider");
|
|
delSetting("relayProvider");
|
|
delSetting("relays");
|
|
delSetting("board");
|
|
// fall through
|
|
default:
|
|
break;
|
|
}
|
|
|
|
saveSettings();
|
|
|
|
}
|