Adium

Changeset 24385

Show
Ignore:
Timestamp:
07/16/2008 07:37:01 PM (6 months ago)
Author:
evands
Message:

Added MobileMe service, which defaults to an @me.com address but allows @mac.com addresses, as well. Made the .Mac service hidden, which means that existing accounts will continue to show up and work but the service no longer appears in service menus. Fixes #10399

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/Adium.xcodeproj/project.pbxproj

    r24300 r24385  
    10241024                34EA6B320A62F3420053DFEB /* AIApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 34EA6B300A62F3420053DFEB /* AIApplication.m */; }; 
    10251025                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 */; }; 
    10261035                34F144430BA8FF3C000473DE /* EmoticonNames.strings in Resources */ = {isa = PBXBuildFile; fileRef = 34F144420BA8FF3B000473DE /* EmoticonNames.strings */; }; 
    10271036                34F191DC09BA5F43001D6BE2 /* irc.png in Resources */ = {isa = PBXBuildFile; fileRef = 34F191DB09BA5F43001D6BE2 /* irc.png */; }; 
     
    36613670                34EBB2C10DCA8DE400B4CB6E /* AISearchFieldCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AISearchFieldCell.h; path = Source/AISearchFieldCell.h; sourceTree = "<group>"; }; 
    36623671                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>"; }; 
    36633681                34F101E307342B4D00890D3B /* ESPurpleDotMacAccount.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = ESPurpleDotMacAccount.m; path = "Plugins/Purple Service/ESPurpleDotMacAccount.m"; sourceTree = "<group>"; }; 
    36643682                34F101E407342B4D00890D3B /* ESPurpleDotMacAccount.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ESPurpleDotMacAccount.h; path = "Plugins/Purple Service/ESPurpleDotMacAccount.h"; sourceTree = "<group>"; }; 
     
    61856203                        sourceTree = "<group>"; 
    61866204                }; 
     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                }; 
    61876221                34F52BD506E2B22800887BE2 /* ICQ */ = { 
    61886222                        isa = PBXGroup; 
     
    66566690                        isa = PBXGroup; 
    66576691                        children = ( 
     6692                                34EF90440E2EB152003E5DC7 /* MobileMe */, 
    66586693                                4B387DE10719931C004DE713 /* .Mac */, 
    66596694                                34E0EB8D07CD349200A82198 /* ESPurpleAIMAccount.h */, 
     
    80658100                                34B3247A0CE4CCF400158D5F /* PurpleAccountViewController.h in Headers */, 
    80668101                                34FF12120DA52FB10054A872 /* AIPurpleGTalkJoinChatViewController.h in Headers */, 
     8102                                34EF904B0E2EB17B003E5DC7 /* AIMobileMeService.h in Headers */, 
     8103                                34EF90570E2EB1A8003E5DC7 /* AIPurpleMobileMeAccountViewController.h in Headers */, 
     8104                                34EF905D0E2EB1C5003E5DC7 /* AIPurpleMobileMeAccount.h in Headers */, 
    80678105                        ); 
    80688106                        runOnlyForDeploymentPostprocessing = 0; 
     
    88408878                                343BB63C0C96DC1100506F9B /* MySpace-large.png in Resources */, 
    88418879                                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 */, 
    88428883                        ); 
    88438884                        runOnlyForDeploymentPostprocessing = 0; 
     
    94079448                                34B3247B0CE4CCF400158D5F /* PurpleAccountViewController.m in Sources */, 
    94089449                                34FF12130DA52FB10054A872 /* AIPurpleGTalkJoinChatViewController.m in Sources */, 
     9450                                34EF904C0E2EB17B003E5DC7 /* AIMobileMeService.m in Sources */, 
     9451                                34EF90580E2EB1A8003E5DC7 /* AIPurpleMobileMeAccountViewController.m in Sources */, 
     9452                                34EF905E0E2EB1C5003E5DC7 /* AIPurpleMobileMeAccount.m in Sources */, 
    94099453                        ); 
    94109454                        runOnlyForDeploymentPostprocessing = 0; 
  • trunk/Frameworks/Adium Framework/Source/AIAbstractListController.m

    r24091 r24385  
    800800                        @"aim://goim?screenname=%@", @"AIM", 
    801801                        @"aim://goim?screenname=%@", @"Mac", //.Mac 
     802                        @"aim://goim?screenname=%@", @"MobileMe", 
    802803                        @"xmpp:%@?message", @"Jabber", 
    803804                        @"xmpp:%@?message", @"GTalk", 
  • trunk/Plugins/Purple Service/CBPurpleOscarAccount.m

    r24368 r24385  
    154154        if ([contactUID hasSuffix:@"@mac.com"]) { 
    155155                contactServiceID = @"libpurple-oscar-Mac"; 
     156        } else if ([contactUID hasSuffix:@"@me.com"]) { 
     157                contactServiceID = @"libpurple-oscar-MobileMe"; 
    156158        } else if (firstCharacter && (firstCharacter >= '0' && firstCharacter <= '9')) { 
    157159                contactServiceID = @"libpurple-oscar-ICQ"; 
  • trunk/Plugins/Purple Service/CBPurpleServicePlugin.m

    r24321 r24385  
    4141        [ESAIMService registerService]; 
    4242        [ESDotMacService registerService]; 
     43        [AIMobileMeService registerService]; 
    4344        [ESICQService registerService]; 
    4445        [ESGaduGaduService registerService]; 
  • trunk/Plugins/Purple Service/ESDotMacService.h

    r9760 r24385  
    1515 */ 
    1616 
    17 #import "ESAIMService.h" 
     17#import "AIMobileMeService.h" 
    1818 
    19 @interface ESDotMacService : ESAIMService { 
     19@interface ESDotMacService : AIMobileMeService { 
    2020 
    2121} 
  • trunk/Plugins/Purple Service/ESDotMacService.m

    r22090 r24385  
    4444        return @".Mac"; 
    4545} 
    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; 
    5750} 
    5851 
    5952/*! 
    60  * @brief Normalize a UID 
     53 * @brief Default icon 
    6154 * 
    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 
    6465 */ 
    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; 
    9070} 
    9171 
  • trunk/Plugins/Purple Service/ESPurpleDotMacAccount.h

    r19332 r24385  
    1515 */ 
    1616 
    17 #import "ESPurpleAIMAccount.h" 
     17#import "AIPurpleMobileMeAccount.h" 
    1818 
    19 @interface ESPurpleDotMacAccount : ESPurpleAIMAccount { 
     19@interface ESPurpleDotMacAccount : AIPurpleMobileMeAccount { 
    2020 
    2121} 
  • trunk/Plugins/Purple Service/ESPurpleDotMacAccount.m

    r19332 r24385  
    3333} 
    3434 
    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 supported 
    39  * 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 identical 
    47  * without service information (tekjew). The explicit formatted UID is therefore tekjew@mac.com 
    48  */ 
    49 - (NSString *)explicitFormattedUID 
    50 { 
    51         return [NSString stringWithUTF8String:[self purpleAccountName]]; 
    52 } 
    53  
    5435@end 
  • trunk/Plugins/Purple Service/ESPurpleDotMacAccountViewController.h

    r19332 r24385  
    1515 */ 
    1616 
    17 #import "AIPurpleOscarAccountViewController.h" 
     17#import "AIPurpleMobileMeAccountViewController.h" 
    1818 
    19 @interface ESPurpleDotMacAccountViewController : AIPurpleOscarAccountViewController { 
     19@interface ESPurpleDotMacAccountViewController : AIPurpleMobileMeAccountViewController { 
    2020 
    2121} 
  • trunk/Plugins/Purple Service/PurpleServices.h

    r20982 r24385  
    1717#import "ESAIMService.h" 
    1818#import "ESDotMacService.h" 
     19#import "AIMobileMeService.h" 
    1920#import "ESICQService.h" 
    2021#import "ESGaduGaduService.h" 
  • trunk/Source/AIAbstractLogViewerWindowController.m

    r24304 r24385  
    27532753        } else if ([serviceClass isEqualToString:@"AIM"] || 
    27542754                           [serviceClass isEqualToString:@"ICQ"] || 
    2755                            [serviceClass isEqualToString:@"Mac"]) { 
     2755                           [serviceClass isEqualToString:@"Mac"] || 
     2756                           [serviceClass isEqualToString:@"MobileMe"]) { 
    27562757                const char      firstCharacter = ([contactUID length] ? [contactUID characterAtIndex:0] : '\0'); 
    27572758                 
     
    27592760                if ([contactUID hasSuffix:@"@mac.com"]) { 
    27602761                        serviceClass = @"Mac"; 
     2762                } else if ([contactUID hasSuffix:@"@me.com"]) { 
     2763                        serviceClass = @"MobileMe"; 
    27612764                } else if (firstCharacter && (firstCharacter >= '0' && firstCharacter <= '9')) { 
    27622765                        serviceClass = @"ICQ"; 
  • trunk/Source/AIServiceMenu.m

    r24137 r24385  
    7474                while ((service = [enumerator nextObject])) { 
    7575                        if (([service serviceImportance] == importance) && 
     76                                ![service isHidden] && 
    7677                                (!targetRespondsToShouldIncludeService || [target serviceMenuShouldIncludeService:service])) { 
    7778                                NSString        *description = (longDescription ? 
  • trunk/Source/BGICImportController.m

    r22059 r24385  
    118118        ESDotMacService *macService = nil; 
    119119        ESJabberService *jabberService = nil;    
    120                                          
     120         
     121#warning iChat Import needs to be updated for MobileMe 
    121122        while ((service = [serviceEnum nextObject])) { 
    122123                if ([[service serviceID] isEqual:@"AIM"]) 
    123124                        aimService = (ESAIMService *)service; 
    124                 if ([[service serviceID] isEqual:@"Mac"]) 
     125                else if ([[service serviceID] isEqual:@"Mac"]) 
    125126                        macService = (ESDotMacService *)service; 
    126                 if ([[service serviceID] isEqual:@"Jabber"]) 
     127                else if ([[service serviceID] isEqual:@"Jabber"]) 
    127128                        jabberService = (ESJabberService *)service; 
    128                 if ([[service serviceID] isEqual:@"Bonjour"]) 
     129                else if ([[service serviceID] isEqual:@"Bonjour"]) 
    129130                        bonjourService = (AWBonjourService *)service; 
    130131        }        
  • trunk/Source/ESAddressBookIntegrationPlugin.m

    r24306 r24385  
    607607                } else if ([serviceID isEqualToString:@"Mac"]) { 
    608608                        result = kABAIMInstantProperty; 
     609                } else if ([serviceID isEqualToString:@"MobileMe"]) { 
     610                        result = kABAIMInstantProperty; 
    609611                } 
    610612        } 
     
    701703        NSDictionary    *dict; 
    702704         
    703         if ([serviceID isEqualToString:@"Mac"]) { 
     705        if ([serviceID isEqualToString:@"Mac"] || 
     706                [serviceID isEqualToString:@"MobileMe"]) { 
    704707                dict = [addressBookDict objectForKey:@"AIM"]; 
    705708 
     
    755758                                //Add them to our set 
    756759                                [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"]) { 
    760771                                //Retrieve all appropriate contacts 
    761772                                NSSet   *contacts = [[adium contactController] allContactsWithService:[[adium accountController] firstServiceWithServiceID:@"GTalk"] 
     
    765776                                //Add them to our set 
    766777                                [contactSet unionSet:contacts]; 
    767                         } 
    768                          
    769                         if ([email hasSuffix:@"hotmail.com"]) { 
     778                        } else if ([email hasSuffix:@"hotmail.com"]) { 
    770779                                //Retrieve all appropriate contacts 
    771780                                NSSet   *contacts = [[adium contactController] allContactsWithService:[[adium accountController] firstServiceWithServiceID:@"MSN"] 
     
    10171026        if ([UID hasSuffix:@"@mac.com"]) { 
    10181027                serviceID = @"Mac"; 
     1028        } else if ([UID hasSuffix:@"@me.com"]) { 
     1029                serviceID = @"MobileMe"; 
    10191030        } else if (firstCharacter >= '0' && firstCharacter <= '9') { 
    10201031                serviceID = @"ICQ"; 
     
    10991110                                        [UIDsArray addObject:email]; 
    11001111                                        [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"]; 
    11011125                                         
    11021126                                } else if ([email hasSuffix:@"gmail.com"] || [email hasSuffix:@"googlemail.com"]) {