aboutsummaryrefslogtreecommitdiff
path: root/src/engine-eds.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine-eds.cpp')
-rw-r--r--src/engine-eds.cpp14
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));