Hi,

Thanks for the continual development of this product and keeping it open 
sourced. Recently I have been testing push delivery onto iOS devices, and run 
into the well-known "Birthday off by one" problem in a different sense.

My understanding is that a contact entry is literally a vCard file in a column 
of a database row, and the birthday property will not have a time associated in 
storage (make sense is broad usage). When an iOS device (specifically an iPad 
running 7.1.x) uses Exchange ActiveSync to "synchronize" the contacts, the 
birthday will always be 1 day late on the device compared to the web-based 
interface. I noticed that Exchange ActiveSync uses a full dateTime spec in 
transit for the birthday field, which I suspect where the issues lie - when I 
uses CardDAV instead, the birthday is correct so as a work around, I could add 
an extra CardDAV account just for the contact sync while everything else uses 
Exchange ActiveSync. The vCard spec does allows for a time specification on the 
birthday field, but if I manually hack it into the database, nothing works 
correctly (Web UI will show current day for the birthday, but double clicking 
it will show the correct day in the Other tab)

The question I have regarding this problem is - what timestamp is being sent 
back for the birthday field in an ActiveSync XML response, or would SOGo sent 
back just the date string without a time which would not have met the spec for 
the birthday property? I haven't been able to find any examples of a working 
birthday field on iOS device when using ActiveSync and I suspect it would need 
some reverse engineering on how iOS uses the time portion of the field in a 
response.

The ActiveSync spec I'm referring to is this one: 
http://msdn.microsoft.com/en-us/library/dd299451%28v=EXCHG.80%29.aspx

Another side note to this - because not all contacts have the year specified in 
the birthday field, and I can't use a year of 0000, I put in 1900 which seems 
to be floor. While this works, I have discovered that iOS device uses the year 
1604 to signify the lack of year instead, and if I hacked that year directly 
into a contact entry using SQL commands, the iOS device will show the birthday 
without year

Chris
-- 
users@sogo.nu
https://inverse.ca/sogo/lists

Reply via email to