-
Notifications
You must be signed in to change notification settings - Fork 7
/
XMPPSearchReported.m
72 lines (61 loc) · 2.67 KB
/
XMPPSearchReported.m
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
//
// XMPPSearchReported.m
// SOP2p
//
// Created by zrz on 12-8-19.
// Copyright (c) 2012年 Sctab. All rights reserved.
//
#import "XMPPSearchReported.h"
@implementation XMPPSearchReported
+ (id)reportWithElement:(NSXMLElement *)element
{
XMPPSearchReported *report = [[self alloc] init];
NSXMLElement *query = [[element elementsForName:@"query"] lastObject];
NSXMLElement *x = [[query elementsForName:@"x"] lastObject];
NSArray *singleItems = [query elementsForName:@"item"];
if (x) {
NSXMLElement *reported = [[x elementsForName:@"reported"] lastObject];
NSArray *reportFields = [reported elementsForName:@"field"];
NSMutableArray *mReports = [NSMutableArray arrayWithCapacity:reportFields.count];
for (NSXMLElement *reportField in reportFields) {
[mReports addObject:[XMPPSearchNode nodeWithElement:reportField]];
}
report.reporteds = [mReports copy];
NSArray *items = [x elementsForName:@"item"];
NSMutableArray *mItems = [NSMutableArray arrayWithCapacity:items.count];
for (NSXMLElement *itemXml in items) {
NSArray *fields = [itemXml elementsForName:@"field"];
NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithCapacity:fields.count];
for (NSXMLElement *fieldInItem in fields) {
NSString *name = [[fieldInItem attributeForName:@"var"] stringValue];
NSString *value = [[[fieldInItem elementsForName:@"value"] lastObject] stringValue];
if (name && value) {
[dic setObject:value
forKey:name];
}
}
[mItems addObject:[dic copy]];
}
report.items = [mItems copy];
}else if (singleItems.count > 0) {
__block NSMutableArray *mItems = [NSMutableArray arrayWithCapacity:singleItems.count];
[singleItems enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSXMLElement *e = obj;
NSArray* children = [e children];
__block NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithCapacity:children.count + 1];
[dic setObject:@"jid" forKey:[[e attributeForName:@"jid"] stringValue]];
[children enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[dic setObject:[obj name] forKey:[obj stringValue]];
}];
[mItems addObject:dic];
}];
report.items = [mItems copy];
}
return report;
}
- (NSXMLElement *)xmlElement
{
// not finished, this method will be used in the server part.
return nil;
}
@end