From 0dc28325f2576efc9ca147e5ff075efe47ef44f8 Mon Sep 17 00:00:00 2001 From: lee <627051222@qq.com> Date: Thu, 22 Jun 2017 17:23:22 +0800 Subject: [PATCH] u --- iCemarose.xcodeproj/project.pbxproj | 2 +- iCemarose/Class/Api/KWMAPIManager.m | 43 +++++++++++++++++++++++++++++++++++-------- iCemarose/Class/Model/KWMShoppingCart.m | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------- iCemarose/Class/UI/Login/KWMValidationVC.m | 3 ++- 4 files changed, 90 insertions(+), 31 deletions(-) diff --git a/iCemarose.xcodeproj/project.pbxproj b/iCemarose.xcodeproj/project.pbxproj index dbd36ce..6b3bc87 100644 --- a/iCemarose.xcodeproj/project.pbxproj +++ b/iCemarose.xcodeproj/project.pbxproj @@ -2162,7 +2162,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; F84386F9A53E1205C21D5570 /* [CP] Copy Pods Resources */ = { diff --git a/iCemarose/Class/Api/KWMAPIManager.m b/iCemarose/Class/Api/KWMAPIManager.m index ad2ce2e..2dbdbb8 100644 --- a/iCemarose/Class/Api/KWMAPIManager.m +++ b/iCemarose/Class/Api/KWMAPIManager.m @@ -329,6 +329,30 @@ static NSString *const passwordTest = @"9e84aae218c57cdf0762763c4cf5a651"; failure:failure]; } +- (NSURLSessionDataTask *)makeSessionTask:(KWMHTTPMethod)httpMethod + apiPath:(NSString *)apiPath + parameters:(NSDictionary *)parameters + result:(Class)result + model:(Class)model + success:(void (^)(NSURLSessionDataTask *task, id result))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure { + + void(^successCallback)(NSURLSessionDataTask *, id ) = [self buildSuccessCallbackWithResultClass:result + modelClass:model + success:success + failure:failure]; + AFHTTPSessionManager *sessionManager = [self buildSessionManager:NO]; + NSString *method = httpMethod == KWMHTTPMethodPOST ? @"POST" : @"GET"; + NSURLRequest *request = [sessionManager.requestSerializer requestWithMethod:method URLString:apiPath parameters:parameters error:nil]; + __block id task = [sessionManager dataTaskWithRequest:request completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { + if (error) { + failure(task,error); + }else{ + successCallback(task,responseObject); + } + }]; + return task; +} - (NSURLSessionDataTask *)startSessionTask:(KWMHTTPMethod)httpMethod apiPath:(NSString *)apiPath @@ -371,6 +395,7 @@ static NSString *const passwordTest = @"9e84aae218c57cdf0762763c4cf5a651"; if (!password) { return; } + NSLog(@"loginTask username:%@,password:%@",account,password); AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.responseSerializer = [AFHTTPResponseSerializer serializer]; [manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObject:@"text/html"]]; @@ -420,10 +445,12 @@ static NSString *const passwordTest = @"9e84aae218c57cdf0762763c4cf5a651"; failure:failure]; } +#pragma mark - 购物车接口 + - (NSURLSessionDataTask *)changeProductWithVariantId:(NSNumber *)variantId quantity:(NSInteger) quantity success:(void (^)(NSURLSessionDataTask *, KWMCartResult *))success failure:(void (^)(NSURLSessionDataTask *, NSError *))failure { NSString *apiPath = [NSString stringWithFormat:@"https://%@/cart/change/%@.js",Shopify_SHOP_DOMAIN,variantId]; id params = @{ @"quantity": @(quantity) }; - return [self startSessionTask:KWMHTTPMethodGET apiPath:apiPath parameters:params result:[KWMCartResult class] model:nil success:success failure:failure]; + return [self makeSessionTask:KWMHTTPMethodGET apiPath:apiPath parameters:params result:[KWMCartResult class] model:nil success:success failure:failure]; } - (NSURLSessionDataTask *)updateProductWithVariantIds:(NSArray<NSNumber *> *)variantIds quantities:(NSArray<NSNumber *> *)quantities success:(void (^)(NSURLSessionDataTask *, KWMCartResult *))success failure:(void (^)(NSURLSessionDataTask *, NSError *))failure { @@ -432,7 +459,7 @@ static NSString *const passwordTest = @"9e84aae218c57cdf0762763c4cf5a651"; for (int i=0; i<quantities.count; i++) { [params setObject:quantities[i] forKey:[NSString stringWithFormat:@"updates[%@]",variantIds[i]]]; } - return [self startSessionTask:KWMHTTPMethodPOST apiPath:apiPath parameters:params result:[KWMCartResult class] model:nil success:success failure:failure]; + return [self makeSessionTask:KWMHTTPMethodPOST apiPath:apiPath parameters:params result:[KWMCartResult class] model:nil success:success failure:failure]; } - (NSURLSessionDataTask *)addProductWithVariantId:(NSNumber *)variantId quantity:(NSInteger)quantity success:(void (^)(NSURLSessionDataTask *, KWMRequestResult *))success failure:(void (^)(NSURLSessionDataTask *, NSError *))failure { @@ -441,7 +468,12 @@ static NSString *const passwordTest = @"9e84aae218c57cdf0762763c4cf5a651"; @"id":variantId, @"quantity":@(quantity), }; - return [self startSessionTask:KWMHTTPMethodPOST apiPath:apiPath parameters:params result:[KWMDictionaryResult class] model:nil success:success failure:failure]; + return [self makeSessionTask:KWMHTTPMethodPOST apiPath:apiPath parameters:params result:[KWMDictionaryResult class] model:nil success:success failure:failure]; +} + +-(NSURLSessionDataTask *)getCartSuccess:(void (^)(NSURLSessionDataTask *, KWMCartResult *))success failure:(void (^)(NSURLSessionDataTask *, NSError *))failure { + NSString *apiPath = [NSString stringWithFormat:@"https://%@/cart.js",Shopify_SHOP_DOMAIN]; + return [self makeSessionTask:KWMHTTPMethodGET apiPath:apiPath parameters:nil result:[KWMCartResult class] model:nil success:success failure:failure]; } - (NSURLSessionDataTask *)tmpCartWithVariantId:(NSNumber *)variantId quantity:(NSInteger)quantity success:(void (^)(NSURLSessionDataTask *, NSString *))success failure:(void (^)(NSURLSessionDataTask *, NSError *))failure { @@ -461,11 +493,6 @@ static NSString *const passwordTest = @"9e84aae218c57cdf0762763c4cf5a651"; } failure:failure]; } --(NSURLSessionDataTask *)getCartSuccess:(void (^)(NSURLSessionDataTask *, KWMCartResult *))success failure:(void (^)(NSURLSessionDataTask *, NSError *))failure { - NSString *apiPath = [NSString stringWithFormat:@"https://%@/cart.js",Shopify_SHOP_DOMAIN]; - return [self startSessionTask:KWMHTTPMethodGET apiPath:apiPath parameters:nil result:[KWMCartResult class] model:nil success:success failure:failure]; -} - /** * 手机登录-获取短信API * @param parameters {mobile=?手机号} diff --git a/iCemarose/Class/Model/KWMShoppingCart.m b/iCemarose/Class/Model/KWMShoppingCart.m index 7b3b875..1dee7e5 100644 --- a/iCemarose/Class/Model/KWMShoppingCart.m +++ b/iCemarose/Class/Model/KWMShoppingCart.m @@ -9,11 +9,13 @@ #import "KWMShoppingCart.h" #import "KWMCartResult.h" #import "KWMShopCartData.h" +#import <RegexKitLite/RegexKitLite.h> @interface KWMShoppingCart () @property (nonatomic, strong) KWMCartResult *result; -@property (nonatomic, assign) CGFloat version; +//@property (nonatomic, assign) CGFloat version; +@property (nonatomic, strong) NSMutableArray<NSURLSessionDataTask *> *tasks; @end @@ -41,6 +43,7 @@ static dispatch_once_t onceToken; dispatch_once(&onceToken,^{ instance = [[super allocWithZone:NULL] init]; + instance.tasks = [[NSMutableArray alloc] init]; }); if (!instance.result) { [instance setResultNoSync:[KWMCartResult new]]; @@ -54,63 +57,91 @@ return instance; } +- (void) missionCompleted { + [self.tasks removeObjectAtIndex:0]; + [self.tasks.firstObject resume]; +} + +- (void) addTasksObject:(NSURLSessionDataTask *)object { + if (self.tasks.lastObject && [self.tasks.lastObject.currentRequest.URL.absoluteString isEqualToString:object.currentRequest.URL.absoluteString] && [object.currentRequest.URL.absoluteString isMatchedByRegex:@"cart.js$"]) { + return; + } + [self.tasks addObject:object]; + if (self.tasks.count == 1) { + [object resume]; + } + +} + - (void)allItemsWithCallback:(ShoppingCartCallBack)callback { - CGFloat version = [[NSDate date] timeIntervalSince1970]; - _version = version; +// CGFloat version = [[NSDate date] timeIntervalSince1970]; +// _version = version; __weak typeof(self) this = self; - [[KWMAPIManager sharedManager] getCartSuccess:^(NSURLSessionDataTask *task, KWMCartResult *result) { - if (version == this.version) { + id task = [[KWMAPIManager sharedManager] getCartSuccess:^(NSURLSessionDataTask *task, KWMCartResult *result) { + [this missionCompleted]; +// if (version == this.version) { [[KWMShoppingCart sharedInstance] setResult:result]; callback(nil,result); - } +// } } failure:^(NSURLSessionDataTask *task, NSError *error) { + [this missionCompleted]; callback(error,nil); }]; + [self addTasksObject:task]; } - (void)increaseProductWithVariantId:(NSNumber *)variantId quantity:(NSInteger)quantity callback:(ShoppingCartCallBack)callback { - CGFloat version = [[NSDate date] timeIntervalSince1970]; - _version = version; +// CGFloat version = [[NSDate date] timeIntervalSince1970]; +// _version = version; __weak typeof(self) this = self; - [[KWMAPIManager sharedManager] addProductWithVariantId:variantId quantity:quantity success:^(NSURLSessionDataTask *task, KWMRequestResult *result) { - if (version == this.version) { + id task = [[KWMAPIManager sharedManager] addProductWithVariantId:variantId quantity:quantity success:^(NSURLSessionDataTask *task, KWMRequestResult *result) { + [this missionCompleted]; +// if (version == this.version) { [[KWMShoppingCart sharedInstance] allItemsWithCallback:^(NSError *error, KWMCartResult *cart) { // callback(error,cart); }]; - } +// } } failure:^(NSURLSessionDataTask *task, NSError *error) { + [this missionCompleted]; // callback(error,nil); }]; + [self addTasksObject:task]; callback(nil,[self changeLocalCartWithVariantId:variantId quantity:quantity flag:1]); } - (void)changeProductWithVariantId:(NSNumber *)variantId quantity:(NSInteger)quantity callback:(ShoppingCartCallBack)callback { - CGFloat version = [[NSDate date] timeIntervalSince1970]; - _version = version; +// CGFloat version = [[NSDate date] timeIntervalSince1970]; +// _version = version; __weak typeof(self) this = self; - [[KWMAPIManager sharedManager] changeProductWithVariantId:variantId quantity:quantity success:^(NSURLSessionDataTask *task, KWMCartResult *result) { - if (version == this.version) { + id task = [[KWMAPIManager sharedManager] changeProductWithVariantId:variantId quantity:quantity success:^(NSURLSessionDataTask *task, KWMCartResult *result) { + [this missionCompleted]; +// if (version == this.version) { [[KWMShoppingCart sharedInstance] setResult:result]; // callback(nil,result); - } +// } } failure:^(NSURLSessionDataTask *task, NSError *error) { + [this missionCompleted]; // callback(error,nil); }]; + [self addTasksObject:task]; callback(nil,[self changeLocalCartWithVariantId:variantId quantity:quantity flag:quantity ? 2 : 0]); } -(void)updateProductWithVariantIds:(NSArray<NSNumber *> *)variantIds quantitties:(NSArray<NSNumber *> *)quantites callback:(ShoppingCartCallBack)callback { - CGFloat version = [[NSDate date] timeIntervalSince1970]; - _version = version; +// CGFloat version = [[NSDate date] timeIntervalSince1970]; +// _version = version; __weak typeof(self) this = self; - [[KWMAPIManager sharedManager] updateProductWithVariantIds:variantIds quantities:quantites success:^(NSURLSessionDataTask *task, KWMCartResult *result) { - if (version == this.version) { + id task = [[KWMAPIManager sharedManager] updateProductWithVariantIds:variantIds quantities:quantites success:^(NSURLSessionDataTask *task, KWMCartResult *result) { + [this missionCompleted]; +// if (version == this.version) { [[KWMShoppingCart sharedInstance] setResult:result]; // callback(nil,result); - } +// } } failure:^(NSURLSessionDataTask *task, NSError *error) { + [this missionCompleted]; // callback(error,nil); }]; + [self addTasksObject:task]; for (int i=0; i<quantites.count; i++) { [self changeLocalCartWithVariantId:variantIds[i] quantity:quantites[i].integerValue flag:quantites[i].integerValue ? 2 : 0]; } diff --git a/iCemarose/Class/UI/Login/KWMValidationVC.m b/iCemarose/Class/UI/Login/KWMValidationVC.m index aeddf11..10f51e4 100644 --- a/iCemarose/Class/UI/Login/KWMValidationVC.m +++ b/iCemarose/Class/UI/Login/KWMValidationVC.m @@ -357,6 +357,7 @@ - (void)saveData{ [_userModel login]; _userModel.name = _phoneNum; + _userModel.email = _customer.JSONDictionary[@"email"]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:_customer.JSONDictionary forKey:@"customer"]; [defaults setObject:_token.JSONDictionary forKey:@"token"]; @@ -441,8 +442,8 @@ NSLog(@"登录成功"); //异步保存数据 dispatch_async(dispatch_get_global_queue(0, 0), ^{ - [self.api loginWebSuccess:nil failure:nil]; [self saveData]; + [self.api loginWebSuccess:nil failure:nil]; }); [self dismissViewControllerAnimated:YES completion:nil]; -- libgit2 0.26.0