OSDN Git Service

Releaseターゲットでビルド出来ない問題を修正
[kcd/KCD.git] / KCD / HMAPIResult.m
1 //
2 //  HMAPIResult.m
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2015/05/21.
6 //  Copyright (c) 2015年 Hori,Masaki. All rights reserved.
7 //
8
9 #import "HMAPIResult.h"
10
11 #import "HMAppDelegate.h"
12
13
14 @interface HMAPIResult ()
15 @property (strong, readwrite, nonatomic) NSString *api;
16 @property (strong, readwrite, nonatomic) NSDictionary *parameter;
17 @property (strong, readwrite, nonatomic) id json;
18 @property (strong, readwrite, nonatomic) NSDate *date;
19 @property (readwrite, nonatomic) BOOL success;
20 @property (strong, readwrite, nonatomic) NSString *errorString;
21
22 @property (strong, nonatomic) NSData *jsonData;
23 @property (strong, nonatomic) NSString *paramString;
24
25 @end
26
27 @implementation HMAPIResult
28
29 - (instancetype)initWithRequest:(NSURLRequest *)request data:(NSData *)data
30 {
31         self = [super init];
32         if(self) {
33                 NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
34                 if(![string hasPrefix:@"svdata="]) {
35                         HMAppDelegate *appDelegate = [[NSApplication sharedApplication] delegate];
36                         [appDelegate logLineReturn:@"recive data has not prefix svdata=. api -> %@.", request.URL.path];
37                         [appDelegate logLineReturn:@"Original strings -> %@", string];
38                         return nil;
39                 }
40                 string = [string substringFromIndex:strlen("svdata=")];
41                 _jsonData = [string dataUsingEncoding:NSUTF8StringEncoding];
42                 
43                 NSData *requestBodyData = [request HTTPBody];
44                 _paramString = [[NSString alloc] initWithData:requestBodyData encoding:NSUTF8StringEncoding];
45                 
46                 _api = request.URL.path;
47                 _date = [NSDate dateWithTimeIntervalSinceNow:0];
48         }
49         
50         return self;
51 }
52
53 - (void)parseJSON
54 {
55         NSError *error = nil;
56         id json = [NSJSONSerialization JSONObjectWithData:self.jsonData
57                                                                                           options:NSJSONReadingAllowFragments
58                                                                                                 error:&error];
59         if(error) {
60                 HMAppDelegate *appDelegate = [[NSApplication sharedApplication] delegate];
61                 [appDelegate logLineReturn:@"Fail decode JSON data %@", error];
62                 return;
63         }
64         if(![json isKindOfClass:[NSDictionary class]]) {
65                 self.errorString = @"JSON is NOT NSDictionary.";
66                 return;
67         }
68         if(![[json objectForKey:@"api_result"] isEqual:@1]) {
69                 self.success = NO;
70                 return;
71         }
72         self.success = YES;
73         self.json = json;
74 }
75
76 - (id)json
77 {
78         if(_json) return _json;
79         
80         [self parseJSON];
81         return _json;
82 }
83
84 - (void)parseParameter
85 {
86         NSString *unescape = [self.paramString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
87         NSArray *pair = [unescape componentsSeparatedByString:@"&"];
88         NSMutableDictionary *dict = [NSMutableDictionary new];
89         for(NSString *p in pair) {
90                 NSArray *pp = [p componentsSeparatedByString:@"="];
91                 if([pp count] != 2) {
92                         NSLog(@"API (%@): Bad Argument: pair is odd.", self.api);
93                         continue;
94                 }
95                 [dict setObject:pp[1] forKey:pp[0]];
96         }
97         _parameter = dict;
98         
99 #if ENABLE_JSON_LOG
100         NSMutableArray *array = [NSMutableArray new];
101         for(NSString *p in pair) {
102                 NSArray *pp = [p componentsSeparatedByString:@"="];
103                 if([pp count] != 2) {
104                         NSLog(@"API (%@): Bad Argument: pair is odd.", self.api);
105                         continue;
106                 }
107                 [array addObject:@{@"key": pp[0], @"value": pp[1]}];
108         }
109         self.argumentArray = array;
110 #endif
111         
112 }
113 - (NSDictionary *)parameter
114 {
115         if(_parameter) return _parameter;
116         
117         [self parseParameter];
118         return _parameter;
119 }
120 #if ENABLE_JSON_LOG
121 - (NSArray *)argumentArray
122 {
123         if(_argumentArray) return _argumentArray;
124         
125         [self parseParameter];
126         return _argumentArray;
127 }
128 #endif
129
130 - (BOOL)success
131 {
132         if(_json) return _success;
133         
134         [self parseJSON];
135         return _success;
136 }
137 @end