89 lines
2.3 KiB
Objective-C
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
|