aCal's timezone client (service/UpdateTimezones) speaks the obsolete draft-douglass-timezone-service API (?action=list, ?action=get&tzid=…), built from R.string.bedeworkOrgTzUrl = http://www.bedework.org/.well-known/timezone (res/values/unlocalisable_strings.xml).
RFC 7808 (the published standard) is path-based: {context}/capabilities, {context}/zones, {context}/zones/{tzid}. Because aCal uses the old draft, it fails against compliant servers — so timezone data is effectively broken out of the box for anyone who hasn't hand-configured a server.
The current default (bedework) is unusable three ways: expired TLS cert, stale IANA 2020bj data, and a /.well-known/timezone that doesn't redirect to its /tzsvr service. (See comments for the full server survey.)
Tasks
- Convert
UpdateTimezones to RFC 7808:
- list →
GET {context}/zones (response: {"synctoken":…,"timezones":[{tzid,last-modified,etag},…]})
- get →
GET {context}/zones/{tzid} (response: VTIMEZONE)
- read
synctoken from the list response — it currently reads dtstamp, which RFC 7808 does not return.
- treat
tzServerBaseUrl as the service context path; discover it by following the /.well-known/timezone redirect (capability check via {context}/capabilities).
- the existing
timezones[] / tzid / last-modified parsing carries over.
- Choose and verify a working public default server (move to
https://). davical.mcmillan.nz/timezones is a confirmed-working RFC 7808 reference/test target with current 2026 data, but a personal server — pick a suitable public default (public DAViCal-go instance, or self-hosted).
- Consider renaming
bedeworkOrgTzUrl, which will no longer be bedework.
Acceptance criteria
Related: #4 (per-server timezone-service discovery, built on the same RFC 7808 client).
aCal's timezone client (
service/UpdateTimezones) speaks the obsoletedraft-douglass-timezone-serviceAPI (?action=list,?action=get&tzid=…), built fromR.string.bedeworkOrgTzUrl=http://www.bedework.org/.well-known/timezone(res/values/unlocalisable_strings.xml).RFC 7808 (the published standard) is path-based:
{context}/capabilities,{context}/zones,{context}/zones/{tzid}. Because aCal uses the old draft, it fails against compliant servers — so timezone data is effectively broken out of the box for anyone who hasn't hand-configured a server.The current default (bedework) is unusable three ways: expired TLS cert, stale
IANA 2020bjdata, and a/.well-known/timezonethat doesn't redirect to its/tzsvrservice. (See comments for the full server survey.)Tasks
UpdateTimezonesto RFC 7808:GET {context}/zones(response:{"synctoken":…,"timezones":[{tzid,last-modified,etag},…]})GET {context}/zones/{tzid}(response: VTIMEZONE)synctokenfrom the list response — it currently readsdtstamp, which RFC 7808 does not return.tzServerBaseUrlas the service context path; discover it by following the/.well-known/timezoneredirect (capability check via{context}/capabilities).timezones[] / tzid / last-modifiedparsing carries over.https://).davical.mcmillan.nz/timezonesis a confirmed-working RFC 7808 reference/test target with current 2026 data, but a personal server — pick a suitable public default (public DAViCal-go instance, or self-hosted).bedeworkOrgTzUrl, which will no longer be bedework.Acceptance criteria
UpdateTimezonesfetches via RFC 7808 path endpoints and ignores the old?action=form.synctoken; per-zonelast-modifiedchange detection still works.davical.mcmillan.nz/timezones.Related: #4 (per-server timezone-service discovery, built on the same RFC 7808 client).