[Cosmo-dev] This and Future issues
Bobby Rullo
br at osafoundation.org
Mon Aug 6 14:36:53 PDT 2007
Hi all,
Due to the way that we've decided to implement "This and Future"
changes, there's some tricky issues with these events in the Cosmo UI.
How we Implement This and Future (skip if you already know):
Instead of using something similar to icalendar's THISANDFUTURE
recurrence range, we instead modify the original item's recurrence
UNTIL date to be right before where the new changes will be applied,
and create a brand new event with the changes. So you end up with two
completely different items with different UIDs, and their own
recurrence rules.
The first problem, which we have decided to live with (for now) is
that this requires an extra request to the server - one call to make
the change to the original item, another call to create the new item.
The next problem has to do with modifications. Let's say you have a
daily recurring event that starts on 8/1 and you make a modification
on the 8/5 instance. Then you do a "this and future" at 8/3. What you
will see on 8/5 is two instances - one for the old item, one for the
new. The reason for this is two-fold: The first is that the
modification was not "moved" to the new item ( where "moved" means
making a new modification with a new UID, and deleting the original),
and the second is that according to our recurrence UNTIL date
semantics modifications which occur after the UNTIL date still show
up in recurrence expansions (Chandler does that too).
This is the reason behind bug 10279 (https://
bugzilla.osafoundation.org/show_bug.cgi?id=10279) by the way.
The third and perhaps most insidious problem has to do with another
one of our favorite topics - "Items in Multiple Collections(tm)". If
you have an item in multiple collections do a "this and future" save
on it, the future items will only appear in ONE of the collections.
The other collection will have a recurring series which just
mysteriously trails off.
To solve all of this on the client would involve:
a) making a request to the server for every modification
b) make a new modification for each one fetched
c) delete all the old modifications
d) figure out all the collections that the original item belonged to
and add the new item to those collections.
Pros:
Atom API remains "RESTful" and relatively easy to understand
Cons:
Kind of a lot of work, risky right now, could introduce new bugs.
Potentially lots of requests by the client
Not transactional (i.e. one of these many requests fails, you're
left in a weird state)
To solve this in a server-side way would involve making a new type of
Atom request which, given the original Item, and a new Item:
a) Persist the original item, which would have a new UNTIL date
b) Persist the new Item
c) Add the new item to all collections the original one was in
d) Move all modifications of the original Item which are past the
UNTIL date to the new Item
Pros:
Since it's all in one request, can be made transactional
Less client/server chattiness
Cons:
Sort of RPC-ish looking, makes REST purists wince
Kind of a lot of work, risky right now, could introduce new bugs.
My vote is ultimately with the server-side fix, but I'm wary of doing
too much work on this right now on either side...
Bobby
More information about the cosmo-dev
mailing list