Bug#781168: Workarounds for Google being evil with .ics feeds
Package: akonadi-server
Version: 1.13.0-2
Severity: normal
Hello,
I have as a calendar source an .ics served by Google, with an address
like this: https://www.google.com/calendar/ical/person%40gmail.com/private-12341234123412341234123412341234/basic.ics
It looks like Google is being evil by breaking all the assumptions that
allow an efficient update of that data feed. Not only they did not
implement neither If-Modified-Since nor a sensible modification date for
their ical server:
Current date/time: Wed, 25 Mar 2015 14:34:24 +0000
Headers for a HEAD request on the ics url:
Content-Type: text/calendar; charset=UTF-8
X-Content-Type-Options: nosniff
Pragma: no-cache
Content-Length: 312906
Alternate-Protocol: 443:quic,p=0.5
Server: GSE
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Date: Wed, 25 Mar 2015 14:34:24 GMT
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
But also the content is significantly different. This is the list of
what I have observed Gmail doing to an unchanged ical feed:
- DTSTAMP of each element is always now
- VTIMEZONE entries appear in random order
- ORGANIZER CN entries randomly change between full name and plus.google.com
user ID
- ATTENDEE entries randomly change between having a CN or not having it
- TRIGGER entries change spontaneously
- CREATED entries change spontaneously
This causes akonadi to download and reprocess the entire ical feed every
single time. In this case we are talking about 300Kb, which is a lot of
ical data, and I end up with akonadi and the database working more often
than not, a hot an noisy laptop, and an unhealthy amount of anger.
I am now working on a smart diff between ical files that should be able
to tell when two .ics files mangled that way are still actually the
same. I'll try to keep you posted.
Thank you,
Enrico
-- System Information:
Debian Release: 8.0
APT prefers testing
APT policy: (500, 'testing')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 3.19.0-trunk-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
Versions of packages akonadi-server depends on:
ii akonadi-backend-postgresql 1.13.0-2
ii libakonadiprotocolinternals1 1.13.0-2
ii libboost-program-options1.55.0 1.55.0+dfsg-3
ii libc6 2.19-15
ii libgcc1 1:4.9.2-10
ii libqt4-dbus 4:4.8.6+git64-g5dc8b2b+dfsg-3
ii libqt4-network 4:4.8.6+git64-g5dc8b2b+dfsg-3
ii libqt4-sql 4:4.8.6+git64-g5dc8b2b+dfsg-3
ii libqt4-xml 4:4.8.6+git64-g5dc8b2b+dfsg-3
ii libqtcore4 4:4.8.6+git64-g5dc8b2b+dfsg-3
ii libqtgui4 4:4.8.6+git64-g5dc8b2b+dfsg-3
ii libstdc++6 4.9.2-10
akonadi-server recommends no packages.
Versions of packages akonadi-server suggests:
pn akonadi-backend-mysql <none>
ii akonadi-backend-postgresql 1.13.0-2
pn akonadi-backend-sqlite <none>
-- no debconf information
Reply to: