diff options
Diffstat (limited to 'src/engine-eds.cpp')
-rw-r--r-- | src/engine-eds.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/engine-eds.cpp b/src/engine-eds.cpp index 9a54b74..746b9af 100644 --- a/src/engine-eds.cpp +++ b/src/engine-eds.cpp @@ -740,12 +740,18 @@ private: if (in.tzid != nullptr) { const char * tzid {}; - icaltimezone * itz {}; // owned by client + icaltimezone * itz {}; - if (e_cal_client_get_timezone_sync(client, in.tzid, &itz, cancellable.get(), nullptr)) - { + itz = icaltimezone_get_builtin_timezone_from_tzid(in.tzid); // usually works + + if (itz == nullptr) // fallback + itz = icaltimezone_get_builtin_timezone(in.tzid); + + if (itz == nullptr) // ok, I give up... make a round trip on the bus to ask EDS to look it up in VTIMEZONES + e_cal_client_get_timezone_sync(client, in.tzid, &itz, cancellable.get(), nullptr); + + if (itz != nullptr) tzid = icaltimezone_get_location(itz); - } gtz = g_time_zone_new(tzid); g_debug("%s eccdt.tzid -> offset is %d", G_STRLOC, in.tzid, (int)g_time_zone_get_offset(gtz,0)); |