From 55826b8dde927fbc67e196473b3a6e6df8151676 Mon Sep 17 00:00:00 2001 From: ryan Date: Tue, 22 Apr 2025 17:57:39 +0300 Subject: [PATCH] feat(calendars): make merged calendars with .ics suffix return same calendar as the merged calendar without the .ics suffix --- .gitignore | 3 ++- .qodo/history.sqlite | Bin 98304 -> 0 bytes src/routes.js | 9 +++++++-- 3 files changed, 9 insertions(+), 3 deletions(-) delete mode 100644 .qodo/history.sqlite diff --git a/.gitignore b/.gitignore index ee58d8d..1884f30 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ node_modules/ test/calendar/ calendar/ -logs/ \ No newline at end of file +logs/ +.qodo diff --git a/.qodo/history.sqlite b/.qodo/history.sqlite deleted file mode 100644 index 770235cbe5e15363fba86d163ac555fa2cd100c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98304 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 { - const calendarName = req.params.name; + // Extract the calendar name and remove .ics extension if present + let calendarName = req.params.name; + if (calendarName.endsWith('.ics')) { + calendarName = calendarName.slice(0, -4); + } + const icsFilePath = path.join(MERGED_CALENDARS_DIR, `${calendarName}.ics`); try { @@ -82,4 +87,4 @@ router.get('/calendar/:name', async (req, res) => { } }); -export default router; +export default router; \ No newline at end of file