- Update
This commit is contained in:
1 parent
d281d765ea
commit
5b074a5176
1261 files changed
+199158
-7303
No files matched your search
@@ -0,0 +1,237 @@
|
||||
#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
|
||||
Reference in new issue
Block a user