Fix contacts lookup by UID
When looking for a specific contact UID, we no longer match a pattern that could return multiple results. We search for the exact UID only.pull/72/head
parent
6192322513
commit
8e0849029e
1
NEWS
1
NEWS
|
@ -12,6 +12,7 @@ Bug fixes
|
||||||
- SmartReply improvements for missing body attributes
|
- SmartReply improvements for missing body attributes
|
||||||
- do not use syncKey from cache when davCollectionTag = -1
|
- do not use syncKey from cache when davCollectionTag = -1
|
||||||
- use correct mail attachment elements for EAS 2.5 clients
|
- use correct mail attachment elements for EAS 2.5 clients
|
||||||
|
- fixed contacts lookup by UID in freebusy
|
||||||
|
|
||||||
2.2.16 (2015-02-12)
|
2.2.16 (2015-02-12)
|
||||||
-------------------
|
-------------------
|
||||||
|
|
|
@ -62,17 +62,14 @@
|
||||||
SOGoUserManager *um;
|
SOGoUserManager *um;
|
||||||
NSString *domain;
|
NSString *domain;
|
||||||
NSDictionary *contactInfos;
|
NSDictionary *contactInfos;
|
||||||
NSArray *contacts;
|
|
||||||
|
|
||||||
um = [SOGoUserManager sharedUserManager];
|
um = [SOGoUserManager sharedUserManager];
|
||||||
contactInfos = [um contactInfosForUserWithUIDorEmail: uid];
|
contactInfos = [um contactInfosForUserWithUIDorEmail: uid];
|
||||||
if (contactInfos == nil)
|
if (contactInfos == nil)
|
||||||
{
|
{
|
||||||
|
// Search among global addressbooks
|
||||||
domain = [[context activeUser] domain];
|
domain = [[context activeUser] domain];
|
||||||
[um fetchContactsMatching: uid inDomain: domain];
|
contactInfos = [um fetchContactWithUID: uid inDomain: domain];
|
||||||
contacts = [um fetchContactsMatching: uid inDomain: domain];
|
|
||||||
if ([contacts count] == 1)
|
|
||||||
contactInfos = [contacts lastObject];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* iCal.app compatibility:
|
/* iCal.app compatibility:
|
||||||
|
@ -279,7 +276,6 @@
|
||||||
if ([uid length])
|
if ([uid length])
|
||||||
{
|
{
|
||||||
SOGoUserManager *um;
|
SOGoUserManager *um;
|
||||||
NSArray *contacts;
|
|
||||||
NSString *domain, *email;
|
NSString *domain, *email;
|
||||||
NSDictionary *contact;
|
NSDictionary *contact;
|
||||||
MSExchangeFreeBusy *exchangeFreeBusy;
|
MSExchangeFreeBusy *exchangeFreeBusy;
|
||||||
|
@ -287,10 +283,9 @@
|
||||||
|
|
||||||
um = [SOGoUserManager sharedUserManager];
|
um = [SOGoUserManager sharedUserManager];
|
||||||
domain = [[context activeUser] domain];
|
domain = [[context activeUser] domain];
|
||||||
contacts = [um fetchContactsMatching: uid inDomain: domain];
|
contact = [um fetchContactWithUID: uid inDomain: domain];
|
||||||
if ([contacts count] == 1)
|
if (contact)
|
||||||
{
|
{
|
||||||
contact = [contacts lastObject];
|
|
||||||
email = [contact valueForKey: @"c_email"];
|
email = [contact valueForKey: @"c_email"];
|
||||||
source = [contact objectForKey: @"source"];
|
source = [contact objectForKey: @"source"];
|
||||||
if ([email length]
|
if ([email length]
|
||||||
|
|
|
@ -65,10 +65,13 @@
|
||||||
- (NSDictionary *) contactInfosForUserWithUIDorEmail: (NSString *) uid;
|
- (NSDictionary *) contactInfosForUserWithUIDorEmail: (NSString *) uid;
|
||||||
- (NSDictionary *) contactInfosForUserWithUIDorEmail: (NSString *) uid
|
- (NSDictionary *) contactInfosForUserWithUIDorEmail: (NSString *) uid
|
||||||
inDomain: (NSString *) domain;
|
inDomain: (NSString *) domain;
|
||||||
|
- (NSDictionary *) fetchContactWithUID: (NSString *) uid
|
||||||
|
inDomain: (NSString *) domain;
|
||||||
- (NSArray *) fetchContactsMatching: (NSString *) match
|
- (NSArray *) fetchContactsMatching: (NSString *) match
|
||||||
inDomain: (NSString *) domain;
|
inDomain: (NSString *) domain;
|
||||||
- (NSArray *) fetchUsersMatching: (NSString *) filter
|
- (NSArray *) fetchUsersMatching: (NSString *) filter
|
||||||
inDomain: (NSString *) domain;
|
inDomain: (NSString *) domain;
|
||||||
|
- (NSArray *) _compactAndCompleteContacts: (NSEnumerator *) contacts;
|
||||||
|
|
||||||
- (NSString *) getCNForUID: (NSString *) uid;
|
- (NSString *) getCNForUID: (NSString *) uid;
|
||||||
- (NSString *) getEmailForUID: (NSString *) uid;
|
- (NSString *) getEmailForUID: (NSString *) uid;
|
||||||
|
|
|
@ -915,6 +915,28 @@ static Class NSNullK;
|
||||||
return currentUser;
|
return currentUser;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetch the contact information identified by the specified UID in the global addressbooks.
|
||||||
|
*/
|
||||||
|
- (NSDictionary *) fetchContactWithUID: (NSString *) uid
|
||||||
|
inDomain: (NSString *) domain
|
||||||
|
{
|
||||||
|
NSMutableArray *contacts;
|
||||||
|
NSEnumerator *sources;
|
||||||
|
NSString *sourceID;
|
||||||
|
id currentSource;
|
||||||
|
|
||||||
|
contacts = [NSMutableArray array];
|
||||||
|
sources = [[self addressBookSourceIDsInDomain: domain] objectEnumerator];
|
||||||
|
while ((sourceID = [sources nextObject]))
|
||||||
|
{
|
||||||
|
currentSource = [_sources objectForKey: sourceID];
|
||||||
|
[contacts addObject: [currentSource lookupContactEntry: uid]];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [[self _compactAndCompleteContacts: [contacts objectEnumerator]] lastObject];
|
||||||
|
}
|
||||||
|
|
||||||
- (NSArray *) _compactAndCompleteContacts: (NSEnumerator *) contacts
|
- (NSArray *) _compactAndCompleteContacts: (NSEnumerator *) contacts
|
||||||
{
|
{
|
||||||
NSMutableDictionary *compactContacts, *returnContact;
|
NSMutableDictionary *compactContacts, *returnContact;
|
||||||
|
|
Loading…
Reference in New Issue