[dev] Exposing timeobjects to caldav
Ralf Lang
lang at b1-systems.de
Sun Aug 13 14:03:28 UTC 2017
On 13.08.2017 11:51, Ralf Lang wrote:
> On 04.08.2017 09:27, Ralf Lang wrote:
>> On 03.08.2017 15:58, Jan Schneider wrote:
>>>
>>> Zitat von Ralf Lang <lang at b1-systems.de>:
>>>
>>>> Hallo,
>>>>
>>>> I wanted to expose a certain application's data (basically events)
>>>> to caldav without removing kronolith nor nag. I am a little unsure
>>>> which way to go, here is what I found:
>>>>
>>>>
>>>> * Horde_Dav_Calendar_Backend scans the registry for apps providing
>>>> the "calendar" and "tasks" interfaces. As each interface (at the
>>>> root level) can only be exposed by one application, this limits the
>>>> number of applications providing caldav calendars to two.
>>>>
>>>> * An application must expose $application::davGetCollections() to be
>>>> able to provide arrays describing caldav folders
>>>>
>>>> * An application must expose
>>>> $application::davGetObjects($collection) to be able to provide
>>>> arrays describing caldav events or tasks
>>>>
>>>> * Kronolith does consume timeobjects providers as external calendars
>>>> (listTimeObjects, listTimeObjectCategories) but does not expose them
>>>> to caldav
>>>>
>>>>
>>>> Solutions:
>>>>
>>>> * Make the application owner of the "tasks" api and pull nag's tasks
>>>> , internally to this new interface. No change of horde upstream code
>>>> needed, but very lame.
>>>
>>> Would be a nice workaround, but not a clean solution.
>>>
>>>> * Patching Kronolith is tempting, but I don't think it's wise to
>>>> just expose random timeobjects providers to caldav interface without
>>>> letting the admin or user decide. Kronolith is complicated and a
>>>> prime horde app.
>>>
>>> I still think this is still the way to go. We should expose all
>>> calendar backends to CalDAV, limiting their features where necessary,
>>> like marking them read-only. Remote calendars might be an exception,
>>> since they can be exposed directly to clients using the
>>> "subscriptions" CalDAV extension.
>>> If necessary, we could add a preference to allow users to only select
>>> a number of calendar types (or even individual calendars) to be
>>> exposed for synchronization.
>>>
>>
>> Wow, that's quite some patch. I will consult with Diana if that is
>> something we can easily provide within reasonable time. If this is the
>> case, we will provide a PR.
>
> I've been looking at this.
> For now, all externals will be presented readonly.
>
> I the visible name of the external collection contains the provider name
> and the collection name. For instance, if the provider was whups
> (declared as "Tickets" in the horde menu) and the collection label was
> "My Tickets by Due Date", this would be "Tickets - My Tickets by Due Date".
>
> I tried to sort the external calendars into a subfolder but this proved
> tricky without patching Horde_Dav, which is out of scope for a kronolith
> patch. For now, I stick with a flat user/calendars hierarchy, only
> visibly discerning shares from externals.
>
> Under the application name path (like whups), it seems Horde_Dav just
> invokes browse() to return a tree level. I am not sure but this looks
> like plain webdav instead of caldav.
>
> I think I am on the right track now. It's all settling step by step.
>
As external events pop up out of nowhere, there is no internal or
external object id. For collections, getExternalCollectionId
automagically calls addCollectionMap if missing.
Horde_Dav_Storage::getExternalObjectId however doesn't implicitly add
object maps. This is inconsistent, but can be worked around by checking
for an exception in Application::davGetObjects
--
Ralf Lang
Linux Consultant / Developer
Tel.: +49-170-6381563
Mail: lang at b1-systems.de
B1 Systems GmbH
Osterfeldstraße 7 / 85088 Vohburg / http://www.b1-systems.de
GF: Ralph Dehner / Unternehmenssitz: Vohburg / AG: Ingolstadt,HRB 3537
More information about the dev
mailing list