Add automated upgrade for menu style & position.

This commit is contained in:
Dermot Duffy
2022-04-23 20:28:54 -07:00
parent f4c95c416f
commit 45f5808f2e
+89 -14
View File
@@ -19,6 +19,8 @@ import {
CONF_LIVE_WEBRTC_CARD, CONF_LIVE_WEBRTC_CARD,
CONF_MENU, CONF_MENU,
CONF_MENU_BUTTON_SIZE, CONF_MENU_BUTTON_SIZE,
CONF_MENU_POSITION,
CONF_MENU_STYLE,
CONF_OVERRIDES, CONF_OVERRIDES,
CONF_VIEW_DEFAULT, CONF_VIEW_DEFAULT,
CONF_VIEW_TIMEOUT_SECONDS, CONF_VIEW_TIMEOUT_SECONDS,
@@ -202,7 +204,7 @@ const toPixelsOrDelete = function (value: unknown): number | null | undefined {
// eslint-disable-next-line @typescript-eslint/no-unused-vars // eslint-disable-next-line @typescript-eslint/no-unused-vars
const deleteProperty = function (_value: unknown): number | null | undefined { const deleteProperty = function (_value: unknown): number | null | undefined {
return null; return null;
} };
/** /**
* Move a property from one location to another. * Move a property from one location to another.
@@ -217,6 +219,7 @@ export const moveConfigValue = (
oldPath: string, oldPath: string,
newPath: string, newPath: string,
transform?: (valueIn: unknown) => unknown, transform?: (valueIn: unknown) => unknown,
keepOriginal?: boolean,
): boolean => { ): boolean => {
const inValue = getConfigValue(obj, oldPath); const inValue = getConfigValue(obj, oldPath);
if (inValue === undefined) { if (inValue === undefined) {
@@ -227,11 +230,16 @@ export const moveConfigValue = (
return false; return false;
} }
if (outValue === null) { if (outValue === null) {
deleteConfigValue(obj, oldPath); if (!keepOriginal) {
return true; deleteConfigValue(obj, oldPath);
return true;
}
return false;
} }
if (outValue !== undefined) { if (outValue !== undefined) {
deleteConfigValue(obj, oldPath); if (!keepOriginal) {
deleteConfigValue(obj, oldPath);
}
setConfigValue(obj, newPath, outValue); setConfigValue(obj, newPath, outValue);
return true; return true;
} }
@@ -259,9 +267,10 @@ const upgradeMoveTo = function (
oldPath: string, oldPath: string,
newPath: string, newPath: string,
transform?: (valueIn: unknown) => unknown, transform?: (valueIn: unknown) => unknown,
keepOriginal?: boolean,
): (obj: RawFrigateCardConfig) => boolean { ): (obj: RawFrigateCardConfig) => boolean {
return function (obj: RawFrigateCardConfig): boolean { return function (obj: RawFrigateCardConfig): boolean {
return moveConfigValue(obj, oldPath, newPath, transform); return moveConfigValue(obj, oldPath, newPath, transform, keepOriginal);
}; };
}; };
@@ -277,13 +286,14 @@ const upgradeMoveToWithOverrides = function (
oldPath: string, oldPath: string,
newPath: string, newPath: string,
transform?: (valueIn: unknown) => unknown, transform?: (valueIn: unknown) => unknown,
keepOriginal?: boolean,
): (obj: RawFrigateCardConfig) => boolean { ): (obj: RawFrigateCardConfig) => boolean {
return function (obj: RawFrigateCardConfig): boolean { return function (obj: RawFrigateCardConfig): boolean {
let modified = upgradeMoveTo(oldPath, newPath, transform)(obj); let modified = upgradeMoveTo(oldPath, newPath, transform, keepOriginal)(obj);
modified = modified =
upgradeArrayValue( upgradeArrayValue(
CONF_OVERRIDES, CONF_OVERRIDES,
upgradeMoveTo(oldPath, newPath, transform), upgradeMoveTo(oldPath, newPath, transform, keepOriginal),
(obj) => obj.overrides as RawFrigateCardConfig | undefined, (obj) => obj.overrides as RawFrigateCardConfig | undefined,
)(obj) || modified; )(obj) || modified;
return modified; return modified;
@@ -333,8 +343,7 @@ const upgradeArrayValue = function (
/** /**
* Upgrade from a singular camera model to multiple. * Upgrade from a singular camera model to multiple.
* @param key A string key. * @returns An upgrade function.
* @returns A safe key.
*/ */
const upgradeToMultipleCameras = (): ((obj: RawFrigateCardConfig) => boolean) => { const upgradeToMultipleCameras = (): ((obj: RawFrigateCardConfig) => boolean) => {
return function (obj: RawFrigateCardConfig): boolean { return function (obj: RawFrigateCardConfig): boolean {
@@ -365,6 +374,74 @@ const upgradeToMultipleCameras = (): ((obj: RawFrigateCardConfig) => boolean) =>
}; };
}; };
/**
* Upgrade from a menu-mode to a style & position.
* @returns An upgrade function.
*/
const upgradeMenuModeToStyleAndPosition = (): ((
obj: RawFrigateCardConfig,
) => boolean) => {
return function (obj: RawFrigateCardConfig): boolean {
let modified = false;
// Change the 'start' of the mode into a style.
modified =
upgradeMoveToWithOverrides(
'menu.mode',
CONF_MENU_STYLE,
(mode: unknown): string | undefined => {
if (typeof mode === 'string') {
const result = mode.match(/^(hover|hidden|overlay|above|below|none)/);
if (result) {
switch (result[1]) {
case 'hover':
case 'hidden':
case 'overlay':
case 'none':
return result[1];
case 'above':
case 'below':
return 'outside';
}
}
}
return undefined;
},
true,
)(obj) || modified;
// Change the 'end' of the mode into a position.
modified =
upgradeMoveToWithOverrides(
'menu.mode',
CONF_MENU_POSITION,
(mode: unknown): string | undefined => {
if (typeof mode === 'string') {
const result = mode.match(/(above|below|left|right|top|bottom)$/);
if (result) {
switch (result[1]) {
case 'left':
case 'right':
case 'top':
case 'bottom':
return result[1];
case 'above':
return 'top';
case 'below':
return 'bottom';
}
}
}
return undefined;
},
true,
)(obj) || modified;
// Delete the old `menu.mode` .
return upgradeWithOverrides('menu.mode', deleteProperty)(obj) || modified;
};
};
/** /**
* Upgrade from a condition on the menu (to allow rendering) to a menu mode * Upgrade from a condition on the menu (to allow rendering) to a menu mode
* override instead. * override instead.
@@ -414,7 +491,7 @@ const UPGRADES = [
upgradeMoveTo('autoplay_clip', 'event_viewer.autoplay_clip'), upgradeMoveTo('autoplay_clip', 'event_viewer.autoplay_clip'),
upgradeMoveTo('controls.nextprev', CONF_EVENT_VIEWER_CONTROLS_NEXT_PREVIOUS_STYLE), upgradeMoveTo('controls.nextprev', CONF_EVENT_VIEWER_CONTROLS_NEXT_PREVIOUS_STYLE),
upgradeMoveTo('controls.nextprev_size', CONF_EVENT_VIEWER_CONTROLS_NEXT_PREVIOUS_SIZE), upgradeMoveTo('controls.nextprev_size', CONF_EVENT_VIEWER_CONTROLS_NEXT_PREVIOUS_SIZE),
upgradeMoveTo('menu_mode', "menu.mode"), upgradeMoveTo('menu_mode', 'menu.mode'),
upgradeMoveTo('menu_buttons', 'menu.buttons'), upgradeMoveTo('menu_buttons', 'menu.buttons'),
upgradeMoveTo('menu_button_size', CONF_MENU_BUTTON_SIZE), upgradeMoveTo('menu_button_size', CONF_MENU_BUTTON_SIZE),
upgradeMoveTo('image', 'image.src', isNotObject), upgradeMoveTo('image', 'image.src', isNotObject),
@@ -460,8 +537,6 @@ const UPGRADES = [
CONF_MENU_BUTTON_SIZE, CONF_MENU_BUTTON_SIZE,
createRangedTransform(toPixelsOrDelete, BUTTON_SIZE_MIN), createRangedTransform(toPixelsOrDelete, BUTTON_SIZE_MIN),
), ),
upgradeWithOverrides( upgradeWithOverrides('event_gallery.min_columns', deleteProperty),
'event_gallery.min_columns', upgradeMenuModeToStyleAndPosition(),
deleteProperty
),
]; ];