forked from icanzilb/HTTPKit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDCHTTPTaskManager.m
More file actions
136 lines (129 loc) · 5.43 KB
/
DCHTTPTaskManager.m
File metadata and controls
136 lines (129 loc) · 5.43 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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
////////////////////////////////////////////////////////////////////////////////////////////////////
//
// DCHTTPTaskManager.m
//
// Created by Dalton Cherry on 5/9/14.
//
////////////////////////////////////////////////////////////////////////////////////////////////////
#import "DCHTTPTaskManager.h"
@interface DCHTTPTaskManager ()
@property(nonatomic,strong)NSMutableDictionary *serializers;
@property(nonatomic,strong)NSMutableDictionary *sharedParams;
@end
@implementation DCHTTPTaskManager
////////////////////////////////////////////////////////////////////////////////////////////////////
-(id)init
{
if(self = [super init])
{
self.responseSerializer = [DCJSONResponseSerializer new];
self.requestSerializer = [DCHTTPRequestSerializer new];
}
return self;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
-(void)addParameter:(id)value forKey:(NSString*)key
{
if(!self.sharedParams)
self.sharedParams = [NSMutableDictionary new];
[self.sharedParams setObject:value forKey:key];
}
////////////////////////////////////////////////////////////////////////////////////////////////////
-(void)removeParameter:(NSString*)key
{
[self.sharedParams removeObjectForKey:key];
}
////////////////////////////////////////////////////////////////////////////////////////////////////
-(void)setResponseSerializer:(id<DCHTTPResponseSerializerDelegate>)responseSerializer forContentType:(NSString*)contentType
{
if(!self.serializers)
self.serializers = [NSMutableDictionary new];
[self.serializers setObject:responseSerializer forKey:contentType];
}
////////////////////////////////////////////////////////////////////////////////////////////////////
-(DCHTTPTask*)GET:(NSString*)resource
{
return [self GET:resource parameters:nil];
}
////////////////////////////////////////////////////////////////////////////////////////////////////
-(DCHTTPTask*)GET:(NSString*)resource parameters:(NSDictionary*)parameters
{
DCHTTPTask *task = [DCHTTPTask GET:[self createURL:resource] parameters:[self combineParameters:parameters]];
[self configTask:task];
return task;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
-(DCHTTPTask*)HEAD:(NSString*)resource
{
return [self GET:resource parameters:nil];
}
////////////////////////////////////////////////////////////////////////////////////////////////////
-(DCHTTPTask*)HEAD:(NSString*)resource parameters:(NSDictionary*)parameters
{
DCHTTPTask *task = [DCHTTPTask HEAD:[self createURL:resource] parameters:[self combineParameters:parameters]];
[self configTask:task];
return task;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
-(DCHTTPTask*)DELETE:(NSString*)resource parameters:(NSDictionary*)parameters
{
DCHTTPTask *task = [DCHTTPTask DELETE:[self createURL:resource] parameters:[self combineParameters:parameters]];
[self configTask:task];
return task;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
-(DCHTTPTask*)POST:(NSString*)resource parameters:(NSDictionary*)parameters
{
DCHTTPTask *task = [DCHTTPTask POST:[self createURL:resource] parameters:[self combineParameters:parameters]];
[self configTask:task];
return task;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
-(DCHTTPTask*)PUT:(NSString*)resource parameters:(NSDictionary*)parameters
{
DCHTTPTask *task = [DCHTTPTask PUT:[self createURL:resource] parameters:[self combineParameters:parameters]];
[self configTask:task];
return task;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
-(DCHTTPTask*)download:(NSString *)resource toFile:(NSURL*)fileURL
{
DCHTTPTask *task = [self GET:resource parameters:nil];
task.downloadUrl = fileURL;
return task;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
-(NSString*)createURL:(NSString*)resource
{
if(self.baseURL)
return [self.baseURL stringByAppendingString:resource];
return resource;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
-(NSDictionary*)combineParameters:(NSDictionary*)parameters
{
NSInteger count = self.sharedParams.count+parameters.count;
if(count == 0)
return nil;
NSMutableDictionary *collect = [NSMutableDictionary dictionaryWithCapacity:count];
if(self.sharedParams)
[collect addEntriesFromDictionary:self.sharedParams];
if(parameters)
[collect addEntriesFromDictionary:parameters];
return collect;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
//copy the serializers, that way if the new task serializer gets modified, it does not modify the entire API/Task manager.
-(void)configTask:(DCHTTPTask*)task
{
task.requestSerializer = [self.requestSerializer copy];
task.responseSerializer = [(NSObject*)self.responseSerializer copy];
if(self.serializers.count > 0) {
NSDictionary *serializers = [self.serializers copy];
for(id key in serializers) {
[task setResponseSerializer:serializers[key] forContentType:key];
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
@end