From 5667bb1b11a7f80dbc4d72deab1f86d8ea30d75e Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Wed, 9 Jan 2013 11:39:29 -0500 Subject: [PATCH] Fix CardDAV collections for OS X Restored the previous behavior: only the personal addressbook is returned and only the first source directory is returned (now sorted by id so you can control which of your addressbook sources you want to return). --- NEWS | 1 + SoObjects/Contacts/SOGoUserFolder+Contacts.m | 6 ++++-- SoObjects/SOGo/WORequest+SOGo.m | 21 +++++++++++++++----- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/NEWS b/NEWS index 67bb062d9..2c7bb5fce 100644 --- a/NEWS +++ b/NEWS @@ -9,6 +9,7 @@ Enhancements Bug fixes - fixed French templates encoding + - fixed CardDAV collections for OS X 2.0.3 (2012-12-06) ------------------ diff --git a/SoObjects/Contacts/SOGoUserFolder+Contacts.m b/SoObjects/Contacts/SOGoUserFolder+Contacts.m index 2244456d4..373bbca6e 100644 --- a/SoObjects/Contacts/SOGoUserFolder+Contacts.m +++ b/SoObjects/Contacts/SOGoUserFolder+Contacts.m @@ -61,7 +61,7 @@ - (NSArray *) davDirectoryGateway { - NSArray *tag, *sources; + NSArray *tag, *sources, *sorted_sources; SOGoContactFolders *parent; SOGoUserManager *um; NSString *domain, *url; @@ -71,9 +71,11 @@ sources = [um addressBookSourceIDsInDomain: domain]; if ([sources count] > 0) { + // Only return the first ID from the sorted list of sources parent = [self privateContacts: @"Contacts" inContext: context]; + sorted_sources = [sources sortedArrayUsingSelector: @selector (localizedCaseInsensitiveCompare:)]; url = [NSString stringWithFormat: @"%@%@/", [parent davURLAsString], - [sources objectAtIndex: 0]]; + [sorted_sources objectAtIndex: 0]]; tag = [NSArray arrayWithObject: [NSArray arrayWithObjects: @"href", @"DAV:", @"D", url, nil]]; diff --git a/SoObjects/SOGo/WORequest+SOGo.m b/SoObjects/SOGo/WORequest+SOGo.m index c9474a96b..9c803a0f1 100644 --- a/SoObjects/SOGo/WORequest+SOGo.m +++ b/SoObjects/SOGo/WORequest+SOGo.m @@ -151,17 +151,23 @@ || [self isAppleDAVWithSubstring: @"CalendarAgent/"]); } - +// For 10.6, we see: +// +// Address%20Book/883 CFNetwork/454.12.4 Darwin/10.8.0 (i386) (iMac11%2C3) // // For 10.7, we see: // +// AddressBook/6.0 (1043) CardDAVPlugin/182 CFNetwork/520.0.13 Mac_OS_X/10.7.1 (11B26) // AddressBook/6.1 (1062) CardDAVPlugin/196 CFNetwork/520.2.5 Mac_OS_X/10.7.2 (11C74) +// AddressBook/6.1 (1083) CardDAVPlugin/200 CFNetwork/520.3.2 Mac_OS_X/10.7.3 (11D50d) // AddressBook/6.1.2 (1090) CardDAVPlugin/200 CFNetwork/520.4.3 Mac_OS_X/10.7.4 (11E53) +// AddressBook/6.1.3 (1091) CardDAVPlugin/200 CFNetwork/520.5.1 Mac_OS_X/10.7.5 (11G56) // // For 10.8, we see: // // Mac OS X/10.8 (12A269) AddressBook/1143 // Mac OS X/10.8.1 (12B19) AddressBook/1143 +// Mac OS X/10.8.2 (12C60) AddressBook/1167 // - (BOOL) isMacOSXAddressBookApp { @@ -170,10 +176,15 @@ cc = [self clientCapabilities]; - b = ([[cc userAgent] rangeOfString: @"CFNetwork"].location != NSNotFound - && ([[cc userAgent] rangeOfString: @"Darwin"].location != NSNotFound - || [[cc userAgent] rangeOfString: @"Mac OS X"].location != NSNotFound) - && [[cc userAgent] rangeOfString: @"AddressBook"].location != NSNotFound); + b = ( + [[cc userAgent] rangeOfString: @"CFNetwork"].location != NSNotFound + && [[cc userAgent] rangeOfString: @"Darwin"].location != NSNotFound + || ( + [[cc userAgent] rangeOfString: @"CFNetwork"].location != NSNotFound + || [[cc userAgent] rangeOfString: @"Mac OS X"].location != NSNotFound + ) + && [[cc userAgent] rangeOfString: @"AddressBook"].location != NSNotFound + ); return b; }