197 lines
4.8 KiB
Objective-C
197 lines
4.8 KiB
Objective-C
#import "XMPPRoomOccupantMemoryStorageObject.h"
|
|
|
|
|
|
@implementation XMPPRoomOccupantMemoryStorageObject
|
|
{
|
|
XMPPPresence *presence;
|
|
XMPPJID *jid;
|
|
}
|
|
|
|
- (id)initWithPresence:(XMPPPresence *)inPresence
|
|
{
|
|
if ((self = [super init]))
|
|
{
|
|
presence = inPresence;
|
|
jid = [inPresence from];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
#pragma mark Encoding, Decoding
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#if ! TARGET_OS_IPHONE
|
|
- (id)replacementObjectForPortCoder:(NSPortCoder *)encoder
|
|
{
|
|
if ([encoder isBycopy])
|
|
return self;
|
|
else
|
|
return [super replacementObjectForPortCoder:encoder];
|
|
// return [NSDistantObject proxyWithLocal:self connection:[encoder connection]];
|
|
}
|
|
#endif
|
|
|
|
- (id)initWithCoder:(NSCoder *)coder
|
|
{
|
|
if ((self = [super init]))
|
|
{
|
|
if ([coder allowsKeyedCoding])
|
|
{
|
|
if([coder respondsToSelector:@selector(requiresSecureCoding)] &&
|
|
[coder requiresSecureCoding])
|
|
{
|
|
presence = [coder decodeObjectOfClass:[XMPPPresence class] forKey:@"presence"];
|
|
jid = [coder decodeObjectOfClass:[XMPPJID class] forKey:@"jid"];
|
|
}
|
|
else
|
|
{
|
|
presence = [coder decodeObjectForKey:@"presence"];
|
|
jid = [coder decodeObjectForKey:@"jid"];
|
|
}
|
|
}
|
|
else
|
|
{
|
|
presence = [coder decodeObject];
|
|
jid = [coder decodeObject];
|
|
}
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)encodeWithCoder:(NSCoder *)coder
|
|
{
|
|
if ([coder allowsKeyedCoding])
|
|
{
|
|
[coder encodeObject:presence forKey:@"presence"];
|
|
[coder encodeObject:jid forKey:@"jid"];
|
|
}
|
|
else
|
|
{
|
|
[coder encodeObject:presence];
|
|
[coder encodeObject:jid];
|
|
}
|
|
}
|
|
|
|
+ (BOOL) supportsSecureCoding
|
|
{
|
|
return YES;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
#pragma mark Copying
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
- (id)copyWithZone:(NSZone *)zone
|
|
{
|
|
// We use [self class] to support subclassing
|
|
|
|
XMPPRoomOccupantMemoryStorageObject *deepCopy = (XMPPRoomOccupantMemoryStorageObject *)[[[self class] alloc] init];
|
|
|
|
deepCopy->presence = [presence copy];
|
|
deepCopy->jid = [jid copy];
|
|
|
|
return deepCopy;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
#pragma mark Updates
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
- (void)updateWithPresence:(XMPPPresence *)inPresence
|
|
{
|
|
presence = inPresence;
|
|
jid = [inPresence from];
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
#pragma mark Properties
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
- (XMPPJID *)roomJID
|
|
{
|
|
return [jid bareJID];
|
|
}
|
|
|
|
- (XMPPJID *)jid
|
|
{
|
|
return jid;
|
|
}
|
|
|
|
- (NSString *)nickname
|
|
{
|
|
return [jid resource];
|
|
}
|
|
|
|
- (NSString *)itemAttributeStringValueForName:(NSString *)attrName
|
|
{
|
|
NSXMLElement *x = [presence elementForName:@"x" xmlns:@"http://jabber.org/protocol/muc#user"];
|
|
NSXMLElement *item = [x elementForName:@"item"];
|
|
if (item)
|
|
{
|
|
NSString *result = [item attributeStringValueForName:attrName];
|
|
if (result)
|
|
{
|
|
return [result lowercaseString];
|
|
}
|
|
}
|
|
|
|
return nil;
|
|
}
|
|
|
|
- (NSString *)role
|
|
{
|
|
return [self itemAttributeStringValueForName:@"role"];
|
|
}
|
|
|
|
- (NSString *)affiliation
|
|
{
|
|
return [self itemAttributeStringValueForName:@"affiliation"];
|
|
}
|
|
|
|
- (XMPPJID *)realJID
|
|
{
|
|
NSString *jidStr = [self itemAttributeStringValueForName:@"jid"];
|
|
if (jidStr)
|
|
return [XMPPJID jidWithString:jidStr];
|
|
else
|
|
return nil;
|
|
}
|
|
|
|
- (XMPPPresence *)presence
|
|
{
|
|
return presence;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
#pragma mark Comparisons
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
- (NSComparisonResult)compare:(XMPPRoomOccupantMemoryStorageObject *)another
|
|
{
|
|
return [self.nickname compare:another.nickname];
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
#pragma mark NSObject Methods
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
- (NSUInteger)hash
|
|
{
|
|
return [jid hash];
|
|
}
|
|
|
|
- (BOOL)isEqual:(id)anObject
|
|
{
|
|
if ([anObject isMemberOfClass:[self class]])
|
|
{
|
|
XMPPRoomOccupantMemoryStorageObject *another = (XMPPRoomOccupantMemoryStorageObject *)anObject;
|
|
|
|
return [jid isEqualToJID:[another jid]];
|
|
}
|
|
|
|
return NO;
|
|
}
|
|
|
|
@end
|