XMPPMessage+XEP_0308.m
2.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#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