# Kiwimix (calendar mixer) Swiss knife for ical & caldav calendars ## Roadmap Read a calendar Access to calendar * :x: access to public calendar * :x: access to private calendar (with credentials) * :x: with data from config file with multiple calendars Download calendar events locally * :x: choose source calendar * :x: as separate files ? * :x: as an in-memory database ? Merge events * :x: merge overlapping events * :x: keep reference to source-calendars/parent-events (meta-data? external?) * :x: make selected event (source calendar? pattern?) private or anonymous Upload calendar events remotely * :x: associate mixed local with remote target calendar * :x: handle event ids & duplicates Web I * :x: split into library + CLI util * :x: write an API for the lib * :x: add a web frontend * :x: add user management & multi-account Serve calendar locally * :x: 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