Changeset 24385
- Timestamp:
- 07/16/2008 07:37:01 PM (6 months ago)
- Files:
-
- trunk/Adium.xcodeproj/project.pbxproj (modified) (7 diffs)
- trunk/Frameworks/Adium Framework/Source/AIAbstractListController.m (modified) (1 diff)
- trunk/Plugins/Purple Service/AIMobileMeService.h (added)
- trunk/Plugins/Purple Service/AIMobileMeService.m (added)
- trunk/Plugins/Purple Service/AIPurpleMobileMeAccount.h (added)
- trunk/Plugins/Purple Service/AIPurpleMobileMeAccount.m (added)
- trunk/Plugins/Purple Service/AIPurpleMobileMeAccountViewController.h (added)
- trunk/Plugins/Purple Service/AIPurpleMobileMeAccountViewController.m (added)
- trunk/Plugins/Purple Service/CBPurpleOscarAccount.m (modified) (1 diff)
- trunk/Plugins/Purple Service/CBPurpleServicePlugin.m (modified) (1 diff)
- trunk/Plugins/Purple Service/ESDotMacService.h (modified) (1 diff)
- trunk/Plugins/Purple Service/ESDotMacService.m (modified) (1 diff)
- trunk/Plugins/Purple Service/ESPurpleDotMacAccount.h (modified) (1 diff)
- trunk/Plugins/Purple Service/ESPurpleDotMacAccount.m (modified) (1 diff)
- trunk/Plugins/Purple Service/ESPurpleDotMacAccountViewController.h (modified) (1 diff)
- trunk/Plugins/Purple Service/MobileMe-large.png (added)
- trunk/Plugins/Purple Service/MobileMe-small.png (added)
- trunk/Plugins/Purple Service/PurpleDefaultsMobileMe.plist (added)
- trunk/Plugins/Purple Service/PurpleServices.h (modified) (1 diff)
- trunk/Source/AIAbstractLogViewerWindowController.m (modified) (2 diffs)
- trunk/Source/AIServiceMenu.m (modified) (1 diff)
- trunk/Source/BGICImportController.m (modified) (1 diff)
- trunk/Source/ESAddressBookIntegrationPlugin.m (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/Adium.xcodeproj/project.pbxproj
r24300 r24385 1024 1024 34EA6B320A62F3420053DFEB /* AIApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 34EA6B300A62F3420053DFEB /* AIApplication.m */; }; 1025 1025 34EBB2C30DCA8DE500B4CB6E /* AISearchFieldCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 34EBB2C20DCA8DE500B4CB6E /* AISearchFieldCell.m */; }; 1026 34EF904B0E2EB17B003E5DC7 /* AIMobileMeService.h in Headers */ = {isa = PBXBuildFile; fileRef = 34EF90490E2EB17B003E5DC7 /* AIMobileMeService.h */; }; 1027 34EF904C0E2EB17B003E5DC7 /* AIMobileMeService.m in Sources */ = {isa = PBXBuildFile; fileRef = 34EF904A0E2EB17B003E5DC7 /* AIMobileMeService.m */; }; 1028 34EF90570E2EB1A8003E5DC7 /* AIPurpleMobileMeAccountViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 34EF90550E2EB1A8003E5DC7 /* AIPurpleMobileMeAccountViewController.h */; }; 1029 34EF90580E2EB1A8003E5DC7 /* AIPurpleMobileMeAccountViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34EF90560E2EB1A8003E5DC7 /* AIPurpleMobileMeAccountViewController.m */; }; 1030 34EF905D0E2EB1C5003E5DC7 /* AIPurpleMobileMeAccount.h in Headers */ = {isa = PBXBuildFile; fileRef = 34EF905B0E2EB1C5003E5DC7 /* AIPurpleMobileMeAccount.h */; }; 1031 34EF905E0E2EB1C5003E5DC7 /* AIPurpleMobileMeAccount.m in Sources */ = {isa = PBXBuildFile; fileRef = 34EF905C0E2EB1C5003E5DC7 /* AIPurpleMobileMeAccount.m */; }; 1032 34EF99AA0E2EB35A003E5DC7 /* PurpleDefaultsMobileMe.plist in Resources */ = {isa = PBXBuildFile; fileRef = 34EF99A90E2EB35A003E5DC7 /* PurpleDefaultsMobileMe.plist */; }; 1033 34EF9A320E2EB637003E5DC7 /* MobileMe-large.png in Resources */ = {isa = PBXBuildFile; fileRef = 34EF9A300E2EB637003E5DC7 /* MobileMe-large.png */; }; 1034 34EF9A330E2EB637003E5DC7 /* MobileMe-small.png in Resources */ = {isa = PBXBuildFile; fileRef = 34EF9A310E2EB637003E5DC7 /* MobileMe-small.png */; }; 1026 1035 34F144430BA8FF3C000473DE /* EmoticonNames.strings in Resources */ = {isa = PBXBuildFile; fileRef = 34F144420BA8FF3B000473DE /* EmoticonNames.strings */; }; 1027 1036 34F191DC09BA5F43001D6BE2 /* irc.png in Resources */ = {isa = PBXBuildFile; fileRef = 34F191DB09BA5F43001D6BE2 /* irc.png */; }; … … 3661 3670 34EBB2C10DCA8DE400B4CB6E /* AISearchFieldCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AISearchFieldCell.h; path = Source/AISearchFieldCell.h; sourceTree = "<group>"; }; 3662 3671 34EBB2C20DCA8DE500B4CB6E /* AISearchFieldCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AISearchFieldCell.m; path = Source/AISearchFieldCell.m; sourceTree = "<group>"; }; 3672 34EF90490E2EB17B003E5DC7 /* AIMobileMeService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIMobileMeService.h; path = "Plugins/Purple Service/AIMobileMeService.h"; sourceTree = "<group>"; }; 3673 34EF904A0E2EB17B003E5DC7 /* AIMobileMeService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIMobileMeService.m; path = "Plugins/Purple Service/AIMobileMeService.m"; sourceTree = "<group>"; }; 3674 34EF90550E2EB1A8003E5DC7 /* AIPurpleMobileMeAccountViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIPurpleMobileMeAccountViewController.h; path = "Plugins/Purple Service/AIPurpleMobileMeAccountViewController.h"; sourceTree = "<group>"; }; 3675 34EF90560E2EB1A8003E5DC7 /* AIPurpleMobileMeAccountViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIPurpleMobileMeAccountViewController.m; path = "Plugins/Purple Service/AIPurpleMobileMeAccountViewController.m"; sourceTree = "<group>"; }; 3676 34EF905B0E2EB1C5003E5DC7 /* AIPurpleMobileMeAccount.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIPurpleMobileMeAccount.h; path = "Plugins/Purple Service/AIPurpleMobileMeAccount.h"; sourceTree = "<group>"; }; 3677 34EF905C0E2EB1C5003E5DC7 /* AIPurpleMobileMeAccount.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIPurpleMobileMeAccount.m; path = "Plugins/Purple Service/AIPurpleMobileMeAccount.m"; sourceTree = "<group>"; }; 3678 34EF99A90E2EB35A003E5DC7 /* PurpleDefaultsMobileMe.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = PurpleDefaultsMobileMe.plist; path = "Plugins/Purple Service/PurpleDefaultsMobileMe.plist"; sourceTree = "<group>"; }; 3679 34EF9A300E2EB637003E5DC7 /* MobileMe-large.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "MobileMe-large.png"; path = "Plugins/Purple Service/MobileMe-large.png"; sourceTree = "<group>"; }; 3680 34EF9A310E2EB637003E5DC7 /* MobileMe-small.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "MobileMe-small.png"; path = "Plugins/Purple Service/MobileMe-small.png"; sourceTree = "<group>"; }; 3663 3681 34F101E307342B4D00890D3B /* ESPurpleDotMacAccount.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = ESPurpleDotMacAccount.m; path = "Plugins/Purple Service/ESPurpleDotMacAccount.m"; sourceTree = "<group>"; }; 3664 3682 34F101E407342B4D00890D3B /* ESPurpleDotMacAccount.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ESPurpleDotMacAccount.h; path = "Plugins/Purple Service/ESPurpleDotMacAccount.h"; sourceTree = "<group>"; }; … … 6185 6203 sourceTree = "<group>"; 6186 6204 }; 6205 34EF90440E2EB152003E5DC7 /* MobileMe */ = { 6206 isa = PBXGroup; 6207 children = ( 6208 34EF90490E2EB17B003E5DC7 /* AIMobileMeService.h */, 6209 34EF904A0E2EB17B003E5DC7 /* AIMobileMeService.m */, 6210 34EF905B0E2EB1C5003E5DC7 /* AIPurpleMobileMeAccount.h */, 6211 34EF905C0E2EB1C5003E5DC7 /* AIPurpleMobileMeAccount.m */, 6212 34EF90550E2EB1A8003E5DC7 /* AIPurpleMobileMeAccountViewController.h */, 6213 34EF90560E2EB1A8003E5DC7 /* AIPurpleMobileMeAccountViewController.m */, 6214 34EF9A300E2EB637003E5DC7 /* MobileMe-large.png */, 6215 34EF9A310E2EB637003E5DC7 /* MobileMe-small.png */, 6216 34EF99A90E2EB35A003E5DC7 /* PurpleDefaultsMobileMe.plist */, 6217 ); 6218 name = MobileMe; 6219 sourceTree = "<group>"; 6220 }; 6187 6221 34F52BD506E2B22800887BE2 /* ICQ */ = { 6188 6222 isa = PBXGroup; … … 6656 6690 isa = PBXGroup; 6657 6691 children = ( 6692 34EF90440E2EB152003E5DC7 /* MobileMe */, 6658 6693 4B387DE10719931C004DE713 /* .Mac */, 6659 6694 34E0EB8D07CD349200A82198 /* ESPurpleAIMAccount.h */, … … 8065 8100 34B3247A0CE4CCF400158D5F /* PurpleAccountViewController.h in Headers */, 8066 8101 34FF12120DA52FB10054A872 /* AIPurpleGTalkJoinChatViewController.h in Headers */, 8102 34EF904B0E2EB17B003E5DC7 /* AIMobileMeService.h in Headers */, 8103 34EF90570E2EB1A8003E5DC7 /* AIPurpleMobileMeAccountViewController.h in Headers */, 8104 34EF905D0E2EB1C5003E5DC7 /* AIPurpleMobileMeAccount.h in Headers */, 8067 8105 ); 8068 8106 runOnlyForDeploymentPostprocessing = 0; … … 8840 8878 343BB63C0C96DC1100506F9B /* MySpace-large.png in Resources */, 8841 8879 34F5207E0CC6F821008D9135 /* PurpleQQAccountView.nib in Resources */, 8880 34EF99AA0E2EB35A003E5DC7 /* PurpleDefaultsMobileMe.plist in Resources */, 8881 34EF9A320E2EB637003E5DC7 /* MobileMe-large.png in Resources */, 8882 34EF9A330E2EB637003E5DC7 /* MobileMe-small.png in Resources */, 8842 8883 ); 8843 8884 runOnlyForDeploymentPostprocessing = 0; … … 9407 9448 34B3247B0CE4CCF400158D5F /* PurpleAccountViewController.m in Sources */, 9408 9449 34FF12130DA52FB10054A872 /* AIPurpleGTalkJoinChatViewController.m in Sources */, 9450 34EF904C0E2EB17B003E5DC7 /* AIMobileMeService.m in Sources */, 9451 34EF90580E2EB1A8003E5DC7 /* AIPurpleMobileMeAccountViewController.m in Sources */, 9452 34EF905E0E2EB1C5003E5DC7 /* AIPurpleMobileMeAccount.m in Sources */, 9409 9453 ); 9410 9454 runOnlyForDeploymentPostprocessing = 0; trunk/Frameworks/Adium Framework/Source/AIAbstractListController.m
r24091 r24385 800 800 @"aim://goim?screenname=%@", @"AIM", 801 801 @"aim://goim?screenname=%@", @"Mac", //.Mac 802 @"aim://goim?screenname=%@", @"MobileMe", 802 803 @"xmpp:%@?message", @"Jabber", 803 804 @"xmpp:%@?message", @"GTalk", trunk/Plugins/Purple Service/CBPurpleOscarAccount.m
r24368 r24385 154 154 if ([contactUID hasSuffix:@"@mac.com"]) { 155 155 contactServiceID = @"libpurple-oscar-Mac"; 156 } else if ([contactUID hasSuffix:@"@me.com"]) { 157 contactServiceID = @"libpurple-oscar-MobileMe"; 156 158 } else if (firstCharacter && (firstCharacter >= '0' && firstCharacter <= '9')) { 157 159 contactServiceID = @"libpurple-oscar-ICQ"; trunk/Plugins/Purple Service/CBPurpleServicePlugin.m
r24321 r24385 41 41 [ESAIMService registerService]; 42 42 [ESDotMacService registerService]; 43 [AIMobileMeService registerService]; 43 44 [ESICQService registerService]; 44 45 [ESGaduGaduService registerService]; trunk/Plugins/Purple Service/ESDotMacService.h
r9760 r24385 15 15 */ 16 16 17 #import " ESAIMService.h"17 #import "AIMobileMeService.h" 18 18 19 @interface ESDotMacService : ESAIMService {19 @interface ESDotMacService : AIMobileMeService { 20 20 21 21 } trunk/Plugins/Purple Service/ESDotMacService.m
r22090 r24385 44 44 return @".Mac"; 45 45 } 46 - (NSCharacterSet *)ignoredCharacters{ 47 return [NSCharacterSet characterSetWithCharactersInString:@" "]; 48 } 49 - (BOOL)caseSensitive{ 50 return NO; 51 } 52 - (AIServiceImportance)serviceImportance{ 53 return AIServiceSecondary; 54 } 55 - (NSString *)userNameLabel{ 56 return AILocalizedString(@"Member Name",nil); //.Mac Member Name 46 47 - (BOOL)isHidden 48 { 49 return YES; 57 50 } 58 51 59 52 /*! 60 * @brief Normalize a UID53 * @brief Default icon 61 54 * 62 * Add @mac.com to the end of a dotMac contact if it's not already present but should be. super's implementation will make the UID 63 * lowercase, since [self caseSensitive] returns NO, so we can use -[NSString hasSuffix:] to check for the string. 55 * Service Icon packs should always include images for all the built-in Adium services. This method allows external 56 * service plugins to specify an image which will be used when the service icon pack does not specify one. It will 57 * also be useful if new services are added to Adium itself after a significant number of Service Icon packs exist 58 * which do not yet have an image for this service. If the active Service Icon pack provides an image for this service, 59 * this method will not be called. 60 * 61 * The service should _not_ cache this icon internally; multiple calls should return unique NSImage objects. 62 * 63 * @param iconType The AIServiceIconType of the icon to return. This specifies the desired size of the icon. 64 * @return NSImage to use for this service by default 64 65 */ 65 - (NSString *)normalizeUID:(NSString *)inUID removeIgnoredCharacters:(BOOL)removeIgnored 66 { 67 NSString *normalizedUID = [super normalizeUID:inUID removeIgnoredCharacters:removeIgnored]; 68 69 #warning Right now, this code would mean that the New Message prompt for a .Mac account can only message .Mac users 70 //XXX ToDo: Rewrite the New Message prompt to be service-oriented rather than account-oriented such that this isn't a problem 71 #if 0 72 char firstCharacter; 73 74 if ([filteredUID length]) { 75 /* Add @mac.com to the end if: 76 * 1. It is not yet present AND 77 * 2. The first character is neither a number nor a '+' (which would indicate a mobile contact) 78 */ 79 if ((![filteredUID hasSuffix:@"@mac.com"]) && 80 !((firstCharacter = [filteredUID characterAtIndex:0]) && 81 ((firstCharacter >= '0' && firstCharacter <= '9') || (firstCharacter == '+')))) 82 { 83 AILog(@"ESDotMacService: Filtered %@ to %@@mac.com",filteredUID,filteredUID); 84 filteredUID = [filteredUID stringByAppendingString:@"@mac.com"]; 85 } 86 } 87 #endif 88 89 return normalizedUID; 66 - (NSImage *)defaultServiceIconOfType:(AIServiceIconType)iconType 67 { 68 //All icon packs should have a .Mac icon 69 return nil; 90 70 } 91 71 trunk/Plugins/Purple Service/ESPurpleDotMacAccount.h
r19332 r24385 15 15 */ 16 16 17 #import " ESPurpleAIMAccount.h"17 #import "AIPurpleMobileMeAccount.h" 18 18 19 @interface ESPurpleDotMacAccount : ESPurpleAIMAccount {19 @interface ESPurpleDotMacAccount : AIPurpleMobileMeAccount { 20 20 21 21 } trunk/Plugins/Purple Service/ESPurpleDotMacAccount.m
r19332 r24385 33 33 } 34 34 35 /*!36 * @brief Set the spacing and capitilization of our formatted UID serverside (from CBPurpleOscarAccount)37 *38 * CBPurpleOscarAccount calls this to perform spacing/capitilization setting serverside. This is not supported39 * for .Mac accounts and will throw a SNAC error if attempted. Override the method to perform no action for .Mac.40 */41 - (void)setFormattedUID {};42 43 /*!44 * @brief A formatted UID which may include additional necessary identifying information.45 *46 * For example, an AIM account (tekjew) and a .Mac account (tekjew@mac.com, entered only as tekjew) may appear identical47 * without service information (tekjew). The explicit formatted UID is therefore tekjew@mac.com48 */49 - (NSString *)explicitFormattedUID50 {51 return [NSString stringWithUTF8String:[self purpleAccountName]];52 }53 54 35 @end trunk/Plugins/Purple Service/ESPurpleDotMacAccountViewController.h
r19332 r24385 15 15 */ 16 16 17 #import "AIPurple OscarAccountViewController.h"17 #import "AIPurpleMobileMeAccountViewController.h" 18 18 19 @interface ESPurpleDotMacAccountViewController : AIPurple OscarAccountViewController {19 @interface ESPurpleDotMacAccountViewController : AIPurpleMobileMeAccountViewController { 20 20 21 21 } trunk/Plugins/Purple Service/PurpleServices.h
r20982 r24385 17 17 #import "ESAIMService.h" 18 18 #import "ESDotMacService.h" 19 #import "AIMobileMeService.h" 19 20 #import "ESICQService.h" 20 21 #import "ESGaduGaduService.h" trunk/Source/AIAbstractLogViewerWindowController.m
r24304 r24385 2753 2753 } else if ([serviceClass isEqualToString:@"AIM"] || 2754 2754 [serviceClass isEqualToString:@"ICQ"] || 2755 [serviceClass isEqualToString:@"Mac"]) { 2755 [serviceClass isEqualToString:@"Mac"] || 2756 [serviceClass isEqualToString:@"MobileMe"]) { 2756 2757 const char firstCharacter = ([contactUID length] ? [contactUID characterAtIndex:0] : '\0'); 2757 2758 … … 2759 2760 if ([contactUID hasSuffix:@"@mac.com"]) { 2760 2761 serviceClass = @"Mac"; 2762 } else if ([contactUID hasSuffix:@"@me.com"]) { 2763 serviceClass = @"MobileMe"; 2761 2764 } else if (firstCharacter && (firstCharacter >= '0' && firstCharacter <= '9')) { 2762 2765 serviceClass = @"ICQ"; trunk/Source/AIServiceMenu.m
r24137 r24385 74 74 while ((service = [enumerator nextObject])) { 75 75 if (([service serviceImportance] == importance) && 76 ![service isHidden] && 76 77 (!targetRespondsToShouldIncludeService || [target serviceMenuShouldIncludeService:service])) { 77 78 NSString *description = (longDescription ? trunk/Source/BGICImportController.m
r22059 r24385 118 118 ESDotMacService *macService = nil; 119 119 ESJabberService *jabberService = nil; 120 120 121 #warning iChat Import needs to be updated for MobileMe 121 122 while ((service = [serviceEnum nextObject])) { 122 123 if ([[service serviceID] isEqual:@"AIM"]) 123 124 aimService = (ESAIMService *)service; 124 if ([[service serviceID] isEqual:@"Mac"])125 else if ([[service serviceID] isEqual:@"Mac"]) 125 126 macService = (ESDotMacService *)service; 126 if ([[service serviceID] isEqual:@"Jabber"])127 else if ([[service serviceID] isEqual:@"Jabber"]) 127 128 jabberService = (ESJabberService *)service; 128 if ([[service serviceID] isEqual:@"Bonjour"])129 else if ([[service serviceID] isEqual:@"Bonjour"]) 129 130 bonjourService = (AWBonjourService *)service; 130 131 } trunk/Source/ESAddressBookIntegrationPlugin.m
r24306 r24385 607 607 } else if ([serviceID isEqualToString:@"Mac"]) { 608 608 result = kABAIMInstantProperty; 609 } else if ([serviceID isEqualToString:@"MobileMe"]) { 610 result = kABAIMInstantProperty; 609 611 } 610 612 } … … 701 703 NSDictionary *dict; 702 704 703 if ([serviceID isEqualToString:@"Mac"]) { 705 if ([serviceID isEqualToString:@"Mac"] || 706 [serviceID isEqualToString:@"MobileMe"]) { 704 707 dict = [addressBookDict objectForKey:@"AIM"]; 705 708 … … 755 758 //Add them to our set 756 759 [contactSet unionSet:contacts]; 757 } 758 759 if ([email hasSuffix:@"gmail.com"] || [email hasSuffix:@"googlemail.com"]) { 760 761 } else if ([email hasSuffix:@"me.com"]) { 762 //Retrieve all appropriate contacts 763 NSSet *contacts = [[adium contactController] allContactsWithService:[[adium accountController] firstServiceWithServiceID:@"MobileMe"] 764 UID:email 765 existingOnly:YES]; 766 767 //Add them to our set 768 [contactSet unionSet:contacts]; 769 770 } else if ([email hasSuffix:@"gmail.com"] || [email hasSuffix:@"googlemail.com"]) { 760 771 //Retrieve all appropriate contacts 761 772 NSSet *contacts = [[adium contactController] allContactsWithService:[[adium accountController] firstServiceWithServiceID:@"GTalk"] … … 765 776 //Add them to our set 766 777 [contactSet unionSet:contacts]; 767 } 768 769 if ([email hasSuffix:@"hotmail.com"]) { 778 } else if ([email hasSuffix:@"hotmail.com"]) { 770 779 //Retrieve all appropriate contacts 771 780 NSSet *contacts = [[adium contactController] allContactsWithService:[[adium accountController] firstServiceWithServiceID:@"MSN"] … … 1017 1026 if ([UID hasSuffix:@"@mac.com"]) { 1018 1027 serviceID = @"Mac"; 1028 } else if ([UID hasSuffix:@"@me.com"]) { 1029 serviceID = @"MobileMe"; 1019 1030 } else if (firstCharacter >= '0' && firstCharacter <= '9') { 1020 1031 serviceID = @"ICQ"; … … 1099 1110 [UIDsArray addObject:email]; 1100 1111 [servicesArray addObject:@"Mac"]; 1112 1113 } else if ([email hasSuffix:@"me.com"]) { 1114 //@me.com UIDs go into the AIM dictionary 1115 if (!(dict = [addressBookDict objectForKey:@"AIM"])) { 1116 dict = [[[NSMutableDictionary alloc] init] autorelease]; 1117 [addressBookDict setObject:dict forKey:@"AIM"]; 1118 } 1119 1120 [dict setObject:[person uniqueId] forKey:email]; 1121 1122 //Internally we distinguish them as .Mac addresses (for metaContact purposes below) 1123 [UIDsArray addObject:email]; 1124 [servicesArray addObject:@"MobileMe"]; 1101 1125 1102 1126 } else if ([email hasSuffix:@"gmail.com"] || [email hasSuffix:@"googlemail.com"]) {