core/source/logic/notification_kinds/libnotify.ts
Christian Fraß 27d6b4eb16 [int]
2023-08-03 08:34:33 +02:00

127 lines
2.1 KiB
TypeScript

namespace _heimdall.notification_kinds.libnotify
{
/**
*/
function parameters_schema(
) : _heimdall.helpers.json_schema.type_schema
{
return {
"type": "object",
"additionalProperties": false,
"properties": {
"icon": {
"type": "string"
}
},
"required": [
]
};
}
/**
*/
function normalize_order_node(
node : any
) : any
{
return Object.assign(
{
"icon": "/usr/local/share/icons/heimdall.png",
},
node
);
}
/**
*/
async function notify(
parameters : any,
name : string,
check : type_check,
state : type_item_state,
info : any
) : Promise<void>
{
const condition_translate = function (condition : _heimdall.enum_condition): string
{
switch (condition) {
case _heimdall.enum_condition.unknown: return "normal";
case _heimdall.enum_condition.ok: return "low";
case _heimdall.enum_condition.concerning: return "normal";
case _heimdall.enum_condition.critical: return "critical";
}
};
let parts : Array<string> = [];
parts.push(
"notify-send"
);
// app name
parts.push(
lib_plankton.string.coin(
"--app-name={{app_name}}",
{
"app_name": "heimdall",
}
)
)
// urgency
parts.push(
lib_plankton.string.coin(
"--urgency={{urgency}}",
{
"urgency": condition_translate(state.condition),
}
)
)
// icon
if (! ("icon" in parameters)) {
// do nothing
}
else {
parts.push(
lib_plankton.string.coin(
"--icon={{icon}}",
{
"icon": parameters.icon,
}
)
);
}
// summary
parts.push(
lib_plankton.string.coin(
"{{condition}} | {{title}}",
{
"title": check.name,
"condition": _heimdall.condition_show(state.condition).toUpperCase(),
}
)
);
// body
parts.push(
JSON.stringify(info)
);
await _heimdall.helpers.misc.shell_exec(parts[0], parts.slice(1));
return Promise.resolve<void>(undefined);
}
/**
*/
register_implementation(
"libnotify",
{
"parameters_schema": parameters_schema,
"normalize_order_node": normalize_order_node,
"notify": notify,
}
);
}