Changeset 3344
- Timestamp:
- 08/27/06 17:40:40 (2 years ago)
- Files:
-
- trunk/Basic.pch (modified) (1 diff)
- trunk/Chat Core/MVChatConnection.h (modified) (7 diffs)
- trunk/Chat Core/MVChatConnection.m (modified) (16 diffs)
- trunk/Chat Core/MVChatPluginManager.h (modified) (1 diff)
- trunk/Chat Core/MVChatPluginManager.m (modified) (2 diffs)
- trunk/Chat Core/MVChatRoom.h (modified) (8 diffs)
- trunk/Chat Core/MVChatRoom.m (modified) (24 diffs)
- trunk/Chat Core/MVChatUser.h (modified) (4 diffs)
- trunk/Chat Core/MVChatUser.m (modified) (13 diffs)
- trunk/Chat Core/MVChatUserWatchRule.h (modified) (2 diffs)
- trunk/Chat Core/MVChatUserWatchRule.m (modified) (8 diffs)
- trunk/Chat Core/MVFileTransfer.h (modified) (4 diffs)
- trunk/Chat Core/MVFileTransfer.m (modified) (10 diffs)
- trunk/Chat Core/MVIRCChatConnection.m (modified) (15 diffs)
- trunk/Chat Core/MVIRCChatRoom.m (modified) (4 diffs)
- trunk/Chat Core/MVIRCChatUser.m (modified) (2 diffs)
- trunk/Chat Core/MVIRCFileTransfer.m (modified) (1 diff)
- trunk/Chat Core/MVSILCChatConnection.m (modified) (8 diffs)
- trunk/Chat Core/MVSILCChatRoom.m (modified) (4 diffs)
- trunk/Chat Core/MVSILCChatUser.m (modified) (2 diffs)
- trunk/Chat Core/MVSILCFileTransfer.m (modified) (2 diffs)
- trunk/Colloquy.pch (modified) (1 diff)
- trunk/Plug-Ins/AppleScript Support/JVAppleScriptPluginLoader.m (modified) (1 diff)
- trunk/Plug-Ins/F-Script Support/JVFScriptPluginLoader.m (modified) (1 diff)
- trunk/Plug-Ins/JavaScript Support/JVJavaScriptPluginLoader.m (modified) (1 diff)
- trunk/Plug-Ins/Python Support/JVPythonPluginLoader.m (modified) (1 diff)
- trunk/Plug-Ins/Standard Commands/JVStandardCommands.m (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/Basic.pch
r3233 r3344 2 2 #import <Cocoa/Cocoa.h> 3 3 #endif 4 5 #ifndef MAC_OS_X_VERSION_10_4 6 #define MAC_OS_X_VERSION_10_5 1050 7 #endif trunk/Chat Core/MVChatConnection.h
r3190 r3344 124 124 #pragma mark - 125 125 126 #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 127 @property(readonly) MVChatConnectionType type; 128 129 @property(readonly) NSSet *supportedFeatures; 130 @property(readonly) const NSStringEncoding *supportedStringEncodings; 131 132 @property(readonly) NSError *lastError; 133 134 @property(readonly) NSString *urlScheme; 135 @property(readonly) NSURL *url; 136 137 @property NSStringEncoding encoding; 138 139 @property(bycopy) NSString *realName; 140 141 @property(bycopy) NSString *nickname; 142 @property(readonly) NSString *preferredNickname; 143 144 @property(bycopy) NSArray *alternateNicknames; 145 @property(readonly) NSString *nextAlternateNickname; 146 147 @property(bycopy) NSString *nicknamePassword; 148 149 @property(readonly) NSString *certificateServiceName; 150 @property(readonly) NSString *certificatePassword; 151 152 @property(bycopy) NSString *password; 153 154 @property(bycopy) NSString *username; 155 156 @property(bycopy) NSString *server; 157 158 @property unsigned short serverPort; 159 160 @property MVChatMessageFormat outgoingChatFormat; 161 162 @property(bycopy) NSString *proxyUsername; 163 164 @property(bycopy) NSString *proxyPassword; 165 166 @property BOOL secure; 167 168 @property(bycopy) NSDictionary *persistentInformation; 169 170 @property MVChatConnectionProxy proxyType; 171 172 @property(bycopy) NSString *proxyServer; 173 174 @property unsigned short proxyServerPort; 175 176 @property(readonly) NSSet *joinedChatRooms; 177 @property(readonly) NSCharacterSet *chatRoomNamePrefixes; 178 179 @property(readonly) NSSet *knownChatUsers; 180 @property(readonly) MVChatUser *localUser; 181 182 @property(readonly) NSSet *chatUserWatchRules; 183 184 @property(bycopy) NSAttributedString *awayStatusMessage; 185 186 @property(readonly) BOOL connected; 187 @property(readonly) BOOL waitingToReconnect; 188 @property(readonly) MVChatConnectionStatus status; 189 @property(readonly) unsigned int lag; 190 191 #else 192 126 193 - (MVChatConnectionType) type; 127 194 … … 129 196 130 197 - (NSSet *) supportedFeatures; 198 - (const NSStringEncoding *) supportedStringEncodings; 199 200 #pragma mark - 201 202 - (NSError *) lastError; 203 204 #pragma mark - 205 206 - (NSString *) urlScheme; 207 - (NSURL *) url; 208 209 #pragma mark - 210 211 - (void) setEncoding:(NSStringEncoding) encoding; 212 - (NSStringEncoding) encoding; 213 214 #pragma mark - 215 216 - (void) setRealName:(NSString *) name; 217 - (NSString *) realName; 218 219 #pragma mark - 220 221 - (void) setNickname:(NSString *) nickname; 222 - (NSString *) nickname; 223 - (NSString *) preferredNickname; 224 225 #pragma mark - 226 227 - (void) setAlternateNicknames:(NSArray *) nicknames; 228 - (NSArray *) alternateNicknames; 229 - (NSString *) nextAlternateNickname; 230 231 #pragma mark - 232 233 - (void) setNicknamePassword:(NSString *) password; 234 - (NSString *) nicknamePassword; 235 236 #pragma mark - 237 238 - (NSString *) certificateServiceName; 239 - (NSString *) certificatePassword; 240 241 #pragma mark - 242 243 - (void) setPassword:(NSString *) password; 244 - (NSString *) password; 245 246 #pragma mark - 247 248 - (void) setUsername:(NSString *) username; 249 - (NSString *) username; 250 251 #pragma mark - 252 253 - (void) setServer:(NSString *) server; 254 - (NSString *) server; 255 256 #pragma mark - 257 258 - (void) setServerPort:(unsigned short) port; 259 - (unsigned short) serverPort; 260 261 #pragma mark - 262 263 - (void) setOutgoingChatFormat:(MVChatMessageFormat) format; 264 - (MVChatMessageFormat) outgoingChatFormat; 265 266 #pragma mark - 267 268 - (void) setProxyUsername:(NSString *) username; 269 - (NSString *) proxyUsername; 270 271 #pragma mark - 272 273 - (void) setProxyPassword:(NSString *) password; 274 - (NSString *) proxyPassword; 275 276 #pragma mark - 277 278 - (void) setSecure:(BOOL) ssl; 279 280 #pragma mark - 281 282 - (void) setPersistentInformation:(NSDictionary *) information; 283 - (NSDictionary *) persistentInformation; 284 285 #pragma mark - 286 287 - (void) setProxyType:(MVChatConnectionProxy) type; 288 - (MVChatConnectionProxy) proxyType; 289 290 #pragma mark - 291 292 - (void) setProxyServer:(NSString *) address; 293 - (NSString *) proxyServer; 294 295 #pragma mark - 296 297 - (void) setProxyServerPort:(unsigned short) port; 298 - (unsigned short) proxyServerPort; 299 300 #pragma mark - 301 302 - (NSSet *) joinedChatRooms; 303 - (NSCharacterSet *) chatRoomNamePrefixes; 304 305 #pragma mark - 306 307 - (NSSet *) knownChatUsers; 308 - (MVChatUser *) localUser; 309 310 #pragma mark - 311 312 - (NSSet *) chatUserWatchRules; 313 314 #pragma mark - 315 316 - (NSAttributedString *) awayStatusMessage; 317 - (void) setAwayStatusMessage:(NSAttributedString *) message; 318 319 #pragma mark - 320 321 - (MVChatConnectionStatus) status; 322 - (unsigned int) lag; 323 #endif 324 325 #pragma mark - 326 327 - (BOOL) isSecure; 328 - (BOOL) isConnected; 329 - (BOOL) isWaitingToReconnect; 330 331 #pragma mark - 332 131 333 - (BOOL) supportsFeature:(NSString *) key; 132 133 #pragma mark -134 135 - (const NSStringEncoding *) supportedStringEncodings;136 334 - (BOOL) supportsStringEncoding:(NSStringEncoding) encoding; 137 335 … … 145 343 #pragma mark - 146 344 147 - (NSError *) lastError;148 149 #pragma mark -150 151 - (NSString *) urlScheme;152 - (NSURL *) url;153 154 #pragma mark -155 156 - (void) setEncoding:(NSStringEncoding) encoding;157 - (NSStringEncoding) encoding;158 159 #pragma mark -160 161 - (void) setRealName:(NSString *) name;162 - (NSString *) realName;163 164 - (void) setNickname:(NSString *) nickname;165 - (NSString *) nickname;166 - (NSString *) preferredNickname;167 168 - (void) setAlternateNicknames:(NSArray *) nicknames;169 - (NSArray *) alternateNicknames;170 - (NSString *) nextAlternateNickname;171 172 - (void) setNicknamePassword:(NSString *) password;173 - (NSString *) nicknamePassword;174 175 - (NSString *) certificateServiceName;176 345 - (BOOL) setCertificatePassword:(NSString *) password; 177 - (NSString *) certificatePassword;178 179 - (void) setPassword:(NSString *) password;180 - (NSString *) password;181 182 - (void) setUsername:(NSString *) username;183 - (NSString *) username;184 185 - (void) setServer:(NSString *) server;186 - (NSString *) server;187 188 - (void) setServerPort:(unsigned short) port;189 - (unsigned short) serverPort;190 191 - (void) setOutgoingChatFormat:(MVChatMessageFormat) format;192 - (MVChatMessageFormat) outgoingChatFormat;193 194 - (void) setProxyUsername:(NSString *) username;195 - (NSString *) proxyUsername;196 197 - (void) setProxyPassword:(NSString *) password;198 - (NSString *) proxyPassword;199 200 - (void) setSecure:(BOOL) ssl;201 - (BOOL) isSecure;202 203 - (void) setPersistentInformation:(NSDictionary *) information;204 - (NSDictionary *) persistentInformation;205 206 346 - (void) publicKeyVerified:(NSDictionary *) dictionary andAccepted:(BOOL) accepted andAlwaysAccept:(BOOL) alwaysAccept; 207 208 #pragma mark -209 210 - (void) setProxyType:(MVChatConnectionProxy) type;211 - (MVChatConnectionProxy) proxyType;212 213 - (void) setProxyServer:(NSString *) address;214 - (NSString *) proxyServer;215 216 - (void) setProxyServerPort:(unsigned short) port;217 - (unsigned short) proxyServerPort;218 347 219 348 #pragma mark - … … 234 363 #pragma mark - 235 364 236 - (NSSet *) joinedChatRooms;237 365 - (MVChatRoom *) joinedChatRoomWithName:(NSString *) room; 238 366 239 367 #pragma mark - 240 368 241 - (NSCharacterSet *) chatRoomNamePrefixes;242 369 - (NSString *) properNameForChatRoomNamed:(NSString *) room; 243 370 244 371 #pragma mark - 245 372 246 - (NSSet *) knownChatUsers;247 373 - (NSSet *) chatUsersWithNickname:(NSString *) nickname; 248 374 - (NSSet *) chatUsersWithFingerprint:(NSString *) fingerprint; 249 375 - (MVChatUser *) chatUserWithUniqueIdentifier:(id) identifier; 250 - (MVChatUser *) localUser;251 376 252 377 #pragma mark - … … 255 380 - (void) removeChatUserWatchRule:(MVChatUserWatchRule *) rule; 256 381 257 - (NSSet *) chatUserWatchRules; 258 259 #pragma mark - 382 #pragma mark - 383 260 384 - (void) fetchChatRoomList; 261 385 - (void) stopFetchingChatRoomList; … … 264 388 #pragma mark - 265 389 266 - (NSAttributedString *) awayStatusMessage;267 - (void) setAwayStatusWithMessage:(NSAttributedString *) message;268 - (void) clearAwayStatus;269 270 #pragma mark -271 272 - (BOOL) isConnected;273 - (MVChatConnectionStatus) status;274 - (unsigned int) lag;275 276 #pragma mark -277 278 390 - (void) scheduleReconnectAttemptEvery:(NSTimeInterval) seconds; 279 391 - (void) cancelPendingReconnectAttempts; 280 - (BOOL) isWaitingToReconnect;281 392 @end 282 393 … … 284 395 285 396 @interface MVChatConnection (MVChatConnectionScripting) 397 #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 398 @property(readonly) NSNumber *uniqueIdentifier; 399 #endif 400 286 401 - (NSNumber *) uniqueIdentifier; 287 402 @end trunk/Chat Core/MVChatConnection.m
r3339 r3344 91 91 } 92 92 93 - (id) initWithType:(MVChatConnectionType) type {93 - (id) initWithType:(MVChatConnectionType) connectionType { 94 94 [self release]; 95 95 96 if( type == MVChatConnectionIRCType ) {96 if( connectionType == MVChatConnectionIRCType ) { 97 97 self = [[MVIRCChatConnection allocWithZone:nil] init]; 98 } else if ( type == MVChatConnectionSILCType ) {98 } else if ( connectionType == MVChatConnectionSILCType ) { 99 99 self = [[MVSILCChatConnection allocWithZone:nil] init]; 100 100 } else self = nil; … … 103 103 } 104 104 105 - (id) initWithURL:(NSURL *) url{106 NSParameterAssert( [MVChatConnection supportsURLScheme:[ urlscheme]] );107 108 int type = 0;109 if( [[ url scheme] isEqualToString:@"irc"] ) type = MVChatConnectionIRCType;110 else if( [[ url scheme] isEqualToString:@"silc"] ) type = MVChatConnectionSILCType;111 112 if( ( self = [self initWithServer:[ url host] type:type port:[[url port] unsignedShortValue] user:[urluser]] ) ) {113 [self setNicknamePassword:[ urlpassword]];114 115 if( [ url fragment] && [[urlfragment] length] > 0 ) {116 [self joinChatRoomNamed:[ urlfragment]];117 } else if( [ url path] && [[urlpath] length] > 1 ) {118 [self joinChatRoomNamed:[[ urlpath] substringFromIndex:1]];105 - (id) initWithURL:(NSURL *) serverURL { 106 NSParameterAssert( [MVChatConnection supportsURLScheme:[serverURL scheme]] ); 107 108 int connectionType = 0; 109 if( [[serverURL scheme] isEqualToString:@"irc"] ) connectionType = MVChatConnectionIRCType; 110 else if( [[serverURL scheme] isEqualToString:@"silc"] ) connectionType = MVChatConnectionSILCType; 111 112 if( ( self = [self initWithServer:[serverURL host] type:connectionType port:[[serverURL port] unsignedShortValue] user:[serverURL user]] ) ) { 113 [self setNicknamePassword:[serverURL password]]; 114 115 if( [serverURL fragment] && [[serverURL fragment] length] > 0 ) { 116 [self joinChatRoomNamed:[serverURL fragment]]; 117 } else if( [serverURL path] && [[serverURL path] length] > 1 ) { 118 [self joinChatRoomNamed:[[serverURL path] substringFromIndex:1]]; 119 119 } 120 120 } … … 123 123 } 124 124 125 - (id) initWithServer:(NSString *) server type:(MVChatConnectionType) type port:(unsigned short) port user:(NSString *) nickname {126 if( ( self = [self initWithType: type] ) ) {127 if( [ nickname length] ) [self setNickname:nickname];128 if( [server length] ) [self setServer:server];125 - (id) initWithServer:(NSString *) serverAddress type:(MVChatConnectionType) serverType port:(unsigned short) port user:(NSString *) localNickname { 126 if( ( self = [self initWithType:serverType] ) ) { 127 if( [localNickname length] ) [self setNickname:localNickname]; 128 if( [serverAddress length] ) [self setServer:serverAddress]; 129 129 [self setServerPort:port]; 130 130 } … … 204 204 } 205 205 206 - (BOOL) supportsStringEncoding:(NSStringEncoding) encoding {206 - (BOOL) supportsStringEncoding:(NSStringEncoding) supportedEncoding { 207 207 const NSStringEncoding *encodings = [self supportedStringEncodings]; 208 208 unsigned i = 0; 209 209 210 210 for( i = 0; encodings[i]; i++ ) 211 if( encodings[i] == encoding ) return YES;211 if( encodings[i] == supportedEncoding ) return YES; 212 212 213 213 return NO; … … 221 221 } 222 222 223 - (void) connectToServer:(NSString *) server onPort:(unsigned short) port asUser:(NSString *) nickname{224 if( [nick name length] ) [self setNickname:nickname];225 if( [ server length] ) [self setServer:server];223 - (void) connectToServer:(NSString *) address onPort:(unsigned short) port asUser:(NSString *) nick { 224 if( [nick length] ) [self setNickname:nick]; 225 if( [address length] ) [self setServer:address]; 226 226 [self setServerPort:port]; 227 227 [self disconnect]; … … 253 253 254 254 - (NSURL *) url { 255 NSString *url = [NSString stringWithFormat:@"%@://%@@%@:%hu", [self urlScheme], [[self preferredNickname] stringByEncodingIllegalURLCharacters], [[self server] stringByEncodingIllegalURLCharacters], [self serverPort]];256 if( url ) return [NSURL URLWithString:url];257 return nil; 258 } 259 260 #pragma mark - 261 262 - (void) setEncoding:(NSStringEncoding) encoding {263 if( [self supportsStringEncoding: encoding] )264 _encoding = encoding;255 NSString *urlString = [NSString stringWithFormat:@"%@://%@@%@:%hu", [self urlScheme], [[self preferredNickname] stringByEncodingIllegalURLCharacters], [[self server] stringByEncodingIllegalURLCharacters], [self serverPort]]; 256 if( urlString ) return [NSURL URLWithString:urlString]; 257 return nil; 258 } 259 260 #pragma mark - 261 262 - (void) setEncoding:(NSStringEncoding) newEncoding { 263 if( [self supportsStringEncoding:newEncoding] ) 264 _encoding = newEncoding; 265 265 } 266 266 … … 323 323 #pragma mark - 324 324 325 - (void) setNicknamePassword:(NSString *) password {325 - (void) setNicknamePassword:(NSString *) newPassword { 326 326 id old = _npassword; 327 if( [ password length] ) _npassword = [password copyWithZone:nil];327 if( [newPassword length] ) _npassword = [newPassword copyWithZone:nil]; 328 328 else _npassword = nil; 329 329 [old release]; … … 416 416 } 417 417 418 #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 419 @property(getter=isSecure, setter=setSecure:) BOOL secure; 420 #endif 421 418 422 - (BOOL) isSecure { 419 423 return _secure; … … 422 426 #pragma mark - 423 427 424 - (void) setProxyType:(MVChatConnectionProxy) type {425 _proxy = type;428 - (void) setProxyType:(MVChatConnectionProxy) newType { 429 _proxy = newType; 426 430 } 427 431 … … 454 458 #pragma mark - 455 459 456 - (void) setProxyUsername:(NSString *) username {460 - (void) setProxyUsername:(NSString *) newUsername { 457 461 id old = _proxyUsername; 458 _proxyUsername = [ username copyWithZone:nil];462 _proxyUsername = [newUsername copyWithZone:nil]; 459 463 [old release]; 460 464 } … … 466 470 #pragma mark - 467 471 468 - (void) setProxyPassword:(NSString *) password {472 - (void) setProxyPassword:(NSString *) newPassword { 469 473 id old = _proxyPassword; 470 _proxyPassword = [ password copyWithZone:nil];474 _proxyPassword = [newPassword copyWithZone:nil]; 471 475 [old release]; 472 476 } … … 710 714 } 711 715 712 - (void) setAwayStatus WithMessage:(NSAttributedString *) message {713 // subclass this method 714 [self doesNotRecognizeSelector:_cmd]; 715 } 716 717 - (void) clearAwayStatus { 718 [self setAwayStatusWithMessage:nil]; 719 } 720 721 # pragma mark -716 - (void) setAwayStatusMessage:(NSAttributedString *) message { 717 // subclass this method 718 [self doesNotRecognizeSelector:_cmd]; 719 } 720 721 #pragma mark - 722 723 #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 724 @property(readonly, getter=isConnected) BOOL connected; 725 #endif 722 726 723 727 - (BOOL) isConnected { 724 return ( BOOL) (_status == MVChatConnectionConnectedStatus );728 return ( _status == MVChatConnectionConnectedStatus ); 725 729 } 726 730 … … 750 754 } 751 755 756 #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 757 @property(readonly, getter=isWaitingToReconnect) BOOL waitingToReconnect; 758 #endif 759 752 760 - (BOOL) isWaitingToReconnect { 753 761 return ( ! [self isConnected] && _reconnectTimer ? YES : NO ); … … 861 869 } 862 870 863 - (void) _setStatus:(MVChatConnectionStatus) status {864 _status = status;871 - (void) _setStatus:(MVChatConnectionStatus) newStatus { 872 _status = newStatus; 865 873 } 866 874 … … 1001 1009 if( [message isKindOfClass:[NSTextStorage class]] ) msg = [message string]; 1002 1010 NSAttributedString *attributeMsg = [NSAttributedString attributedStringWithHTMLFragment:msg baseURL:nil]; 1003 [self setAwayStatus WithMessage:attributeMsg];1011 [self setAwayStatusMessage:attributeMsg]; 1004 1012 } 1005 1013 … … 1010 1018 } 1011 1019 1012 - (void) setScriptTypedEncoding:(unsigned long) encoding {1013 [self setEncoding:[NSString stringEncodingFromScriptTypedEncoding: encoding]];1020 - (void) setScriptTypedEncoding:(unsigned long) newEncoding { 1021 [self setEncoding:[NSString stringEncodingFromScriptTypedEncoding:newEncoding]]; 1014 1022 } 1015 1023 trunk/Chat Core/MVChatPluginManager.h
r3072 r3344 9 9 + (NSArray *) pluginSearchPaths; 10 10 11 #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 12 @property(readonly) NSArray *plugins; 13 #else 14 - (NSArray *) plugins; 15 #endif 16 11 17 - (void) reloadPlugins; 12 18 - (void) addPlugin:(id) plugin; 13 19 - (void) removePlugin:(id) plugin; 14 20 15 - (NSArray *) plugins;16 21 - (NSArray *) pluginsThatRespondToSelector:(SEL) selector; 17 22 - (NSArray *) pluginsOfClass:(Class) class thatRespondToSelector:(SEL) selector; 18 19 - (NSEnumerator *) pluginEnumerator;20 - (NSEnumerator *) enumeratorOfPluginsThatRespondToSelector:(SEL) selector;21 - (NSEnumerator *) enumeratorOfPluginsOfClass:(Class) class thatRespondToSelector:(SEL) selector;22 23 - (unsigned int) numberOfPlugins;24 - (unsigned int) numberOfPluginsThatRespondToSelector:(SEL) selector;25 - (unsigned int) numberOfPluginsOfClass:(Class) class thatRespondToSelector:(SEL) selector;26 23 27 24 - (NSArray *) makePluginsPerformInvocation:(NSInvocation *) invocation; trunk/Chat Core/MVChatPluginManager.m
r3331 r3344 138 138 #pragma mark - 139 139 140 - (NSEnumerator *) pluginEnumerator {141 return [_plugins objectEnumerator];142 }143 144 - (NSEnumerator *) enumeratorOfPluginsThatRespondToSelector:(SEL) selector {145 return [self enumeratorOfPluginsOfClass:NULL thatRespondToSelector:selector];146 }147 148 - (NSEnumerator *) enumeratorOfPluginsOfClass:(Class) class thatRespondToSelector:(SEL) selector {149 return [[self pluginsOfClass:class thatRespondToSelector:selector] objectEnumerator];150 }151 152 #pragma mark -153 154 - (unsigned int) numberOfPlugins {155 return [_plugins count];156 }157 158 - (unsigned int) numberOfPluginsThatRespondToSelector:(SEL) selector {159 return [self numberOfPluginsOfClass:NULL thatRespondToSelector:selector];160 }161 162 - (unsigned int) numberOfPluginsOfClass:(Class) class thatRespondToSelector:(SEL) selector {163 NSParameterAssert( selector != NULL );164 165 unsigned int ret = 0;166 NSEnumerator *enumerator = [_plugins objectEnumerator];167 id plugin = nil;168 169 while( ( plugin = [enumerator nextObject] ) )170 if( ( ! class || ( class && [plugin isKindOfClass:class] ) ) && [plugin respondsToSelector:selector] )171 ret++;172 173 return ret;174 }175 176 #pragma mark -177 178 140 - (NSArray *) makePluginsPerformInvocation:(NSInvocation *) invocation { 179 141 return [self makePluginsPerformInvocation:invocation stoppingOnFirstSuccessfulReturn:NO]; … … 188 150 NSParameterAssert( [invocation selector] != NULL ); 189 151 190 NSEnumerator *enumerator = [ self enumeratorOfPluginsOfClass:class thatRespondToSelector:[invocation selector]];152 NSEnumerator *enumerator = [[self pluginsOfClass:class thatRespondToSelector:[invocation selector]] objectEnumerator]; 191 153 id plugin = nil; 192 154 trunk/Chat Core/MVChatRoom.h
r3228 r3344 59 59 NSDate *_dateJoined; 60 60 NSDate *_dateParted; 61 NSData *_topic Data;61 NSData *_topic; 62 62 MVChatUser *_topicAuthor; 63 63 NSDate *_dateTopicChanged; … … 72 72 BOOL _releasing; 73 73 } 74 75 #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 76 @property(readonly, ivar) MVChatConnection *connection; 77 78 @property(readonly) NSURL *url; 79 @property(readonly, ivar) NSString *name; 80 @property(readonly) NSString *displayName; 81 @property(readonly, ivar) id uniqueIdentifier; 82 83 @property(readonly) BOOL joined; 84 @property(readonly, ivar) NSDate *dateJoined; 85 @property(readonly, ivar) NSDate *dateParted; 86 87 @property(ivar) NSStringEncoding encoding; 88 89 @property(readonly, ivar) NSData *topic; 90 @property(readonly, ivar) MVChatUser *topicAuthor; 91 @property(readonly, ivar) NSDate *dateTopicChanged; 92 93 @property(readonly) NSSet *supportedAttributes; 94 @property(readonly) NSDictionary *attributes; 95 96 @property(readonly) unsigned long supportedModes; 97 @property(readonly) unsigned long supportedMemberUserModes; 98 @property(readonly, ivar) unsigned long modes; 99 100 @property(readonly) NSSet *memberUsers; 101 @property(readonly) NSSet *bannedUsers; 102 103 #else 104 74 105 - (MVChatConnection *) connection; 106 107 - (NSURL *) url; 108 - (NSString *) name; 109 - (NSString *) displayName; 110 - (id) uniqueIdentifier; 111 112 - (NSDate *) dateJoined; 113 - (NSDate *) dateParted; 114 115 - (NSStringEncoding) encoding; 116 - (void) setEncoding:(NSStringEncoding) encoding; 117 118 - (NSData *) topic; 119 - (MVChatUser *) topicAuthor; 120 - (NSDate *) dateTopicChanged; 121 122 - (NSSet *) supportedAttributes; 123 - (NSDictionary *) attributes; 124 125 - (unsigned long) supportedModes; 126 - (unsigned long) supportedMemberUserModes; 127 - (unsigned long) modes; 128 129 - (NSSet *) memberUsers; 130 - (NSSet *) bannedUsers; 131 #endif 75 132 76 133 - (BOOL) isEqual:(id) object; … … 80 137 - (NSComparisonResult) compareByUserCount:(MVChatRoom *) otherRoom; 81 138 82 - (NSURL *) url; 83 - (NSString *) name; 84 - (NSString *) displayName; 85 - (id) uniqueIdentifier; 139 - (BOOL) isJoined; 86 140 87 141 - (void) join; … … 89 143 - (void) partWithReason:(NSAttributedString *) reason; 90 144 91 - (BOOL) isJoined; 92 - (NSDate *) dateJoined; 93 - (NSDate *) dateParted; 94 95 - (NSStringEncoding) encoding; 96 - (void) setEncoding:(NSStringEncoding) encoding; 145 - (void) setTopic:(NSAttributedString *) topic; 97 146 98 147 - (void) sendMessage:(NSAttributedString *) message asAction:(BOOL) action; … … 102 151 - (void) sendSubcodeReply:(NSString *) command withArguments:(id) arguments; 103 152 104 - (NSData *) topic;105 - (MVChatUser *) topicAuthor;106 - (void) setTopic:(NSAttributedString *) topic;107 108 153 - (void) refreshAttributes; 109 154 - (void) refreshAttributeForKey:(NSString *) key; 110 155 111 - (NSSet *) supportedAttributes;112 113 - (NSDictionary *) attributes;114 156 - (BOOL) hasAttributeForKey:(NSString *) key; 115 157 - (id) attributeForKey:(NSString *) key; 116 158 - (void) setAttribute:(id) attribute forKey:(id) key; 117 159 118 - (unsigned long) supportedModes;119 120 - (unsigned long) modes;121 160 - (id) attributeForMode:(MVChatRoomMode) mode; 122 161 … … 126 165 - (void) removeMode:(MVChatRoomMode) mode; 127 166 128 - (NSSet *) memberUsers;129 167 - (NSSet *) memberUsersWithModes:(unsigned long) modes; 130 168 - (NSSet *) memberUsersWithNickname:(NSString *) nickname; … … 135 173 - (void) kickOutMemberUser:(MVChatUser *) user forReason:(NSAttributedString *) reason; 136 174 137 - (NSSet *) bannedUsers;138 175 - (void) addBanForUser:(MVChatUser *) user; 139 176 - (void) removeBanForUser:(MVChatUser *) user; 140 141 - (unsigned long) supportedMemberUserModes;142 177 143 178 - (unsigned long) modesForMemberUser:(MVChatUser *) user; … … 151 186 152 187 @interface MVChatRoom (MVChatRoomScripting) 188 #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 189 @property(readonly) NSString *scriptUniqueIdentifier; 190 @property(readonly) NSScriptObjectSpecifier *objectSpecifier; 191 #endif 192 153 193 - (NSString *) scriptUniqueIdentifier; 154 194 - (NSScriptObjectSpecifier *) objectSpecifier; trunk/Chat Core/MVChatRoom.m
r3301 r3344 53 53 - (id) init { 54 54 if( ( self = [super init] ) ) { 55 _connection = nil;56 _name = nil;57 _uniqueIdentifier = nil;58 _dateJoined = nil;59 _dateParted = nil;60 _topicData = nil;61 _topicAuthor = nil;62 _dateTopicChanged = nil;63 55 _attributes = [[NSMutableDictionary allocWithZone:nil] initWithCapacity:2]; 64 56 _memberUsers = [[NSMutableSet allocWithZone:nil] initWithCapacity:100]; … … 67 59 _memberModes = [[NSMutableDictionary allocWithZone:nil] initWithCapacity:100]; 68 60 _encoding = NSUTF8StringEncoding; 69 _modes = 0;70 61 } 71 62 … … 87 78 [_dateJoined release]; 88 79 [_dateParted release]; 89 [_topic Datarelease];80 [_topic release]; 90 81 [_topicAuthor release]; 91 82 [_dateTopicChanged release]; … … 101 92 _dateJoined = nil; 102 93 _dateParted = nil; 103 _topic Data= nil;94 _topic = nil; 104 95 _topicAuthor = nil; 105 96 _dateTopicChanged = nil; … … 115 106 #pragma mark - 116 107 108 #if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 117 109 - (MVChatConnection *) connection { 118 110 return _connection; 119 111 } 112 #endif 120 113 121 114 #pragma mark - … … 157 150 158 151 - (NSURL *) url { 159 NSString *url = [NSString stringWithFormat:@"%@://%@/%@", [[self connection] urlScheme], [[[self connection] server] stringByEncodingIllegalURLCharacters], [[self name] stringByEncodingIllegalURLCharacters]];160 if( url ) return [NSURL URLWithString:url];152 NSString *urlString = [NSString stringWithFormat:@"%@://%@/%@", [[self connection] urlScheme], [[[self connection] server] stringByEncodingIllegalURLCharacters], [[self name] stringByEncodingIllegalURLCharacters]]; 153 if( urlString ) return [NSURL URLWithString:urlString]; 161 154 return nil; 162 155 } 163 156 157 #if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 164 158 - (NSString *) name { 165 159 return [[_name retain] autorelease]; 166 160 } 161 #endif 167 162 168 163 - (NSString *) displayName { … … 170 165 } 171 166 167 #if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 172 168 - (id) uniqueIdentifier { 173 169 return [[_uniqueIdentifier retain] autorelease]; 174 170 } 171 #endif 175 172 176 173 #pragma mark - … … 194 191 #pragma mark - 195 192 193 #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 194 @property(readonly, getter=isJoined) BOOL joined; 195 #endif 196 196 197 - (BOOL) isJoined { 197 198 return ( [self dateJoined] && ! [self dateParted] ); 198 199 } 199 200 201 #if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 200 202 - (NSDate *) dateJoined { 201 203 return [[_dateJoined retain] autorelease]; … … 205 207 return [[_dateParted retain] autorelease]; 206 208 } 207 208 #pragma mark - 209 209 #endif 210 211 #pragma mark - 212 213 #if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 210 214 - (NSStringEncoding) encoding { 211 215 return _encoding; … … 215 219 _encoding = encoding; 216 220 } 221 #endif 217 222 218 223 #pragma mark - … … 239 244 #pragma mark - 240 245 246 #if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 241 247 - (NSData *) topic { 242 return [[_topicData retain] autorelease]; 243 } 244 248 return [[_topic retain] autorelease]; 249 } 250 #endif 251 252 - (void) setTopic:(NSAttributedString *) topic { 253 // subclass this method, if needed 254 } 255 256 #if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 245 257 - (MVChatUser *) topicAuthor { 246 258 return [[_topicAuthor retain] autorelease]; … … 250 262 return [[_dateTopicChanged retain] autorelease]; 251 263 } 252 253 - (void) setTopic:(NSAttributedString *) topic { 254 // subclass this method, if needed 255 } 264 #endif 256 265 257 266 #pragma mark - … … 314 323 #pragma mark - 315 324 325 #if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 316 326 - (unsigned long) modes { 317 327 return _modes; 318 328 } 329 #endif 319 330 320 331 - (id) attributeForMode:(MVChatRoomMode) mode { … … 327 338 #pragma mark - 328 339 329 - (void) setModes:(unsigned long) modes {330 NSParameterAssert( [self supportedModes] & modes );340 - (void) setModes:(unsigned long) newModes { 341 NSParameterAssert( [self supportedModes] & newModes ); 331 342 332 343 unsigned long curModes = [self modes]; 333 unsigned long diffModes = ( curModes ^ modes );344 unsigned long diffModes = ( curModes ^ newModes ); 334 345 335 346 unsigned i = 0; 336 347 for( i = 0; i <= 8; i++ ) { 337 348 if( ( 1 << i ) & diffModes ) { 338 if( ( 1 << i ) & modes ) [self setMode:( 1 << i ) withAttribute:nil];349 if( ( 1 << i ) & newModes ) [self setMode:( 1 << i ) withAttribute:nil]; 339 350 else [self removeMode:( 1 << i )]; 340 351 } … … 364 375 } 365 376 366 - (NSSet *) memberUsersWithModes:(unsigned long) modes {377 - (NSSet *) memberUsersWithModes:(unsigned long) newModes { 367 378 NSMutableSet *users = [[NSMutableSet allocWithZone:nil] init]; 368 379 … … 371 382 MVChatUser *user = nil; 372 383 while( ( user = [enumerator nextObject] ) ) 373 if( [self modesForMemberUser:user] & modes )384 if( [self modesForMemberUser:user] & newModes ) 374 385 [users addObject:user]; 375 386 } … … 468 479 #pragma mark - 469 480 470 - (void) setModes:(unsigned long) modes forMemberUser:(MVChatUser *) user {481 - (void) setModes:(unsigned long) newModes forMemberUser:(MVChatUser *) user { 471 482 NSParameterAssert( user != nil ); 472 NSParameterAssert( [self supportedMemberUserModes] & modes );483 NSParameterAssert( [self supportedMemberUserModes] & newModes ); 473 484 474 485 unsigned long curModes = [self modesForMemberUser:user]; 475 unsigned long diffModes = ( curModes ^ modes );486 unsigned long diffModes = ( curModes ^ newModes ); 476 487 477 488 unsigned i = 0; 478 489 for( i = 0; i <= 8; i++ ) { 479 490 if( ( 1 << i ) & diffModes ) { 480 if( ( 1 << i ) & modes ) [self setMode:( 1 << i ) forMemberUser:user];491 if( ( 1 << i ) & newModes ) [self setMode:( 1 << i ) forMemberUser:user]; 481 492 else [self removeMode:( 1 << i ) forMemberUser:user]; 482 493 } … … 546 557 } 547 558 548 - (void) _setModes:(unsigned long) modes forMemberUser:(MVChatUser *) user {559 - (void) _setModes:(unsigned long) newModes forMemberUser:(MVChatUser *) user { 549 560 @synchronized( _memberModes ) { 550 [_memberModes setObject:[NSNumber numberWithUnsignedLong: modes] forKey:[user uniqueIdentifier]];561 [_memberModes setObject:[NSNumber numberWithUnsignedLong:newModes] forKey:[user uniqueIdentifier]]; 551 562 } 552 563 } … … 554 565 - (void) _setMode:(MVChatRoomMe
