Because we index floating events, changing the system timezone or the
ICUtzinfo.default timezone needs to be done with care. Namely, it can't be
done globally as it is now in chandler as that causes indexes with floating
events to get out of order. Bug 9508 is just the tip of the iceberg.
Instead, the default timezone needs to be set per view and persisted. All
direct uses of ICUtzinfo's static methods and attributes need to be re-routed
though a view.
Since this change is quite big, I created a branch of the chandler tree
(sharing external and interal with trunk) at [1] that implements the following
changes:
- All static accesses to ICUtzinfo such as ICUtzinfo.default,
ICUtzinfo.floating, ICUtzinfo.getInstance(), etc.. are re-routed via a
new view feature, called view.tzinfo, that has the same APIs as
ICUtzinfo's static APIs.
- A view now persists its default timezone.
- view.tzinfo caches UTC, GMT, and floating as view.tzinfo.UTC and
view.tzinfo.GMT. The floating timezone no-longer delegates all its
operations to ICUtzinfo.default but instead wraps view.tzinfo.default.
When view.tzinfo.default is changed, so is what view.tzinfo.floating
wraps.
- Almost (except some unit tests) everywhere ICUtzinfo was used statically,
I changed it to an equivalent view.tzinfo call.
- A lot of code still had to change to accomodate having a view nearby to
enable such view-based timezone access. At this time, all unit tests pass
on the branch. I have yet to try functional tests.
- When view's timezone is changed in one of the following ways
. assigning view.tzinfo.default
. calling view.tzinfo.setDefault
. refreshing to a version with a new timezone
. changing the system timezone and restarting chandler
a callback is invoked with the view and the new timezone as arguments.
This callback, settable via the 'ontzchange' repository and view
init keywords needs to be implemented by the application so that it
invokes the relevant reindexing code to make sure that floating events
actually float instead of being stuck like boat anchors.
Currently, this callback is set in Utility.py and just logs the timezone
change.
- When chandler is started, the UI view's default timezone is set to the
system timezone. This can be overriden with a new --tz command line arg
whose purpose is testing and debugging.
Please, take some time to review this branch, especially once I have
functional tests passing. All unit tests pass already.
I hope to have functional tests passing either tonight or Wednesday.
If no one objects to these changes, I intend to merge this branch into the
trunk on Thursday or Friday.
Andi..
[1] svn+ssh://svn.osafoundation.org/svn/chandler/branches/chandler-tz
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Open Source Applications Foundation "chandler-dev" mailing list
http://lists.osafoundation.org/mailman/listinfo/chandler-dev