143 lines
4.0 KiB
Objective-C
143 lines
4.0 KiB
Objective-C
#import "XMPPMessage+XEP_0333.h"
|
|
#import "NSXMLElement+XMPP.h"
|
|
|
|
#if ! __has_feature(objc_arc)
|
|
#warning This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
|
|
#endif
|
|
|
|
#define XMLNS_CHAT_MARKERS @"urn:xmpp:chat-markers:0"
|
|
|
|
#define MARKABLE_NAME @"markable"
|
|
#define RECEIVED_NAME @"received"
|
|
#define DISPLAYED_NAME @"displayed"
|
|
#define ACKNOWLEDGED_NAME @"acknowledged"
|
|
|
|
@implementation XMPPMessage (XEP_0333)
|
|
|
|
- (BOOL)hasChatMarker
|
|
{
|
|
return ([[self elementsForXmlns:XMLNS_CHAT_MARKERS] count] > 0);
|
|
}
|
|
|
|
- (BOOL)hasMarkableChatMarker
|
|
{
|
|
return ([self elementForName:MARKABLE_NAME xmlns:XMLNS_CHAT_MARKERS] != nil);
|
|
}
|
|
|
|
- (BOOL)hasReceivedChatMarker
|
|
{
|
|
return ([self elementForName:RECEIVED_NAME xmlns:XMLNS_CHAT_MARKERS] != nil);
|
|
}
|
|
|
|
- (BOOL)hasDisplayedChatMarker
|
|
{
|
|
return ([self elementForName:DISPLAYED_NAME xmlns:XMLNS_CHAT_MARKERS] != nil);
|
|
}
|
|
|
|
- (BOOL)hasAcknowledgedChatMarker
|
|
{
|
|
return ([self elementForName:ACKNOWLEDGED_NAME xmlns:XMLNS_CHAT_MARKERS] != nil);
|
|
}
|
|
|
|
- (NSString *)chatMarker
|
|
{
|
|
return [[[self elementsForXmlns:XMLNS_CHAT_MARKERS] lastObject] name];
|
|
}
|
|
|
|
- (NSString *)chatMarkerID
|
|
{
|
|
return [[[self elementsForXmlns:XMLNS_CHAT_MARKERS] lastObject] attributeStringValueForName:@"id"];
|
|
}
|
|
|
|
- (NSString *)chatMarkerThread
|
|
{
|
|
return [[[self elementsForXmlns:XMLNS_CHAT_MARKERS] lastObject] attributeStringValueForName:@"thread"];
|
|
}
|
|
|
|
- (void)addMarkableChatMarker
|
|
{
|
|
NSXMLElement *markableDisplayedMarker = [[NSXMLElement alloc] initWithName:MARKABLE_NAME xmlns:XMLNS_CHAT_MARKERS];
|
|
[self addChild:markableDisplayedMarker];
|
|
}
|
|
|
|
- (void)addReceivedChatMarkerWithID:(NSString *)elementID
|
|
{
|
|
NSXMLElement *receivedChatMarker = [[NSXMLElement alloc] initWithName:RECEIVED_NAME xmlns:XMLNS_CHAT_MARKERS];
|
|
[receivedChatMarker addAttributeWithName:@"id" stringValue:elementID];
|
|
|
|
[self addChild:receivedChatMarker];
|
|
}
|
|
|
|
- (void)addDisplayedChatMarkerWithID:(NSString *)elementID
|
|
{
|
|
NSXMLElement *readDisplayedMarker = [[NSXMLElement alloc] initWithName:DISPLAYED_NAME xmlns:XMLNS_CHAT_MARKERS];
|
|
[readDisplayedMarker addAttributeWithName:@"id" stringValue:elementID];
|
|
|
|
[self addChild:readDisplayedMarker];
|
|
}
|
|
|
|
- (void)addAcknowledgedChatMarkerWithID:(NSString *)elementID
|
|
{
|
|
NSXMLElement *acknowledgedChatMarker = [[NSXMLElement alloc] initWithName:ACKNOWLEDGED_NAME xmlns:XMLNS_CHAT_MARKERS];
|
|
[acknowledgedChatMarker addAttributeWithName:@"id" stringValue:elementID];
|
|
|
|
[self addChild:acknowledgedChatMarker];
|
|
}
|
|
|
|
- (XMPPMessage *)generateReceivedChatMarker
|
|
{
|
|
return [self generateReceivedChatMarkerIncludingThread:NO];
|
|
}
|
|
|
|
- (XMPPMessage *)generateDisplayedChatMarker
|
|
{
|
|
return [self generateDisplayedChatMarkerIncludingThread:NO];
|
|
}
|
|
|
|
- (XMPPMessage *)generateAcknowledgedChatMarker
|
|
{
|
|
return [self generateAcknowledgedChatMarkerIncludingThread:NO];
|
|
}
|
|
|
|
- (XMPPMessage *)generateReceivedChatMarkerIncludingThread:(BOOL)includingThread
|
|
{
|
|
XMPPMessage *message = [XMPPMessage message];
|
|
[message addAttributeWithName:@"to" stringValue:[self fromStr]];
|
|
|
|
if(includingThread && [self thread])
|
|
{
|
|
[message addThread:[self thread]];
|
|
}
|
|
|
|
[message addReceivedChatMarkerWithID:[self elementID]];
|
|
|
|
return message;
|
|
}
|
|
- (XMPPMessage *)generateDisplayedChatMarkerIncludingThread:(BOOL)includingThread
|
|
{
|
|
XMPPMessage *message = [XMPPMessage message];
|
|
[message addAttributeWithName:@"to" stringValue:[self fromStr]];
|
|
|
|
if(includingThread && [self thread])
|
|
{
|
|
[message addThread:[self thread]];
|
|
}
|
|
|
|
[message addDisplayedChatMarkerWithID:[self elementID]];
|
|
return message;
|
|
}
|
|
- (XMPPMessage *)generateAcknowledgedChatMarkerIncludingThread:(BOOL)includingThread
|
|
{
|
|
XMPPMessage *message = [XMPPMessage message];
|
|
[message addAttributeWithName:@"to" stringValue:[self fromStr]];
|
|
|
|
if(includingThread && [self thread])
|
|
{
|
|
[message addThread:[self thread]];
|
|
}
|
|
|
|
[message addAcknowledgedChatMarkerWithID:[self elementID]];
|
|
return message;
|
|
}
|
|
@end
|