Changeset 3739

Show
Ignore:
Timestamp:
09/20/07 06:39:49 (10 months ago)
Author:
akempgen
Message:

Avatar Support plugin: Minor fixes, code cleanup. #351

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/Plug-Ins/Avatar Support/AKAvatarSupport.h

    r3738 r3739  
    1414 
    1515 
    16 @interface AKAvatarSupport : NSObject <MVChatPlugin> 
    17 
    18         //NSMutableSet *_throttledRequests; 
    19 
     16@interface AKAvatarSupport : NSObject <MVChatPlugin> {} 
     17 
    2018- (IBAction) requestAvatarMenuItemAction:(id) sender; 
    2119- (IBAction) offerAvatarMenuItemAction:(id) sender; 
  • trunk/Plug-Ins/Avatar Support/AKAvatarSupport.m

    r3738 r3739  
    2020 
    2121//For Bubbles/Growl output 
    22 #import "/Users/Alex/dev/svn/colloquy/Controllers/JVNotificationController.h" 
     22#import "../Controllers/JVNotificationController.h" 
    2323 
    2424//some classes 
     
    4545{ 
    4646        self = [super init]; 
    47         //_throttledRequests = (NSMutableSet *)[NSMutableSet set]; 
    48         //NSLog([_throttledRequests className]); 
    4947        //NSLog(@"Avatar Support: ** Plugin loaded"); 
    5048        return self; 
     
    6462        { 
    6563                [[NSFileManager defaultManager] createDirectoryAtPath: [cacheDir stringByExpandingTildeInPath] attributes: nil]; 
    66                 NSLog(@"Avatar Support: ** Cache directory created at %@.", cacheDir); 
    67         } 
    68         //NSLog([_throttledRequests className]); 
     64                //NSLog(@"Avatar Support: ** Cache directory created at %@.", cacheDir); 
     65        } 
    6966} 
    7067 
     
    8077{ 
    8178        NSMutableArray *avatarContextMenuItems = [NSMutableArray array]; 
    82         //if ([object isKindOfClass:NSClassFromString(@"JVChatRoomMember")]/* && ! [object isLocalUser]*/) 
    83         //{ 
     79        if ( [object isKindOfClass:NSClassFromString(@"JVChatRoomMember")] 
     80                || [object isKindOfClass:NSClassFromString(@"MVChatUser")] 
     81                || [object isKindOfClass:NSClassFromString(@"JVDirectChatPanel")] 
     82                || [object isKindOfClass:NSClassFromString(@"JVChatRoomPanel")] 
     83                //TODO: activate when done testing 
     84                /*&& ! [object isLocalUser] */) 
     85        { 
    8486                NSMenuItem *requestAvatarMenuItem = [[[NSMenuItem alloc] initWithTitle:@"Request Avatar" action:@selector(requestAvatarMenuItemAction:) keyEquivalent:@""] autorelease]; 
    8587                [requestAvatarMenuItem setTarget:self]; 
    8688                [requestAvatarMenuItem setRepresentedObject:object]; 
    8789                [avatarContextMenuItems addObject: requestAvatarMenuItem]; 
     90                 
     91                //TODO: is this functionality really required? (see below) 
    8892                NSMenuItem *offerAvatarMenuItem = [[[NSMenuItem alloc] initWithTitle:@"Offer Avatar" action:@selector(offerAvatarMenuItemAction:) keyEquivalent:@""] autorelease]; 
    8993                [offerAvatarMenuItem setTarget:self]; 
     
    9195                [avatarContextMenuItems addObject: offerAvatarMenuItem]; 
    9296                [avatarContextMenuItems addObject: [NSMenuItem separatorItem]]; 
    93         //
     97       
    9498        return avatarContextMenuItems; 
    9599} 
     
    97101- (IBAction) requestAvatarMenuItemAction:(id) sender 
    98102{ 
    99 //      if ( ! [object isLocalUser]) 
    100                 if ( [[sender representedObject] isKindOfClass:NSClassFromString(@"JVChatRoomMember")] ) 
    101                 { 
    102                         [self requestAvatarFromUser: [(JVChatRoomMember *)[sender representedObject] user]]; 
    103                 } 
    104                 else if ( [[sender representedObject] isKindOfClass:NSClassFromString(@"MVChatUser")] ) 
    105                 { 
    106                         [self requestAvatarFromUser: (MVChatUser *)[sender representedObject]]; 
    107                 } 
    108                 else if ( [[sender representedObject] isMemberOfClass:NSClassFromString(@"JVDirectChatPanel")] ) 
    109                 { 
    110                         [self requestAvatarFromUser: (MVChatUser *)[[sender representedObject] user]]; 
    111                 } 
    112                 else if ( [[sender representedObject] isMemberOfClass:NSClassFromString(@"JVChatRoomPanel")] ) 
    113                 { 
    114                         //NSLog([_throttledRequests className]); 
    115                         //[_throttledRequests unionSet:[(MVChatRoom *)[[sender representedObject] target] memberUsers]]; 
    116                         //NSTimer *timer =  
    117                         //[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(requestAvatarThrottled:) userInfo:nil repeats:YES]; 
    118                          
    119                         /*NSEnumerator *enumerator = [[(MVChatRoom *)[[sender representedObject] target] memberUsers] objectEnumerator]; 
    120                         MVChatUser *chatUser = nil; 
    121  
    122                         while( ( chatUser = [enumerator nextObject] ) ) { 
    123                                 [self requestAvatarFromUser:chatUser]; 
    124                         }*/ 
    125                 } 
    126                 else 
    127                 { 
    128                         NSLog([[[[sender representedObject] target] class ]description]); 
    129                 } 
    130 //      } 
    131 //      else 
    132 //      { localuser actions } 
    133 
    134  
    135 /*- (void) requestAvatarThrottled:(NSTimer *)timer 
    136 
    137         MVChatUser *chatUser = (MVChatUser *)[_throttledRequests anyObject]; 
    138         [self requestAvatarFromUser:chatUser]; 
    139         [_throttledRequests removeObject:chatUser]; 
    140         if ([_throttledRequests count] == 0) 
    141         { 
    142                 [timer invalidate]; 
    143         } 
    144 }*/ 
    145  
     103        if ( [[sender representedObject] isKindOfClass:NSClassFromString(@"JVChatRoomMember")] ) 
     104        { 
     105                [self requestAvatarFromUser: [(JVChatRoomMember *)[sender representedObject] user]]; 
     106        } 
     107        else if ( [[sender representedObject] isKindOfClass:NSClassFromString(@"MVChatUser")] ) 
     108        { 
     109                [self requestAvatarFromUser: (MVChatUser *)[sender representedObject]]; 
     110        } 
     111        else if ( [[sender representedObject] isMemberOfClass:NSClassFromString(@"JVDirectChatPanel")] ) 
     112        { 
     113                [self requestAvatarFromUser: (MVChatUser *)[[sender representedObject] user]]; 
     114        } 
     115        else if ( [[sender representedObject] isMemberOfClass:NSClassFromString(@"JVChatRoomPanel")] ) 
     116        { 
     117                //TODO: ctcp flood handling by the application 
     118                 
     119                //TODO: enable later 
     120                /*NSEnumerator *enumerator = [[(MVChatRoom *)[[sender representedObject] target] memberUsers] objectEnumerator]; 
     121                MVChatUser *chatUser = nil; 
     122 
     123                while( ( chatUser = [enumerator nextObject] ) ) { 
     124                        [self requestAvatarFromUser:chatUser]; 
     125                }*/ 
     126        } 
     127        else 
     128        {        
     129                //TODO: Remove this when done testing 
     130                NSLog(@"AVATAR: unknown sender for requestAvatarMenuItem: @%", [[[[sender representedObject] target] class ]description]); 
     131        } 
     132
     133 
     134//TODO: is this functionality really required? 
    146135- (IBAction) offerAvatarMenuItemAction:(id) sender 
    147136{ 
     
    161150- (void) processIncomingMessage:(JVMutableChatMessage *)message inView:(id <JVChatViewController>)view 
    162151{ 
    163         //TODO: use this if to put the user object into a var, call addavatartouser after the if (#1) 
     152        MVChatUser *_writingUser; 
    164153        if([[message sender] isMemberOfClass:[JVChatRoomMember class]]) 
    165154        { 
    166                 //NSLog(@"Avatar Support: -- %@ (class), user: %@/%@: %@ (class)", [[[message sender] class] description], [[(JVChatRoomMember *)[message sender] user] serverAddress], [[(JVChatRoomMember *)[message sender] user] nickname], [[[[message sender] user] class] description]); 
    167                  
    168                 //TODO: check for buddies, unless this works for them too (doesnt, *.quakenet.org bug) 
    169                 if ([[[(JVChatRoomMember *)[message sender] user] attributes] objectForKey:@"MVChatUserPictureAttribute"] == nil) 
    170                 { 
    171                         //NSLog(@"Avatar Support: -- nil: %@", [[[[(JVChatRoomMember *)[message sender] user] attributes] objectForKey:@"MVChatUserPictureAttribute"] description]); 
    172                         [self addAvatarToUser:[(JVChatRoomMember *)[message sender] user]]; 
    173                 } 
    174                 else 
    175                 { 
    176                         //NSLog(@"Avatar Support: -- nicht nil: %@", [[[[(JVChatRoomMember *)[message sender] user] attributes] objectForKey:@"MVChatUserPictureAttribute"] description]); 
    177                         //TODO: remove this 
    178                         [[JVNotificationController defaultController] performNotification:@"JVPluginNotification" withContextInfo:[NSDictionary dictionaryWithObjectsAndKeys:[[[(JVChatRoomMember *)[message sender] user] attributes] objectForKey:@"MVChatUserPictureAttribute"],@"image",@"Avatar Support",@"title",[NSString stringWithFormat:@"%@ already has an Avatar.", [[(JVChatRoomMember *)[message sender] user] nickname]],@"description",nil]]; 
    179                 } 
     155                _writingUser = [(JVChatRoomMember *)[message sender] user]; 
    180156        } 
    181157        else 
    182158        { 
    183                 //TODO: this is for direct chats, see comment #1 above 
    184                 //NSLog(@"Avatar Support: -- %@/%@: %@ (class)", [(MVChatUser *)[message sender] serverAddress], [(MVChatUser *)[message sender] nickname], [[[message sender] class] description]); 
    185                  
    186                 //TODO: check for buddies, unless this works for them too (doesnt) 
    187                 if ([[(MVChatUser *)[message sender] attributes] objectForKey:@"MVChatUserPictureAttribute"] == nil) 
    188                 { 
    189                         //NSLog(@"Avatar Support: -- nil: %@", [[[(MVChatUser *)[message sender] attributes] objectForKey:@"MVChatUserPictureAttribute"] description]); 
    190                         [self addAvatarToUser:(MVChatUser *)[message sender]]; 
    191                 } 
    192                 else 
    193                 { 
    194                         //NSLog(@"Avatar Support: --nicht nil: %@", [[[(MVChatUser *)[message sender] attributes] objectForKey:@"MVChatUserPictureAttribute"] description]); 
    195                         //TODO: remove this 
    196                         [[JVNotificationController defaultController] performNotification:@"JVPluginNotification" withContextInfo:[NSDictionary dictionaryWithObjectsAndKeys:[[(MVChatUser *)[message sender] attributes] objectForKey:@"MVChatUserPictureAttribute"],@"image",@"Avatar Support",@"title",[NSString stringWithFormat:@"%@ already has an Avatar.", [(MVChatUser *)[message sender] nickname]],@"description",nil]]; 
    197                 } 
     159                _writingUser = (MVChatUser *)[message sender]; 
     160        } 
     161         
     162        //NSLog(@"Avatar Support: -- %@ (class), user: %@/%@: %@ (class)", [[[message sender] class] description], [_writingUser serverAddress], [_writingUser nickname], [[[[message sender] user] class] description]); 
     163         
     164        //TODO: check for buddies, unless this works for them too (doesnt, *.quakenet.org bug) 
     165        if ([[_writingUser attributes] objectForKey:@"MVChatUserPictureAttribute"] == nil) 
     166        { 
     167                //NSLog(@"Avatar Support: -- nil: %@", [[[_writingUser attributes] objectForKey:@"MVChatUserPictureAttribute"] description]); 
     168                [self addAvatarToUser:_writingUser]; 
     169        } 
     170        else 
     171        { 
     172                //NSLog(@"Avatar Support: -- nicht nil: %@", [[[_writingUser attributes] objectForKey:@"MVChatUserPictureAttribute"] description]); 
     173                //TODO: remove this 
     174                [[JVNotificationController defaultController] performNotification:@"JVPluginNotification" withContextInfo: 
     175                        [NSDictionary dictionaryWithObjectsAndKeys:[[_writingUser attributes] objectForKey: 
     176                                @"MVChatUserPictureAttribute"], @"image", 
     177                                @"Avatar Support", @"title", 
     178                                [NSString stringWithFormat:@"%@ already has an Avatar.", [_writingUser nickname]],@"description", 
     179                                nil]]; 
    198180        } 
    199181} 
     
    209191- (BOOL) processSubcodeRequest:(NSString *)command withArguments:(NSData *)arguments fromUser:(MVChatUser *)chatUser 
    210192{ 
    211         if ([[command uppercaseString] isEqualToString:@"AVATEST"]) 
    212         { 
    213                 //TODO: remove NSLog 
    214                 NSLog(@"Avatar Support: <- Bogus request event for %@.", [chatUser nickname]); 
    215                 [self requestAvatarFromUser:chatUser]; 
    216                 return YES; 
    217         } 
    218193        if ([[command uppercaseString] isEqualToString:AKAvatarSupportCTCPCommand]) 
    219194        { 
     
    248223                                [self saveAvatar:receivedImage forUser:chatUser]; 
    249224                                [self addAvatarToUser:chatUser]; 
    250                                 [[JVNotificationController defaultController] performNotification:@"JVPluginNotification" withContextInfo:[NSDictionary dictionaryWithObjectsAndKeys:[[chatUser attributes] objectForKey:@"MVChatUserPictureAttribute"],@"image",@"Avatar Support",@"title",[NSString stringWithFormat:@"Received Avatar from user %@.", [chatUser nickname]],@"description",nil]]; 
     225                                [[JVNotificationController defaultController] performNotification:@"JVPluginNotification" withContextInfo: 
     226                                        [NSDictionary dictionaryWithObjectsAndKeys:[[chatUser attributes] objectForKey: 
     227                                                @"MVChatUserPictureAttribute"], @"image", 
     228                                                @"Avatar Support", @"title", 
     229                                                [NSString stringWithFormat:@"Received Avatar from user %@.", [chatUser nickname]], @"description", 
     230                                                nil]]; 
    251231                                return YES; 
    252232                        } 
     
    255235//                              if (filesizeisokay) 
    256236//                              { 
    257                                         //NSLog(@"Avatar Support: <- dcc file transfer request for %@ required.", [chatUser nickname]); 
     237                                        NSLog(@"Avatar Support: <- dcc file transfer request from %@ (not yet supported).", [chatUser nickname]); 
    258238                                        //[18:39] <xenon> there is, just dont add it to the MVFileTransferManager 
    259239                                        //MVFileTransferController 
     
    261241                                        //filetransfer <- requestAvatarFromUser:chatUser 
    262242                                        //filetransferdelegate: [self addAvatarToUser:chatUser]; 
    263                                         //return YES; 
     243                                        return YES; 
    264244//                              } 
    265245                        } 
     
    306286         
    307287        //TODO: remove this later, its enough to growl on "received avatar" 
    308         [[JVNotificationController defaultController] performNotification:@"JVPluginNotification" withContextInfo:[NSDictionary dictionaryWithObjectsAndKeys:[[chatUser attributes] objectForKey:@"MVChatUserPictureAttribute"],@"image",@"Avatar Support",@"title",[NSString stringWithFormat:@"Avatar added for user %@.", [chatUser nickname]],@"description",nil]]; 
     288        [[JVNotificationController defaultController] performNotification:@"JVPluginNotification" withContextInfo: 
     289                [NSDictionary dictionaryWithObjectsAndKeys:[[chatUser attributes] objectForKey: 
     290                        @"MVChatUserPictureAttribute"], @"image", 
     291                        @"Avatar Support", @"title", 
     292                        [NSString stringWithFormat:@"Avatar added for user %@.", [chatUser nickname]], @"description", 
     293                        nil]]; 
    309294        } 
    310295}