From 60e074a70f2e98c4c82848484cf30d6865875a1e Mon Sep 17 00:00:00 2001 From: Jannik Date: Sat, 11 Oct 2025 16:00:12 +0200 Subject: [PATCH] feat: calendar connections --- messages/en.json | 23 ++- src/lib/components/lnv/Sidebar.svelte | 2 + src/lib/components/lnv/main/Calendar.svelte | 74 ++++++++++ .../components/lnv/sidebar/MainSidebar.svelte | 3 + .../sidebar/settings/CalendarSidebar.svelte | 132 ++++++++++++++++++ .../sidebar/settings/SettingsSidebar.svelte | 10 ++ src/lib/services/CalDAV.ts | 41 ++++++ 7 files changed, 284 insertions(+), 1 deletion(-) create mode 100644 src/lib/components/lnv/main/Calendar.svelte create mode 100644 src/lib/components/lnv/sidebar/settings/CalendarSidebar.svelte create mode 100644 src/lib/services/CalDAV.ts diff --git a/messages/en.json b/messages/en.json index 525c5b0..dcb8249 100644 --- a/messages/en.json +++ b/messages/en.json @@ -78,7 +78,8 @@ "settings": { "header": "Settings", "general": "General", - "map": "Map" + "map": "Map", + "connections": "Connections" }, "info": { "dropped": "Dropped Pin", @@ -148,6 +149,14 @@ "header": "Nearby Points of Interest", "no-poi": "No points of interest found nearby.", "loading": "Loading nearby points of interest..." + }, + "calendar": { + "header": "Calendar", + "add": "Add Calendar", + "connect": "Connect Calendar", + "probing-server": "Probing server...", + "discovering-calendars": "Discovering calendars...", + "choose": "Choose calendars to add:" } }, "unsave": "Unsave", @@ -164,5 +173,17 @@ "routing": { "off-route": "You went off route", "back-on-route": "You are back on route" + }, + "open": "Open", + "submit": "Submit", + "done": "Done", + "delete": "Delete", + "calendar": { + "location": "Location", + "no-location": "No location", + "start": "Start", + "end": "End", + "no-start": "No start", + "no-end": "No end" } } diff --git a/src/lib/components/lnv/Sidebar.svelte b/src/lib/components/lnv/Sidebar.svelte index 5ea4f6c..c5e5d86 100644 --- a/src/lib/components/lnv/Sidebar.svelte +++ b/src/lib/components/lnv/Sidebar.svelte @@ -44,6 +44,7 @@ "onboarding-vehicles": "onboarding/OnboardingVehiclesSidebar", "nearby-poi": "NearbyPOISidebar", licenses: "settings/LicensesSidebar", + calendar: "settings/CalendarSidebar", }; const fullscreen: Record = { @@ -62,6 +63,7 @@ "onboarding-vehicles": true, "nearby-poi": false, licenses: true, + calendar: true, }; let isDragging = false; diff --git a/src/lib/components/lnv/main/Calendar.svelte b/src/lib/components/lnv/main/Calendar.svelte new file mode 100644 index 0000000..c57de5b --- /dev/null +++ b/src/lib/components/lnv/main/Calendar.svelte @@ -0,0 +1,74 @@ + + +
+ {#each events as event ((event.start + "" || "") + (event.end + "" || ""))} + + + {event.summary} + {#if event.description} + {event.description} + {/if} + + +

+ {m["calendar.start"]()}: {event.start?.toLocaleString("de-DE") || m["calendar.no-start"]()} +

+

+ {m["calendar.end"]()}: {event.end?.toLocaleString("de-DE") || m["calendar.no-end"]()} +

+

+ {#if event.location} + {m["calendar.location"]()}: {event.location} + {:else} + {m["calendar.location"]()}: {m["calendar.no-location"]()} + {/if} +

+
+ + + +
+ {/each} +
+ + diff --git a/src/lib/components/lnv/sidebar/MainSidebar.svelte b/src/lib/components/lnv/sidebar/MainSidebar.svelte index 6211a91..8c240af 100644 --- a/src/lib/components/lnv/sidebar/MainSidebar.svelte +++ b/src/lib/components/lnv/sidebar/MainSidebar.svelte @@ -9,6 +9,7 @@ import * as Card from "$lib/components/ui/card"; import SavedRoutes from "../main/SavedRoutes.svelte"; import SavedLocations from "../main/SavedLocations.svelte"; + import Calendar from "../main/Calendar.svelte"; @@ -49,6 +50,8 @@ + + {#if !window.__TAURI__} diff --git a/src/lib/components/lnv/sidebar/settings/CalendarSidebar.svelte b/src/lib/components/lnv/sidebar/settings/CalendarSidebar.svelte new file mode 100644 index 0000000..b58e112 --- /dev/null +++ b/src/lib/components/lnv/sidebar/settings/CalendarSidebar.svelte @@ -0,0 +1,132 @@ + + + + {m["sidebar.calendar.header"]()} + + + + + + {m["sidebar.calendar.connect"]()} + +
+ {#if calDavCalendars} + + + + {#if calDavState} + {calDavState} + {/if} + {/if} + {#if calDavCalendars.length > 0} +

{m["sidebar.calendar.choose"]()}

+
    + {#each calDavCalendars as calendar (calendar.url)} +
  • + +
  • + {/each} +
+ {/if} +
+ + {#if calDavCalendars.length === 0} + + {/if} + + {calDavCalendars.length === 0 ? m.done() : m.cancel()} + + +
+
+ +{#each calendars as calendar (calendar.url)} +
+

{calendar.name}

+ +
+{/each} + + { + calDavDrawerOpen = true; +}} /> \ No newline at end of file diff --git a/src/lib/components/lnv/sidebar/settings/SettingsSidebar.svelte b/src/lib/components/lnv/sidebar/settings/SettingsSidebar.svelte index 7833730..93a8b16 100644 --- a/src/lib/components/lnv/sidebar/settings/SettingsSidebar.svelte +++ b/src/lib/components/lnv/sidebar/settings/SettingsSidebar.svelte @@ -1,5 +1,6 @@