MailExtension APIs for calendar / lightning #7
Labels
api: calendar
This issue is about the calendar API experimeent
proposal
Issue contains a draft API proposal
I've been trying to write a calendar provider implementation using the draft experiment. Here are my experiences so far:
convertItem
is also checking the wrong property; it should beoptions?.returnFormat
instead ofoptions.format
.hashid
, but the storage providers actually expect it to use the item'sid
.propsToItem
.-1
(any),0
(none),1
(single),>1
(many). However the actual values working are0
(none),1
(single),>1
(any/many);-1
is treated as equal to1
.I can write PRs for some of these at some point if you don't get there first.
Lightning needs to identify meetings by their UID. (It was a light-bulb moment when I realised this was how Lightning looked up an invitation in the Inbox and linked it to a event in the calendar.) Now I've historically stored the server-side item id (which is a completely different id) in the metadata so that if the server tells me that an event was deleted I can find the corresponding UID by looking through the calendar's metadata, and also so that if the user changes the event then I can find it on the server from the metadata (obviously the server's id is not a property of the event). I assume you're going to tell me that as an extension I should be using extension storage instead for this, which somewhat defeats the object of supporting metadata. But if I can keep on using metadata, then I need to be able to access the metadata before an item is deleted, and I also need a way to get all of the metadata, so that I can look up the server-side id and find the UID from it. My idea was to return it when doing a
get
on the cached calendar. (I also still wonder what to do with the variables the server gives me to help my stay in sync. Historically I've saved those as calendar properties.)Speaking of UID, I don't know whether it would be less confusing to use
uid
rather thanid
as the name of the identifier of an event?It would be nice if it was possible to synchronise just one calendar. Currently if your extension isn't ready then it misses out for half an hour, or otherwise it forces everything to synchronise.
It's annoying that the API for creating and updating events is subtly different, in that creating events requires you to have the
id
andtype
as members of the properties, while updating passes theid
as a separate parameter and not in the properties. My preference would be to havecreateEvent
,createTask
andupdate
methods, all having parameterscalendar, id, properties
.The dates in items are currently being provided in iCal format. I'm in two minds about this, as I'm used to using ISO date format in JSON, but may also be some advantages to iCal format.
Obviously only a few event and task fields are currently supported, but there are lots of considerations for the future, such as whether the user has requested invitations, and whether the extension supports them or should let Lightning handle them.
Finally (well, so far at least) I'd like to note that I found the cache API awkward. I think it would be more obvious to have the functions which operate on the cache (particularly
clear
, but also the functions for item modification) in thecalendar.provider
namespace rather than faking it using acacheId
.The text was updated successfully, but these errors were encountered: