238 lines
6.2 KiB
Objective-C
238 lines
6.2 KiB
Objective-C
#import "XMPPRoomOccupantHybridMemoryStorageObject.h"
|
|
|
|
|
|
@implementation XMPPRoomOccupantHybridMemoryStorageObject
|
|
{
|
|
XMPPPresence *presence;
|
|
XMPPJID *jid;
|
|
NSDate *createdAt;
|
|
XMPPJID *streamFullJid;
|
|
}
|
|
|
|
- (id)initWithPresence:(XMPPPresence *)inPresence streamFullJid:(XMPPJID *)inStreamFullJid
|
|
{
|
|
NSParameterAssert(inPresence != nil);
|
|
NSParameterAssert(inStreamFullJid != nil);
|
|
|
|
if ((self = [super init]))
|
|
{
|
|
presence = inPresence;
|
|
jid = [presence from];
|
|
createdAt = [[NSDate alloc] init];
|
|
streamFullJid = inStreamFullJid;
|
|
}
|
|
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"];
|
|
createdAt = [coder decodeObjectOfClass:[NSDate class] forKey:@"createdAt"];
|
|
streamFullJid = [coder decodeObjectOfClass:[XMPPJID class] forKey:@"streamFullJid"];
|
|
}
|
|
else
|
|
{
|
|
presence = [coder decodeObjectForKey:@"presence"];
|
|
jid = [coder decodeObjectForKey:@"jid"];
|
|
createdAt = [coder decodeObjectForKey:@"createdAt"];
|
|
streamFullJid = [coder decodeObjectForKey:@"streamFullJid"];
|
|
}
|
|
}
|
|
else
|
|
{
|
|
presence = [coder decodeObject];
|
|
jid = [coder decodeObject];
|
|
createdAt = [coder decodeObject];
|
|
streamFullJid = [coder decodeObject];
|
|
}
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)encodeWithCoder:(NSCoder *)coder
|
|
{
|
|
if ([coder allowsKeyedCoding])
|
|
{
|
|
[coder encodeObject:presence forKey:@"presence"];
|
|
[coder encodeObject:jid forKey:@"jid"];
|
|
[coder encodeObject:createdAt forKey:@"createdAt"];
|
|
[coder encodeObject:streamFullJid forKey:@"streamFullJid"];
|
|
}
|
|
else
|
|
{
|
|
[coder encodeObject:presence];
|
|
[coder encodeObject:jid];
|
|
[coder encodeObject:createdAt];
|
|
[coder encodeObject:streamFullJid];
|
|
}
|
|
}
|
|
|
|
+ (BOOL) supportsSecureCoding
|
|
{
|
|
return YES;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
#pragma mark Copying
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
- (id)copyWithZone:(NSZone *)zone
|
|
{
|
|
// We use [self class] to support subclassing
|
|
|
|
XMPPRoomOccupantHybridMemoryStorageObject *deepCopy;
|
|
deepCopy = (XMPPRoomOccupantHybridMemoryStorageObject *)[[[self class] alloc] init];
|
|
|
|
deepCopy->presence = [presence copy];
|
|
deepCopy->jid = [jid copy];
|
|
deepCopy->createdAt = [createdAt copy];
|
|
deepCopy->streamFullJid = [streamFullJid copy];
|
|
|
|
return deepCopy;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
#pragma mark Updates
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
- (void)updateWithPresence:(XMPPPresence *)inPresence
|
|
{
|
|
presence = inPresence;
|
|
jid = [inPresence from];
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
#pragma mark Properties
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
- (XMPPPresence *)presence
|
|
{
|
|
return presence;
|
|
}
|
|
|
|
- (XMPPJID *)jid
|
|
{
|
|
return jid;
|
|
}
|
|
|
|
- (XMPPJID *)roomJID
|
|
{
|
|
return [jid bareJID];
|
|
}
|
|
|
|
- (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;
|
|
}
|
|
|
|
- (NSDate *)createdAt
|
|
{
|
|
return createdAt;
|
|
}
|
|
|
|
- (XMPPJID *)streamFullJid
|
|
{
|
|
return streamFullJid;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
#pragma mark Compare
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
- (NSComparisonResult)compareByNickname:(XMPPRoomOccupantHybridMemoryStorageObject *)another
|
|
{
|
|
return [self.nickname compare:another.nickname];
|
|
}
|
|
|
|
- (NSComparisonResult)compareByCreatedAt:(XMPPRoomOccupantHybridMemoryStorageObject *)another
|
|
{
|
|
return [self.createdAt compare:another.createdAt];
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
#pragma mark NSObject Methods
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
- (NSUInteger)hash
|
|
{
|
|
return [jid hash];
|
|
}
|
|
|
|
- (BOOL)isEqual:(id)anObject
|
|
{
|
|
if ([anObject isMemberOfClass:[self class]])
|
|
{
|
|
XMPPRoomOccupantHybridMemoryStorageObject *another = (XMPPRoomOccupantHybridMemoryStorageObject *)anObject;
|
|
|
|
if ([jid isEqualToJID:[another jid]])
|
|
{
|
|
if ([streamFullJid isEqualToJID:[another streamFullJid]])
|
|
{
|
|
return YES;
|
|
}
|
|
}
|
|
}
|
|
|
|
return NO;
|
|
}
|
|
|
|
@end
|