PNXMPPFramework/Extensions/XEP-0308/XMPPMessage+XEP_0308.m
2016-02-24 16:56:39 +01:00

89 lines
2.3 KiB
Objective-C

#import "XMPPMessage+XEP_0308.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 NAME_XMPP_MESSAGE_CORRECT @"replace"
#define XMLNS_XMPP_MESSAGE_CORRECT @"urn:xmpp:message-correct:0"
@implementation XMPPMessage (XEP_0308)
- (BOOL)isMessageCorrection
{
if([[self correctedMessageID] length])
{
return YES;
}
else
{
return NO;
}
}
- (NSString *)correctedMessageID
{
return [[self elementForName:NAME_XMPP_MESSAGE_CORRECT xmlns:XMLNS_XMPP_MESSAGE_CORRECT] attributeStringValueForName:@"id"];
}
- (void)addMessageCorrectionWithID:(NSString *)messageCorrectionID
{
NSXMLElement *replace = [NSXMLElement elementWithName:NAME_XMPP_MESSAGE_CORRECT stringValue:XMLNS_XMPP_MESSAGE_CORRECT];
[replace addAttributeWithName:@"id" stringValue:messageCorrectionID];
[self addChild:replace];
}
- (XMPPMessage *)generateCorrectionMessageWithID:(NSString *)elementID
{
XMPPMessage *correctionMessage = nil;
if([[self elementID] length] && ![self isMessageCorrection])
{
correctionMessage = [self copy];
[correctionMessage removeAttributeForName:@"id"];
if([elementID length])
{
[correctionMessage addAttributeWithName:@"id" stringValue:elementID];
}
[correctionMessage addMessageCorrectionWithID:[self elementID]];
}
return correctionMessage;
}
- (XMPPMessage *)generateCorrectionMessageWithID:(NSString *)elementID body:(NSString *)body
{
XMPPMessage *correctionMessage = nil;
if([[self elementID] length] && ![self isMessageCorrection])
{
correctionMessage = [self copy];
[correctionMessage removeAttributeForName:@"id"];
if([elementID length])
{
[correctionMessage addAttributeWithName:@"id" stringValue:elementID];
}
NSXMLElement *bodyElement = [correctionMessage elementForName:@"body"];
if(bodyElement)
{
[correctionMessage removeChildAtIndex:[[correctionMessage children] indexOfObject:bodyElement]];
}
[self addBody:body];
[correctionMessage addMessageCorrectionWithID:[self elementID]];
}
return correctionMessage;
}
@end