218 lines
5 KiB
TypeScript
218 lines
5 KiB
TypeScript
|
|
|
|
/**
|
|
*/
|
|
async function main(
|
|
args_raw : Array<string>
|
|
) : Promise<void>
|
|
{
|
|
const arg_handler : lib_plankton.args.class_handler = new lib_plankton.args.class_handler({
|
|
"data_path": lib_plankton.args.class_argument.volatile({
|
|
"indicators_long": ["data-path"],
|
|
"indicators_short": ["d"],
|
|
"type": lib_plankton.args.enum_type.string,
|
|
"mode": lib_plankton.args.enum_mode.replace,
|
|
"default": "data.json",
|
|
// "info": null,
|
|
"name": "data-path",
|
|
}),
|
|
"timezone_shift": lib_plankton.args.class_argument.volatile({
|
|
"indicators_long": ["timezone-shift"],
|
|
"indicators_short": ["t"],
|
|
"type": lib_plankton.args.enum_type.integer,
|
|
"mode": lib_plankton.args.enum_mode.replace,
|
|
"default": 0,
|
|
// "info": null,
|
|
"name": "timezone-shift",
|
|
}),
|
|
"calendar_id": lib_plankton.args.class_argument.volatile({
|
|
"indicators_long": ["calendar"],
|
|
"indicators_short": ["c"],
|
|
"type": lib_plankton.args.enum_type.integer,
|
|
"mode": lib_plankton.args.enum_mode.replace,
|
|
"default": 1,
|
|
// "info": null,
|
|
"name": "calendar_id",
|
|
}),
|
|
"view_mode": lib_plankton.args.class_argument.volatile({
|
|
"indicators_long": ["view-moode"],
|
|
"indicators_short": ["m"],
|
|
"type": lib_plankton.args.enum_type.string,
|
|
"mode": lib_plankton.args.enum_mode.replace,
|
|
"default": "table",
|
|
// "info": null,
|
|
"name": "view_mode",
|
|
}),
|
|
"help": lib_plankton.args.class_argument.volatile({
|
|
"indicators_long": ["help"],
|
|
"indicators_short": ["h"],
|
|
"type": lib_plankton.args.enum_type.boolean,
|
|
"mode": lib_plankton.args.enum_mode.replace,
|
|
"default": false,
|
|
// "info": null,
|
|
"name": "help",
|
|
}),
|
|
});
|
|
const args : Record<string, any> = arg_handler.read(lib_plankton.args.enum_environment.cli, args_raw.join(" "));
|
|
|
|
// init
|
|
lib_plankton.log.conf_push(
|
|
[
|
|
// lib_plankton.log.channel_make({"kind": "file", "data": {"threshold": "debug", "path": "/tmp/kalender.log"}}),
|
|
lib_plankton.log.channel_make({"kind": "file", "data": {"threshold": "info", "path": "/dev/stderr"}}),
|
|
// lib_plankton.log.channel_make({"kind": "stdout", "data": {"threshold": "info"}}),
|
|
]
|
|
);
|
|
|
|
// exec
|
|
if (args["help"]) {
|
|
process.stdout.write(
|
|
arg_handler.generate_help(
|
|
{
|
|
"programname": "kalender",
|
|
"description": "Kalender",
|
|
"executable": "kalender",
|
|
}
|
|
)
|
|
+
|
|
"\n"
|
|
);
|
|
}
|
|
else {
|
|
const data : type_datamodel = lib_plankton.call.convey(
|
|
await lib_plankton.file.read(args["data_path"]),
|
|
[
|
|
lib_plankton.json.decode,
|
|
(data_raw : any) => (
|
|
({
|
|
"users": data_raw["users"],
|
|
"calendars": (
|
|
data_raw["calendars"]
|
|
.map(
|
|
(calendar_entry_raw : any) => ({
|
|
"id": calendar_entry_raw["id"],
|
|
"object": (
|
|
((calendar_object_raw) => {
|
|
switch (calendar_object_raw["kind"]) {
|
|
default: {
|
|
return calendar_object_raw;
|
|
break;
|
|
}
|
|
case "concrete": {
|
|
return {
|
|
"kind": "concrete",
|
|
"data": {
|
|
"name": calendar_object_raw["data"]["name"],
|
|
"users": calendar_object_raw["data"]["users"],
|
|
"events": (
|
|
calendar_object_raw["data"]["events"]
|
|
.map(
|
|
(event_raw : any) => ({
|
|
"name": event_raw["name"],
|
|
"begin": event_raw["begin"],
|
|
"end": (
|
|
(event_raw["end"] === null)
|
|
?
|
|
null
|
|
:
|
|
event_raw["end"]
|
|
),
|
|
"description": event_raw["description"],
|
|
})
|
|
)
|
|
),
|
|
},
|
|
};
|
|
break;
|
|
}
|
|
}
|
|
}) (calendar_entry_raw["object"])
|
|
),
|
|
})
|
|
)
|
|
),
|
|
}) as type_datamodel
|
|
),
|
|
]
|
|
);
|
|
let content : string;
|
|
switch (args["view_mode"]) {
|
|
default: {
|
|
content = "";
|
|
throw (new Error("invalid view mode"));
|
|
break;
|
|
}
|
|
case "table": {
|
|
content = await calendar_view_table_html(
|
|
data,
|
|
args.calendar_id,
|
|
{
|
|
"timezone_shift": args["timezone_shift"],
|
|
}
|
|
);
|
|
break;
|
|
}
|
|
case "list": {
|
|
content = await calendar_view_list_html(
|
|
data,
|
|
args.calendar_id,
|
|
{
|
|
"timezone_shift": args["timezone_shift"],
|
|
}
|
|
);
|
|
break;
|
|
}
|
|
}
|
|
const output : string = template_coin(
|
|
"main",
|
|
{
|
|
"content": content,
|
|
}
|
|
);
|
|
process.stdout.write(output);
|
|
}
|
|
return Promise.resolve<void>(undefined);
|
|
}
|
|
|
|
/*
|
|
process.stderr.write(
|
|
JSON.stringify(
|
|
{
|
|
"x1": datetime_from_date_object(
|
|
new Date(Date.now()),
|
|
{
|
|
"timezone_shift": 2,
|
|
}
|
|
),
|
|
"x2": datetime_from_date_object(
|
|
new Date(Date.now()),
|
|
{
|
|
"timezone_shift": 0,
|
|
}
|
|
),
|
|
"x3": pit_from_year_and_week(
|
|
2024,
|
|
37,
|
|
{
|
|
"timezone_shift": 0,
|
|
}
|
|
),
|
|
},
|
|
undefined,
|
|
"\t"
|
|
)
|
|
+
|
|
"\n"
|
|
);
|
|
*/
|
|
(
|
|
main(process.argv.slice(2))
|
|
.then(
|
|
() => {}
|
|
)
|
|
/*
|
|
.catch(
|
|
(error) => {process.stderr.write(String(error) + "\n");}
|
|
)
|
|
*/
|
|
);
|