Kalendářový middleware

Napsal uživatel Stopka dne

V rámci svého postupného odstřihávání od služeb Googlu jsem přestěhoval své kalendáře do vlastní instance Nextcloud.

Nextcloud je opensource platforma, do které lze instalovat moduly zajišťující různé služby podle potřeby. Cílem Nextcloudu je být plnohodnotnou náhradou souborového úložiště a kancelářských aplikací od Google, Microsoft či Apple.

Jako každá opensource aplikace, má i kalendář v Nextcloudu své mouchy. Na jednu takovou jsem brzy při jeho používání narazil. Asi to bude nestandardním způsobem, jakým si organizujeme kalendáře s přítelkyní. S přítelkyní si totiž navzájem sdílíme své osobní kalendáře. Důvod je zřejmý, náramně usnadňuje plánování. Nemusíme se furt doptávat kdy má kdo čas, kde kdo který víkend bude a podobně. Do téhle chvíle vše funguje i v Nexcloudu skvěle.

Problém nastane, když jeden z nás vytvoří událost, která vyžaduje účast nás obou. Tzn vytvoří událost v kalendáři a označí toho druhého jako účastníka. Především když přítelkyně vytvoří událost a pozve mě do ní. Mě přijde emailem pozvánka, chci ji potvrdit a nic. Tady Nextcloud selže nic neříkajícím chybovým hlášením. Co se stalo?

Problém je v tom, že než přijmu pozvánku, Nextcloud si už dávno synchronizoval události ze sdíleného kalendáře přítelkyně. To znamená, že v kalendářové databázi už je událost se stejným identifikátorem. Když tedy chci přijmout událost z pozvánky, selže to na tom, že už ta událost v některém mém kalendáři existuje.

Je to problém datového návrhu Nextcloudu, kdy všechny události v aplikaci musí být unikátní napříč všemi kalendáři, i těmi nasdílenými jen v režimu čtení. Jen dodám, dokud jsem používal Google Calendar, nebyl problém. Google vede události v jednotlivé kalendářích odděleně.

Co s tím? Chybu jsem nahlásil, ale zřejmě to nemá prioritu aby se tím někdo zajímal a ani já teď nemám prostor studovat jak je Nextcloud naimplementován a zkoušet chybu opravit. Vymyslel jsem tedy drobnou obezličku, která můj problém řeší.

Napsal jsem malý server, který na vyžádání stáhne přítelčin sdílený kalendář, upraví v něm identifikátory a popisky a upravený kalendář vrátí. V Nextcloud kalendáři tedy neodebírám přítelčin kalendář přímo, ale odebírám kalendář pozměněný od tohoto serveru. Události tedy nekolidují s událostmi v pozvánkách, protože z pohledu Nextcloudu jde o úplně jiné nezávislé události. 

Vyřešeno, konečně další služba od Googlu, které se mohu plně zbavit. Kód je opravu pár řádku v typescriptu, běží to v Node.js. Odkaz na repozitář najdete níže.