root / asi-http-request-with-pithos / Classes / Pithos / ASIPithosAccountRequest.m @ 6b3a5e6a
History | View | Annotate | Download (12.1 kB)
1 | be116d22 | Miltiadis Vasilakis | // ASIPithosAccountRequest.m |
---|---|---|---|
2 | be116d22 | Miltiadis Vasilakis | // Based on ASICloudFilesContainerRequest.m |
3 | be116d22 | Miltiadis Vasilakis | // |
4 | be116d22 | Miltiadis Vasilakis | // Copyright 2011 GRNET S.A. All rights reserved. |
5 | be116d22 | Miltiadis Vasilakis | // |
6 | be116d22 | Miltiadis Vasilakis | // Redistribution and use in source and binary forms, with or |
7 | be116d22 | Miltiadis Vasilakis | // without modification, are permitted provided that the following |
8 | be116d22 | Miltiadis Vasilakis | // conditions are met: |
9 | be116d22 | Miltiadis Vasilakis | // |
10 | be116d22 | Miltiadis Vasilakis | // 1. Redistributions of source code must retain the above |
11 | be116d22 | Miltiadis Vasilakis | // copyright notice, this list of conditions and the following |
12 | be116d22 | Miltiadis Vasilakis | // disclaimer. |
13 | be116d22 | Miltiadis Vasilakis | // |
14 | be116d22 | Miltiadis Vasilakis | // 2. Redistributions in binary form must reproduce the above |
15 | be116d22 | Miltiadis Vasilakis | // copyright notice, this list of conditions and the following |
16 | be116d22 | Miltiadis Vasilakis | // disclaimer in the documentation and/or other materials |
17 | be116d22 | Miltiadis Vasilakis | // provided with the distribution. |
18 | be116d22 | Miltiadis Vasilakis | // |
19 | be116d22 | Miltiadis Vasilakis | // THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS |
20 | be116d22 | Miltiadis Vasilakis | // OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
21 | be116d22 | Miltiadis Vasilakis | // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
22 | be116d22 | Miltiadis Vasilakis | // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR |
23 | be116d22 | Miltiadis Vasilakis | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
24 | be116d22 | Miltiadis Vasilakis | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
25 | be116d22 | Miltiadis Vasilakis | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
26 | be116d22 | Miltiadis Vasilakis | // USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
27 | be116d22 | Miltiadis Vasilakis | // AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
28 | be116d22 | Miltiadis Vasilakis | // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
29 | be116d22 | Miltiadis Vasilakis | // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
30 | be116d22 | Miltiadis Vasilakis | // POSSIBILITY OF SUCH DAMAGE. |
31 | be116d22 | Miltiadis Vasilakis | // |
32 | be116d22 | Miltiadis Vasilakis | // The views and conclusions contained in the software and |
33 | be116d22 | Miltiadis Vasilakis | // documentation are those of the authors and should not be |
34 | be116d22 | Miltiadis Vasilakis | // interpreted as representing official policies, either expressed |
35 | be116d22 | Miltiadis Vasilakis | // or implied, of GRNET S.A. |
36 | be116d22 | Miltiadis Vasilakis | |
37 | be116d22 | Miltiadis Vasilakis | #import "ASIPithosAccountRequest.h" |
38 | 78355da3 | Miltiadis Vasilakis | #import "ASIPithosAccount.h" |
39 | be116d22 | Miltiadis Vasilakis | #import "ASIPithosContainer.h" |
40 | be116d22 | Miltiadis Vasilakis | |
41 | be116d22 | Miltiadis Vasilakis | @implementation ASIPithosAccountRequest |
42 | 6ba383d0 | Miltiadis Vasilakis | @synthesize currentContainer; |
43 | be116d22 | Miltiadis Vasilakis | |
44 | be116d22 | Miltiadis Vasilakis | #pragma mark - |
45 | be116d22 | Miltiadis Vasilakis | #pragma mark Constructors |
46 | be116d22 | Miltiadis Vasilakis | |
47 | be116d22 | Miltiadis Vasilakis | + (id)storageRequestWithMethod:(NSString *)method queryString:(NSString *)queryString { |
48 | be116d22 | Miltiadis Vasilakis | NSString *urlString = [NSString stringWithString:[self storageURL]]; |
49 | be116d22 | Miltiadis Vasilakis | if (queryString) |
50 | be116d22 | Miltiadis Vasilakis | urlString = [urlString stringByAppendingString:queryString]; |
51 | be116d22 | Miltiadis Vasilakis | |
52 | be116d22 | Miltiadis Vasilakis | ASIPithosAccountRequest *request = [[[self alloc] initWithURL:[NSURL URLWithString:urlString]] autorelease]; |
53 | be116d22 | Miltiadis Vasilakis | [request setRequestMethod:method]; |
54 | be116d22 | Miltiadis Vasilakis | [request addRequestHeader:@"X-Auth-Token" value:[self authToken]]; |
55 | be116d22 | Miltiadis Vasilakis | return request; |
56 | be116d22 | Miltiadis Vasilakis | } |
57 | be116d22 | Miltiadis Vasilakis | |
58 | be116d22 | Miltiadis Vasilakis | + (id)storageRequestWithMethod:(NSString *)method { |
59 | be116d22 | Miltiadis Vasilakis | return [self storageRequestWithMethod:method queryString:nil]; |
60 | be116d22 | Miltiadis Vasilakis | } |
61 | be116d22 | Miltiadis Vasilakis | |
62 | be116d22 | Miltiadis Vasilakis | #pragma mark - |
63 | be116d22 | Miltiadis Vasilakis | #pragma mark Memory Management |
64 | be116d22 | Miltiadis Vasilakis | |
65 | be116d22 | Miltiadis Vasilakis | - (void)dealloc { |
66 | be116d22 | Miltiadis Vasilakis | [currentContainer release]; |
67 | be116d22 | Miltiadis Vasilakis | [containers release]; |
68 | be116d22 | Miltiadis Vasilakis | [metadata release]; |
69 | 0a4b9bd3 | Miltiadis Vasilakis | [policy release]; |
70 | be116d22 | Miltiadis Vasilakis | [groups release]; |
71 | be116d22 | Miltiadis Vasilakis | [super dealloc]; |
72 | be116d22 | Miltiadis Vasilakis | } |
73 | be116d22 | Miltiadis Vasilakis | |
74 | be116d22 | Miltiadis Vasilakis | #pragma mark - |
75 | be116d22 | Miltiadis Vasilakis | #pragma mark HEAD |
76 | be116d22 | Miltiadis Vasilakis | |
77 | be116d22 | Miltiadis Vasilakis | // HEAD storageURL |
78 | be116d22 | Miltiadis Vasilakis | + (id)accountMetadataRequest { |
79 | be116d22 | Miltiadis Vasilakis | return [self storageRequestWithMethod:@"HEAD"]; |
80 | be116d22 | Miltiadis Vasilakis | } |
81 | be116d22 | Miltiadis Vasilakis | |
82 | be116d22 | Miltiadis Vasilakis | // HEAD storageURL?[until=untilTimestamp] |
83 | be116d22 | Miltiadis Vasilakis | + (id)accountMetadataRequestUntil:(NSDate *)untilTimestamp { |
84 | be116d22 | Miltiadis Vasilakis | NSString *queryString = nil; |
85 | be116d22 | Miltiadis Vasilakis | if (untilTimestamp) |
86 | be116d22 | Miltiadis Vasilakis | queryString = [NSString stringWithFormat:@"?until=%d", (int)[untilTimestamp timeIntervalSince1970]]; |
87 | be116d22 | Miltiadis Vasilakis | return [self storageRequestWithMethod:@"HEAD" queryString:queryString]; |
88 | be116d22 | Miltiadis Vasilakis | } |
89 | be116d22 | Miltiadis Vasilakis | |
90 | be116d22 | Miltiadis Vasilakis | // HEAD storageURL?[until=untilTimestamp] [If-Modified-Since] |
91 | be116d22 | Miltiadis Vasilakis | + (id)accountMetadataRequestUntil:(NSDate *)untilTimestamp ifModifiedSince:(NSDate *)sinceTimestamp { |
92 | be116d22 | Miltiadis Vasilakis | ASIPithosAccountRequest *request = [self accountMetadataRequestUntil:untilTimestamp]; |
93 | be116d22 | Miltiadis Vasilakis | [request addRequestIfModifiedSinceHeader:sinceTimestamp]; |
94 | be116d22 | Miltiadis Vasilakis | return request; |
95 | be116d22 | Miltiadis Vasilakis | } |
96 | be116d22 | Miltiadis Vasilakis | |
97 | be116d22 | Miltiadis Vasilakis | // HEAD storageURL?[until=untilTimestamp] [If-Unmodified-Since] |
98 | be116d22 | Miltiadis Vasilakis | + (id)accountMetadataRequestUntil:(NSDate *)untilTimestamp ifUnmodifiedSince:(NSDate *)sinceTimestamp { |
99 | be116d22 | Miltiadis Vasilakis | ASIPithosAccountRequest *request = [self accountMetadataRequestUntil:untilTimestamp]; |
100 | be116d22 | Miltiadis Vasilakis | [request addRequestIfUnmodifiedSinceHeader:sinceTimestamp]; |
101 | be116d22 | Miltiadis Vasilakis | return request; |
102 | be116d22 | Miltiadis Vasilakis | } |
103 | be116d22 | Miltiadis Vasilakis | |
104 | be116d22 | Miltiadis Vasilakis | - (NSUInteger)containerCount { |
105 | be116d22 | Miltiadis Vasilakis | return [[[self responseHeaders] objectForKey:@"X-Account-Container-Count"] intValue]; |
106 | be116d22 | Miltiadis Vasilakis | } |
107 | be116d22 | Miltiadis Vasilakis | |
108 | be116d22 | Miltiadis Vasilakis | - (NSUInteger)bytesUsed { |
109 | be116d22 | Miltiadis Vasilakis | return [[[self responseHeaders] objectForKey:@"X-Account-Bytes-Used"] intValue]; |
110 | be116d22 | Miltiadis Vasilakis | } |
111 | be116d22 | Miltiadis Vasilakis | |
112 | be116d22 | Miltiadis Vasilakis | - (NSDate *)untilTimestamp { |
113 | be116d22 | Miltiadis Vasilakis | NSString *untilTimestampString = [[self responseHeaders] objectForKey:@"X-Account-Until-Timestamp"]; |
114 | be116d22 | Miltiadis Vasilakis | if (untilTimestampString) |
115 | be116d22 | Miltiadis Vasilakis | return [[self dateFormatterWithFormatId:1] dateFromString:untilTimestampString]; |
116 | be116d22 | Miltiadis Vasilakis | return nil; |
117 | be116d22 | Miltiadis Vasilakis | } |
118 | be116d22 | Miltiadis Vasilakis | |
119 | be116d22 | Miltiadis Vasilakis | - (NSDictionary *)groups { |
120 | be116d22 | Miltiadis Vasilakis | if (groups == nil) { |
121 | be116d22 | Miltiadis Vasilakis | groups = [self getHeadersDictionaryForPrefix:@"X-Account-Group-"]; |
122 | be116d22 | Miltiadis Vasilakis | [groups retain]; |
123 | be116d22 | Miltiadis Vasilakis | } |
124 | be116d22 | Miltiadis Vasilakis | return groups; |
125 | be116d22 | Miltiadis Vasilakis | } |
126 | be116d22 | Miltiadis Vasilakis | |
127 | 0a4b9bd3 | Miltiadis Vasilakis | - (NSDictionary *)policy { |
128 | 0a4b9bd3 | Miltiadis Vasilakis | if (policy == nil) { |
129 | 0a4b9bd3 | Miltiadis Vasilakis | policy = [self getHeadersDictionaryForPrefix:@"X-Account-Policy-"]; |
130 | 0a4b9bd3 | Miltiadis Vasilakis | [policy retain]; |
131 | 0a4b9bd3 | Miltiadis Vasilakis | } |
132 | 0a4b9bd3 | Miltiadis Vasilakis | return policy; |
133 | 0a4b9bd3 | Miltiadis Vasilakis | } |
134 | 0a4b9bd3 | Miltiadis Vasilakis | |
135 | be116d22 | Miltiadis Vasilakis | - (NSDictionary *)metadata { |
136 | be116d22 | Miltiadis Vasilakis | if (metadata == nil) { |
137 | be116d22 | Miltiadis Vasilakis | metadata = [self getHeadersDictionaryForPrefix:@"X-Account-Meta-"]; |
138 | be116d22 | Miltiadis Vasilakis | [metadata retain]; |
139 | be116d22 | Miltiadis Vasilakis | } |
140 | be116d22 | Miltiadis Vasilakis | return metadata; |
141 | be116d22 | Miltiadis Vasilakis | } |
142 | be116d22 | Miltiadis Vasilakis | |
143 | be116d22 | Miltiadis Vasilakis | - (NSDate *)lastModified { |
144 | be116d22 | Miltiadis Vasilakis | NSString *lastModifiedString = [[self responseHeaders] objectForKey:@"Last-Modified"]; |
145 | be116d22 | Miltiadis Vasilakis | if (lastModifiedString) |
146 | be116d22 | Miltiadis Vasilakis | return [[self dateFormatterWithFormatId:1] dateFromString:lastModifiedString]; |
147 | be116d22 | Miltiadis Vasilakis | return nil; |
148 | be116d22 | Miltiadis Vasilakis | } |
149 | be116d22 | Miltiadis Vasilakis | |
150 | 78355da3 | Miltiadis Vasilakis | - (ASIPithosAccount *)account { |
151 | 78355da3 | Miltiadis Vasilakis | ASIPithosAccount *account = [ASIPithosAccount account]; |
152 | 78355da3 | Miltiadis Vasilakis | account.containerCount = [self containerCount]; |
153 | 78355da3 | Miltiadis Vasilakis | account.bytesUsed = [self bytesUsed]; |
154 | 78355da3 | Miltiadis Vasilakis | account.untilTimestamp = [self untilTimestamp]; |
155 | 78355da3 | Miltiadis Vasilakis | account.groups = (NSMutableDictionary *)[self groups]; |
156 | 0a4b9bd3 | Miltiadis Vasilakis | account.policy = (NSMutableDictionary *)[self policy]; |
157 | 78355da3 | Miltiadis Vasilakis | account.metadata = (NSMutableDictionary *)[self metadata]; |
158 | 78355da3 | Miltiadis Vasilakis | account.lastModified = [self lastModified]; |
159 | 78355da3 | Miltiadis Vasilakis | return account; |
160 | 78355da3 | Miltiadis Vasilakis | } |
161 | 78355da3 | Miltiadis Vasilakis | |
162 | 78355da3 | Miltiadis Vasilakis | |
163 | be116d22 | Miltiadis Vasilakis | #pragma mark - |
164 | be116d22 | Miltiadis Vasilakis | #pragma mark GET |
165 | be116d22 | Miltiadis Vasilakis | |
166 | be116d22 | Miltiadis Vasilakis | // GET storageURL |
167 | be116d22 | Miltiadis Vasilakis | + (id)listContainersRequest { |
168 | be116d22 | Miltiadis Vasilakis | return [self storageRequestWithMethod:@"GET" queryString:@"?format=xml"]; |
169 | be116d22 | Miltiadis Vasilakis | } |
170 | be116d22 | Miltiadis Vasilakis | |
171 | be116d22 | Miltiadis Vasilakis | // GET storageURL?[limit=limit]&[marker=marker]&[shared=]&[until=untilTimestamp] |
172 | be116d22 | Miltiadis Vasilakis | + (id)listContainersRequestWithLimit:(NSUInteger)limit |
173 | be116d22 | Miltiadis Vasilakis | marker:(NSString *)marker |
174 | be116d22 | Miltiadis Vasilakis | shared:(BOOL)shared |
175 | be116d22 | Miltiadis Vasilakis | until:(NSDate *)untilTimestamp { |
176 | be116d22 | Miltiadis Vasilakis | NSString *queryString = @"?format=xml"; |
177 | be116d22 | Miltiadis Vasilakis | if (limit && (limit > 0)) |
178 | be116d22 | Miltiadis Vasilakis | queryString = [queryString stringByAppendingString:[NSString stringWithFormat:@"&limit=%lu", limit]]; |
179 | be116d22 | Miltiadis Vasilakis | if (marker) |
180 | be116d22 | Miltiadis Vasilakis | queryString = [queryString stringByAppendingString:[NSString stringWithFormat:@"&marker=%@", [marker stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]]; |
181 | be116d22 | Miltiadis Vasilakis | if (shared) |
182 | be116d22 | Miltiadis Vasilakis | queryString = [queryString stringByAppendingString:@"&shared="]; |
183 | be116d22 | Miltiadis Vasilakis | if (untilTimestamp) |
184 | be116d22 | Miltiadis Vasilakis | queryString = [queryString stringByAppendingString:[NSString stringWithFormat:@"&until=%d", (int)[untilTimestamp timeIntervalSince1970]]]; |
185 | be116d22 | Miltiadis Vasilakis | |
186 | be116d22 | Miltiadis Vasilakis | return [self storageRequestWithMethod:@"GET" queryString:queryString]; |
187 | be116d22 | Miltiadis Vasilakis | } |
188 | be116d22 | Miltiadis Vasilakis | |
189 | be116d22 | Miltiadis Vasilakis | // GET storageURL?[limit=limit]&[marker=marker]&[shared=]&[until=untilTimestamp] [If-Modified-Since] |
190 | be116d22 | Miltiadis Vasilakis | + (id)listContainersRequestWithLimit:(NSUInteger)limit |
191 | be116d22 | Miltiadis Vasilakis | marker:(NSString *)marker |
192 | be116d22 | Miltiadis Vasilakis | shared:(BOOL)shared |
193 | be116d22 | Miltiadis Vasilakis | until:(NSDate *)untilTimestamp |
194 | be116d22 | Miltiadis Vasilakis | ifModifiedSince:(NSDate *)sinceTimestamp { |
195 | be116d22 | Miltiadis Vasilakis | ASIPithosAccountRequest *request = [self listContainersRequestWithLimit:limit marker:marker shared:shared until:untilTimestamp]; |
196 | be116d22 | Miltiadis Vasilakis | [request addRequestIfModifiedSinceHeader:sinceTimestamp]; |
197 | be116d22 | Miltiadis Vasilakis | return request; |
198 | be116d22 | Miltiadis Vasilakis | } |
199 | be116d22 | Miltiadis Vasilakis | |
200 | be116d22 | Miltiadis Vasilakis | // GET storageURL?[limit=limit]&[marker=marker]&[shared=]&[until=untilTimestamp] [If-Unmodified-Since] |
201 | be116d22 | Miltiadis Vasilakis | + (id)listContainersRequestWithLimit:(NSUInteger)limit |
202 | be116d22 | Miltiadis Vasilakis | marker:(NSString *)marker |
203 | be116d22 | Miltiadis Vasilakis | shared:(BOOL)shared |
204 | be116d22 | Miltiadis Vasilakis | until:(NSDate *)untilTimestamp |
205 | be116d22 | Miltiadis Vasilakis | ifUnmodifiedSince:(NSDate *)sinceTimestamp { |
206 | be116d22 | Miltiadis Vasilakis | ASIPithosAccountRequest *request = [self listContainersRequestWithLimit:limit marker:marker shared:shared until:untilTimestamp]; |
207 | be116d22 | Miltiadis Vasilakis | [request addRequestIfUnmodifiedSinceHeader:sinceTimestamp]; |
208 | be116d22 | Miltiadis Vasilakis | return request; |
209 | be116d22 | Miltiadis Vasilakis | } |
210 | be116d22 | Miltiadis Vasilakis | |
211 | be116d22 | Miltiadis Vasilakis | |
212 | be116d22 | Miltiadis Vasilakis | - (NSArray *)containers { |
213 | be116d22 | Miltiadis Vasilakis | if (containers == nil) { |
214 | be116d22 | Miltiadis Vasilakis | containers = [[NSMutableArray alloc] init]; |
215 | be116d22 | Miltiadis Vasilakis | |
216 | be116d22 | Miltiadis Vasilakis | NSXMLParser *parser = [[[NSXMLParser alloc] initWithData:[self responseData]] autorelease]; |
217 | be116d22 | Miltiadis Vasilakis | [parser setDelegate:self]; |
218 | be116d22 | Miltiadis Vasilakis | [parser setShouldProcessNamespaces:NO]; |
219 | be116d22 | Miltiadis Vasilakis | [parser setShouldReportNamespacePrefixes:NO]; |
220 | be116d22 | Miltiadis Vasilakis | [parser setShouldResolveExternalEntities:NO]; |
221 | be116d22 | Miltiadis Vasilakis | [parser parse]; |
222 | be116d22 | Miltiadis Vasilakis | } |
223 | be116d22 | Miltiadis Vasilakis | return containers; |
224 | be116d22 | Miltiadis Vasilakis | } |
225 | be116d22 | Miltiadis Vasilakis | |
226 | be116d22 | Miltiadis Vasilakis | #pragma mark - |
227 | be116d22 | Miltiadis Vasilakis | #pragma mark POST |
228 | be116d22 | Miltiadis Vasilakis | |
229 | be116d22 | Miltiadis Vasilakis | |
230 | be116d22 | Miltiadis Vasilakis | // POST storageURL |
231 | be116d22 | Miltiadis Vasilakis | + (id)updateAccountMetadataRequest { |
232 | be116d22 | Miltiadis Vasilakis | return [self storageRequestWithMethod:@"POST"]; |
233 | be116d22 | Miltiadis Vasilakis | } |
234 | be116d22 | Miltiadis Vasilakis | |
235 | be116d22 | Miltiadis Vasilakis | // POST storageURL?[update=] [X-Account-Group-*] [X-Account-Meta-*] |
236 | be116d22 | Miltiadis Vasilakis | + (id)updateAccountMetadataRequestWithGroups:(NSDictionary *)groups metadata:(NSDictionary *)metadata update:(BOOL)update { |
237 | be116d22 | Miltiadis Vasilakis | NSString *queryString = nil; |
238 | be116d22 | Miltiadis Vasilakis | if (update) |
239 | be116d22 | Miltiadis Vasilakis | queryString = @"?update="; |
240 | be116d22 | Miltiadis Vasilakis | ASIPithosAccountRequest *request = [self storageRequestWithMethod:@"POST" queryString:queryString]; |
241 | be116d22 | Miltiadis Vasilakis | |
242 | be116d22 | Miltiadis Vasilakis | if (groups) { |
243 | be116d22 | Miltiadis Vasilakis | for (NSString *key in [groups keyEnumerator]) { |
244 | 6b3a5e6a | Miltiadis Vasilakis | [request addRequestHeader:[[NSString stringWithFormat:@"X-Account-Group-%@", key] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] |
245 | 6b3a5e6a | Miltiadis Vasilakis | value:[[groups objectForKey:key] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; |
246 | be116d22 | Miltiadis Vasilakis | } |
247 | be116d22 | Miltiadis Vasilakis | } |
248 | be116d22 | Miltiadis Vasilakis | |
249 | be116d22 | Miltiadis Vasilakis | if (metadata) { |
250 | be116d22 | Miltiadis Vasilakis | for (NSString *key in [metadata keyEnumerator]) { |
251 | 6b3a5e6a | Miltiadis Vasilakis | [request addRequestHeader:[[NSString stringWithFormat:@"X-Account-Meta-%@", key] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] |
252 | 6b3a5e6a | Miltiadis Vasilakis | value:[[metadata objectForKey:key] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; |
253 | be116d22 | Miltiadis Vasilakis | } |
254 | be116d22 | Miltiadis Vasilakis | } |
255 | be116d22 | Miltiadis Vasilakis | |
256 | be116d22 | Miltiadis Vasilakis | return request; |
257 | be116d22 | Miltiadis Vasilakis | } |
258 | be116d22 | Miltiadis Vasilakis | |
259 | be116d22 | Miltiadis Vasilakis | #pragma mark - |
260 | be116d22 | Miltiadis Vasilakis | #pragma mark NSXMLParserDelegate |
261 | be116d22 | Miltiadis Vasilakis | |
262 | be116d22 | Miltiadis Vasilakis | - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { |
263 | be116d22 | Miltiadis Vasilakis | self.currentElement = elementName; |
264 | be116d22 | Miltiadis Vasilakis | if ([elementName isEqualToString:@"container"]) { |
265 | be116d22 | Miltiadis Vasilakis | self.currentContainer = [ASIPithosContainer container]; |
266 | be116d22 | Miltiadis Vasilakis | } |
267 | be116d22 | Miltiadis Vasilakis | self.currentContent = @""; |
268 | be116d22 | Miltiadis Vasilakis | } |
269 | be116d22 | Miltiadis Vasilakis | |
270 | be116d22 | Miltiadis Vasilakis | - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { |
271 | be116d22 | Miltiadis Vasilakis | if ([elementName isEqualToString:@"name"]) { |
272 | be116d22 | Miltiadis Vasilakis | currentContainer.name = currentContent; |
273 | be116d22 | Miltiadis Vasilakis | } else if ([elementName isEqualToString:@"count"]) { |
274 | be116d22 | Miltiadis Vasilakis | currentContainer.count = [currentContent intValue]; |
275 | be116d22 | Miltiadis Vasilakis | } else if ([elementName isEqualToString:@"bytes"]) { |
276 | be116d22 | Miltiadis Vasilakis | currentContainer.bytes = [currentContent intValue]; |
277 | be116d22 | Miltiadis Vasilakis | } else if ([elementName isEqualToString:@"last_modified"]) { |
278 | 13bc2a4e | Miltiadis Vasilakis | currentContainer.lastModified = [[self dateFormatterWithFormatId:0] dateFromString: |
279 | 13bc2a4e | Miltiadis Vasilakis | [currentContent stringByReplacingOccurrencesOfString:@":" |
280 | 13bc2a4e | Miltiadis Vasilakis | withString:@"" |
281 | 13bc2a4e | Miltiadis Vasilakis | options:NSBackwardsSearch |
282 | 13bc2a4e | Miltiadis Vasilakis | range:NSMakeRange(([currentContent length] - 3), 1)]]; |
283 | be116d22 | Miltiadis Vasilakis | } else if ([elementName isEqualToString:@"x_container_until_timestamp"]) { |
284 | 78355da3 | Miltiadis Vasilakis | currentContainer.untilTimestamp = [NSDate dateWithTimeIntervalSince1970:[currentContent doubleValue]]; |
285 | be116d22 | Miltiadis Vasilakis | } else if ([elementName rangeOfString:@"x_container_policy_"].location == 0) { |
286 | be116d22 | Miltiadis Vasilakis | if (currentContainer.policy == nil) |
287 | be116d22 | Miltiadis Vasilakis | currentContainer.policy = [NSMutableDictionary dictionary]; |
288 | be116d22 | Miltiadis Vasilakis | [currentContainer.policy setObject:currentContent forKey:[elementName substringFromIndex:19]]; |
289 | be116d22 | Miltiadis Vasilakis | } else if ([elementName rangeOfString:@"x_container_meta_"].location == 0) { |
290 | be116d22 | Miltiadis Vasilakis | if (currentContainer.metadata == nil) |
291 | be116d22 | Miltiadis Vasilakis | currentContainer.metadata = [NSMutableDictionary dictionary]; |
292 | be116d22 | Miltiadis Vasilakis | [currentContainer.metadata setObject:currentContent forKey:[elementName substringFromIndex:17]]; |
293 | be116d22 | Miltiadis Vasilakis | } else if ([elementName isEqualToString:@"container"]) { |
294 | be116d22 | Miltiadis Vasilakis | [containers addObject:currentContainer]; |
295 | be116d22 | Miltiadis Vasilakis | self.currentContainer = nil; |
296 | be116d22 | Miltiadis Vasilakis | } |
297 | be116d22 | Miltiadis Vasilakis | } |
298 | be116d22 | Miltiadis Vasilakis | |
299 | be116d22 | Miltiadis Vasilakis | - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { |
300 | be116d22 | Miltiadis Vasilakis | self.currentContent = [currentContent stringByAppendingString:string]; |
301 | be116d22 | Miltiadis Vasilakis | } |
302 | be116d22 | Miltiadis Vasilakis | |
303 | be116d22 | Miltiadis Vasilakis | @end |