diff --git a/ChangeLog b/ChangeLog index 74c5ea409..f35c1b7cb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2010-06-30 Ludovic Marcotte + + * When displaying or editing cards, we make sure + we properly fallback to the homeURL field when + a work value is defined but we also have one other + untagged value defined. + 2010-06-30 Francis Lachapelle * UI/MailerUI/UIxMailEditor.m (-localeCode): new method that diff --git a/UI/Contacts/UIxContactEditor.m b/UI/Contacts/UIxContactEditor.m index 23815638c..73b8c8d07 100644 --- a/UI/Contacts/UIxContactEditor.m +++ b/UI/Contacts/UIxContactEditor.m @@ -481,7 +481,26 @@ [self _setSnapshotValue: @"homeURL" to: [[elements objectAtIndex: 0] value: 0]]; } - + // If we do have a "work" URL but no "home" URL but two + // values URLs present, let's add the second one as the home URL + else if ([[snapshot objectForKey: @"workURL"] length] > 0 && + [[snapshot objectForKey: @"homeURL"] length] == 0 && + [elements count] > 1) + { + int i; + + for (i = 0; i < [elements count]; i++) + { + if ([[[elements objectAtIndex: i] value: 0] + caseInsensitiveCompare: [snapshot objectForKey: @"workURL"]] != NSOrderedSame) + { + [self _setSnapshotValue: @"homeURL" + to: [[elements objectAtIndex: i] value: 0]]; + break; + } + } + } + [self _setSnapshotValue: @"calFBURL" to: [[card uniqueChildWithTag: @"FBURL"] value: 0]]; diff --git a/UI/Contacts/UIxContactView.m b/UI/Contacts/UIxContactView.m index 8a079aba7..de7f8c3b1 100644 --- a/UI/Contacts/UIxContactView.m +++ b/UI/Contacts/UIxContactView.m @@ -299,34 +299,86 @@ return [self _cardStringWithLabel: nil value: data]; } +- (NSString *) _formattedURL: (NSString *) url +{ + NSString *data; + + data = nil; + + if (url) + { + if (![[url lowercaseString] rangeOfString: @"://"].length) + url = [NSString stringWithFormat: @"http://%@", url]; + + data = [NSString stringWithFormat: + @"%@", + url, url]; + } + + return [self _cardStringWithLabel: nil value: data]; +} + + - (NSString *) _urlOfType: (NSString *) aType { NSArray *elements; - NSString *data, *url; + NSString *url; elements = [card childrenWithTag: @"url" andAttribute: @"type" havingValue: aType]; if ([elements count] > 0) - { - url = [[elements objectAtIndex: 0] value: 0]; - - if (![[url lowercaseString] rangeOfString: @"://"].length) - url = [NSString stringWithFormat: @"http://%@", url]; - - data = [NSString stringWithFormat: - @"%@", - url, url]; - } + url = [[elements objectAtIndex: 0] value: 0]; else - data = nil; + url = nil; - return [self _cardStringWithLabel: nil value: data]; + return [self _formattedURL: url]; } - (NSString *) homeUrl { - return [self _urlOfType: @"home"]; + NSString *s; + + s = [self _urlOfType: @"home"]; + + if (!s || [s length] == 0) + { + NSArray *elements; + NSString *workURL; + int i; + + elements = [card childrenWithTag: @"url" + andAttribute: @"type" + havingValue: @"work"]; + workURL = nil; + + if ([elements count] > 0) + workURL = [[elements objectAtIndex: 0] value: 0]; + + elements = [card childrenWithTag: @"url"]; + + if (workURL && [elements count] > 1) + { + for (i = 0; i < [elements count]; i++) + { + if ([[[elements objectAtIndex: i] value: 0] caseInsensitiveCompare: workURL] != NSOrderedSame) + { + s = [[elements objectAtIndex: i] value: 0]; + break; + } + } + + } + else if (!workURL && [elements count] > 0) + { + s = [[elements objectAtIndex: 0] value: 0]; + } + + if (s && [s length] > 0) + s = [self _formattedURL: s]; + } + + return s; } - (BOOL) hasWorkInfos