🔴 Concept | Swiss knife for ical & caldav calendars
cmd/kiwimix | ||
docs | ||
pkg/kiwimix | ||
go.mod | ||
go.sum | ||
Makefile | ||
README.md |
Kiwimix (calendar mixer)
Swiss knife for ical & caldav calendars
Roadmap
Read a calendar
Access to calendar
- ❌ access to public calendar
- ❌ access to private calendar (with credentials)
- ❌ with data from config file with multiple calendars
Download calendar events locally
- ❌ choose source calendar
- ❌ as separate files ?
- ❌ as an in-memory database ?
Merge events
- ❌ merge overlapping events
- ❌ keep reference to source-calendars/parent-events (meta-data? external?)
- ❌ make selected event (source calendar? pattern?) private or anonymous
Upload calendar events remotely
- ❌ associate mixed local with remote target calendar
- ❌ handle event ids & duplicates
Web I
- ❌ split into library + CLI util
- ❌ write an API for the lib
- ❌ add a web frontend
- ❌ add user management & multi-account
Serve calendar locally
- ❌ provide caldav urls for generated calendars
Find free time
kiwimix generate \
--from-date XXX --to-date YYY \
--from-time 9:00 --to-time 19:00 \
| kiwimix substract - agenda.ics \
Find free time for a meeting
kiwimix generate \
--from-date XXX --to-date YYY \
--from-time 9:00 --to-time 19:00 \
> full.ics
kiwimix union alice.ics bob.ics \
> events.ics
kiwimix substract full.ics events.ics \
> free.ics
Rewrite events
kiwimix filter --merge alice.ics \
| kiwimix filter --anonymize - \
V2 (with stack support)
kiwimix
generate --.... # generate X calendar & push
@ read alice # push alice.ics
@ filter --merge # pop alice, filter & push
@ filter --anonymize # pop alice, filter & push
@ read bob # push bob.ics
@ filter --merge # pop bob, filter & push
@ filter --anonymize # pop bob, filter & push
@ union # pop bob, pop alice, compute alice - bob
@ substract # pop bob, pop alice, compute alice - bob
kiwimix filter --anonymize --merge alice.ics
kiwimix load bob.ics ! anonymize ! merge
References
- https://github.com/PuloV/ics-golang => features missing but the code is OK
- https://github.com/apognu/gocal => poorly coded
- https://github.com/samedi/caldav-go
- https://github.com/emersion/go-webdav