Saturday, September 7, 2013

Wrapper

https://docs.google.com/file/d/0B-swXJjVKED1amM4OU10M2x5Nmc/edit?usp=sharing

https://docs.google.com/file/d/0B-swXJjVKED1eXBIWmpzWlFQeVU/edit?usp=sharing

HttpWrapper.h


@class ASIFormDataRequest,HttpWrapper;

@protocol HttpWrapperDelegate


- (void) HttpWrapper:(HttpWrapper *)wrapper fetchDataSuccess:(NSString *)response;
- (void) HttpWrapper:(HttpWrapper *)wrapper fetchDataFail:(NSError *)error;

@optional
- (void) fetchDataSuccess:(NSString *)response;
- (void) fetchDataFail:(NSError *)error;

@optional
- (void) fetchImageSuccess:(NSString *)response;
- (void) fetchImageFail:(NSError *)error;

@end

@interface HttpWrapper : NSObject {
    
    ASIFormDataRequest *requestMain;
    
    NSObject<HttpWrapperDelegate> *delegate;
    //BOOL isImage;
}

@property (nonatomic, assign) ASIFormDataRequest *requestMain;
@property (nonatomic, assign) NSObject<HttpWrapperDelegate> *delegate;

-(void) requestWithMethod:(NSString*)method url:(NSString*)strUrl param:(NSMutableDictionary*)dictParam;
-(void)setVideoData:(NSString*)method url:(NSString*)strUrl param:(NSMutableDictionary*)dictParam;
-(void) requestWithImageUrl:(NSString*)strUrl toFolder:(NSString*)folderName;
-(void) cancelRequest;


@end

HttpWrapper.m

#import "HttpWrapper.h"
#import "ASIFormDataRequest.h"
#import "AppDelegate.h"
#import "NSObject+SBJSON.h"
#import "SBJSON.h"

@implementation HttpWrapper

AppDelegate *appDelegate;

@synthesize delegate, fetchSuccess, fetchFail;

-(id)initWithDelegate:(id)del {
    self = [super init];
    if(self) {
        delegate = del;
        appDelegate = [AppDelegate sharedDelegate];
    }
    return self;
}

-(void) requestWithMethod:(NSString*)method url:(NSString*)strUrl param:(NSMutableDictionary*)dictParam selSuc:(SEL)forSuc selFail:(SEL)forFail
{
    fetchSuccess = forSuc;
    
    fetchFail = forFail;
    
    NSLog(@"HttpWrapper method:%@ >> %@ ", method, strUrl);
    NSLog(@"%@",dictParam);
    
    NSURL *url = [NSURL URLWithString:strUrl];
    ASIFormDataRequest *requestMain = [ASIFormDataRequest requestWithURL:url];
    
    [requestMain setRequestMethod:method];
    
    if(dictParam != nil) {
        NSArray *allKey = [dictParam allKeys];
        for(int i=0; i<[allKey count]; i++) {
            NSString *key = [allKey objectAtIndex:i];            
            
            if([key isEqualToString:@"file"]) {
                NSMutableDictionary *dict = [dictParam valueForKey:key];
                NSString *filepath = [dict valueForKey:@"filepath"];
                NSString *filekey = [dict valueForKey:@"filekey"];
                [requestMain setFile:filepath forKey:filekey];
            } else {
                
                NSString *value = [dictParam valueForKey:key];
                [requestMain setPostValue:value forKey:key];
            }
        }
    }
    [requestMain setDelegate:self];
    [requestMain startAsynchronous];
}

- (void)requestFinished:(ASIHTTPRequest *)request {
    
    NSString *responseString = [request responseString];
    NSLog(@"HttpWrapper > requestFinished > %@",responseString);

    SBJSON *parser = [[[SBJSON alloc] init] autorelease];
    NSDictionary *dic = (NSDictionary *)[parser objectWithString:responseString error:nil];
    
    if([delegate respondsToSelector:fetchSuccess])
        [delegate performSelector:fetchSuccess withObject:dic];
   
    if ([[dic valueForKey:@"success"]intValue] == 0) {
        if ([dic valueForKey:@"msg"] != (id)[NSNull null]) {
            [appDelegate showAlert:@"Alert" message:[dic valueForKey:@"msg"]];
        }
    }
    request = nil;
}

- (void)requestFailed:(ASIHTTPRequest *)request {
    NSError *error = [request error];
    NSLog(@"HttpWrapper > requestFailed > error: %@",error);
    
    request = nil;
    [appDelegate showAlert:@"Warning" message:@"Some Technical or Internet problem accure"];
    if([delegate respondsToSelector:fetchFail])
        [delegate performSelector:fetchFail withObject:error];
}

-(void) requestWithImageUrl:(NSString*)strUrl {

    NSURL *url = [NSURL URLWithString:strUrl];
    
    NSString *filePath = [appDelegate applicationCacheDirectory] ;
    filePath = [filePath stringByAppendingPathComponent:[url lastPathComponent]];
    
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if ([fileManager fileExistsAtPath:filePath] == YES) {
        if([delegate respondsToSelector:@selector(fetchImageSuccess:)])
            [delegate performSelector:@selector(fetchImageSuccess:) withObject:filePath];
        
        return;
    }
    
    ASIFormDataRequest *requestMain = [ASIHTTPRequest requestWithURL:url];
    [requestMain setDidFinishSelector:@selector(requestFinishedImage:)];
    [requestMain setDidFailSelector:@selector(requestFinishedImage:)];
    [requestMain setDownloadDestinationPath:filePath];
    [requestMain setShouldContinueWhenAppEntersBackground:YES];
    [requestMain setDelegate:self];
    [requestMain startAsynchronous];
}

-(void) requestWithImageUrl:(NSString*)strUrl toFolder:(NSString*)folderName venueName:(NSString*)vn{
    
    NSURL *url = [NSURL URLWithString:strUrl];
    
    NSString *filePath = [[appDelegate applicationCacheDirectory] stringByAppendingPathComponent:folderName];
    
    filePath = [filePath stringByAppendingPathComponent:[vn stringByAppendingString:@".png"]];
    
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if ([fileManager fileExistsAtPath:filePath] == YES) {
        if([delegate respondsToSelector:@selector(fetchImageSuccess:)])
            [delegate performSelector:@selector(fetchImageSuccess:) withObject:filePath];
        
        return;
    }
    
    ASIFormDataRequest *requestMain = [ASIHTTPRequest requestWithURL:url];
    [requestMain setDidFinishSelector:@selector(requestFinishedImage:)];
    [requestMain setDidFailSelector:@selector(requestFinishedImage:)];
    [requestMain setDownloadDestinationPath:filePath];
    [requestMain setShouldContinueWhenAppEntersBackground:YES];
    [requestMain setDelegate:self];
    [requestMain startAsynchronous];
}

- (void)requestFinishedImage:(ASIHTTPRequest *)request
{
    //NSData *responseData = [request responseData];
    if([delegate respondsToSelector:@selector(fetchImageSuccess:)])
        [delegate performSelector:@selector(fetchImageSuccess:) withObject:[request downloadDestinationPath]];
    
    request = nil;
}

- (void)requestFailedImage:(ASIHTTPRequest *)request
{
    NSError *error = [request error];
    NSLog(@"HttpWrapper > requestFailedImage > error: %@",error);
    
    request = nil;
    
    
    if([delegate respondsToSelector:@selector(fetchImageFail:)])
        [delegate performSelector:@selector(fetchImageFail:) withObject:error];
    
}

@end





Calling HttpWrapper method for Parsing :-


    if ([txtcommentText.text isEqualToString:@""]) {
        [appDelegate showAlertWithTitle:@"Alert" message:@"CommentBox is Empty Please Write the comment"];
    }
    else
    {
        if(sendCommentRequest)
        {
            [sendCommentRequest cancelRequest];
            [sendCommentRequest release];
            sendCommentRequest = nil;
        }
        
        [appDelegate showLoadingView];
        sendCommentRequest = [[HttpWrapper alloc] init];
        sendCommentRequest.delegate=self;
        
        NSString *strUrl =[NSString stringWithFormat:@"%@?action=addPostComment",serverURl];
        NSString *strPostId =[objUserImage valueForKey:@"postid"];
        
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSString *strUsername=[defaults objectForKey:@"username"];
        
        NSMutableDictionary *dictcomment = [NSMutableDictionary dictionary];
        [dictcomment setObject:strUsername forKey:@"username"];
        [dictcomment setObject:strPostId forKey:@"postid"];
        [dictcomment setObject:txtcommentText.text forKey:@"comment"];
        
        [sendCommentRequest requestWithMethod:@"POST" url:strUrl param:dictcomment];
        [UIView transitionWithView:commentView duration:1.0 options:UIViewAnimationOptionTransitionFlipFromRight animations:^{commentView.hidden=NO;} completion:nil];
        [commentView setHidden:YES];

    }

Httpwrapper delegate methods :-

(void)fetchDataFail:(NSError *)error
{
    [appDelegate hideLoadingView];
}
-(void)fetchDataSuccess:(NSString *)response{
    
    SBJSON *parser = [[SBJSON alloc] init];
    [parser retain];
    jsonDic=[parser objectWithString:response error:nil];
    [jsonDic retain];
    
    NSString *strStutas = [jsonDic objectForKey:@"message"];
    
    txtFirstName.hidden = TRUE;
    txtLastName.hidden = TRUE;
    txtCity.hidden = TRUE;
    btnProfileUpdate.hidden =TRUE;
    txtState.hidden = TRUE;
    txtFullName.hidden = FALSE;
    txtFullAdd.hidden = FALSE;
    
    if([strStutas isEqualToString:@"Success"])
    {
        // Delete all Previous Images ...
        [db deleteAllPrevProfileInfo];
        
        if (loadMore == FALSE) {
          
            [db deleteAllPrevProfilePostsInfo];
        }
        else
        {
            [db deleteAllPrevProfilePostsInfoWithMore];
        }
        
        if(result)
        {
            [result release];
            result = nil;
        }
        
        NSMutableDictionary *dicsUserData=[jsonDic objectForKey:@"result"];
        [dicsUserData retain];
                
       NSArray *dataresult =[dicsUserData objectForKey:@"posts"];
        
              
        if (dataresult) {

        for (NSMutableDictionary *objDic in dataresult) {
        
            ProfilePosts *obj = (ProfilePosts *)[NSEntityDescription insertNewObjectForEntityForName:@"ProfilePosts"
                                                                inManagedObjectContext:appDelegate.managedObjectContext];
            float expWidth = 320, expHeight, orgWidth, orgHeight;
            
            orgWidth = [[[objDic objectForKey:@"image_data"] objectForKey:@"width"] floatValue];
            orgHeight = [[[objDic objectForKey:@"image_data"] objectForKey:@"height"] floatValue];
            
            expHeight = (orgHeight * expWidth)/orgWidth;
            
            obj.postid = [objDic objectForKey:@"postid"];
            obj.imagetitle = [objDic objectForKey:@"imagetitle"];
            obj.imageurl = [objDic objectForKey:@"imageurl"];
            obj.imagedesc = [objDic objectForKey:@"imagedesc"];
            obj.is_portrait = [objDic objectForKey:@"is_portrait"];
            obj.username = [objDic objectForKey:@"username"];
            obj.datetime = [objDic objectForKey:@"datetime"];
            obj.photo = [dicsUserData objectForKey:@"photo"];
            obj.commentcount =[objDic objectForKey:@"comment_count"];
            obj.likecount =[objDic objectForKey:@"likecount"];
            obj.userlikecount =[NSNumber numberWithBool:[[objDic objectForKey:@"currentUserLike"] boolValue]];
            
            obj.img_height = [NSNumber numberWithFloat:expHeight];
            obj.img_width = [NSNumber numberWithFloat:expWidth];
            
            [appDelegate saveAction];
            }
        }
       
         ////// Full name
        NSString *fname = [dicsUserData objectForKey:@"FirstName"];
        fname = [fname stringByAppendingString:@" "];
        NSString *fullname = [fname stringByAppendingString:[dicsUserData objectForKey:@"LastName"]];
        
        //// City, State
        NSString *strConcate;
        if ([[dicsUserData objectForKey:@"State"] isEqualToString:@""]) {
            strConcate = [NSString stringWithFormat:@" "];
        }
        else{
            strConcate = [NSString stringWithFormat:@", "];
        }
        //// City, State
        NSString *city = [[dicsUserData objectForKey:@"City"] stringByAppendingString:strConcate];
        NSString *fullAdd = [city stringByAppendingString:[dicsUserData objectForKey:@"State"]];
        
        txtFullName.text = fullname;
        txtFullAdd.text = fullAdd;

        result = [db getLastImages];
        [result retain];
        [tblView reloadData];
        
        if ([[dicsUserData objectForKey:@"photo"] isEqualToString: @""]) {
            
            ivPhoto.image = [UIImage imageNamed:@"noImage.png"];
        }
        
        if (!result) {
            
            ProfilePosts *arrGetUserProfile = (ProfilePosts *)[result objectAtIndex:0];
            NSURL *imgURL = [NSURL URLWithString:arrGetUserProfile.photo];
            NSString *strImg = [NSString stringWithContentsOfURL:imgURL
                                                        encoding:NSStringEnumerationByParagraphs
                                                           error:errno];
//            ivPhoto.image = [UIImage imageWithData:imgData];
            [asyncImg loadImageFromStringforUserimg:strImg];
        }else{
  
            NSString *imgStr = [NSString stringWithFormat:@"%@", [dicsUserData objectForKey:@"photo"]];
            [asyncImg loadImageFromStringforUserimg:imgStr];
        }

        btnProfileUpdate.hidden=FALSE;
       
    }
    
    [appDelegate hideLoadingView];
    [jsonDic release];
    [parser release];

}

OR another methods way of implementing :-


-(void)HttpWrapper:(HttpWrapper *)wrapper fetchDataFail:(NSError *)error{
    [appDelegate hideLoadingView];
    if(wrapper == likeRequest)
    {
        [appDelegate showAlertWithTitle:@"Like"
                                message:@"Error while sending like"];
    }
    else if(wrapper == commentsRequest)
    {
        [appDelegate showAlertWithTitle:@"Comment"
                                message:@"Error while fetching comments"];
    }
    if(wrapper == sendCommentRequest)
    {
        [appDelegate showAlertWithTitle:@"Comment"
                                message:@"Error while posting comment"];
    }
}

-(void)HttpWrapper:(HttpWrapper *)wrapper fetchDataSuccess:(NSString *)response{
    
    SBJSON *parser = [[SBJSON alloc] init];
    NSLog(@"Response : %@",response);
    
    if(wrapper == likeRequest)
    {
        dictDetail =  [parser objectWithString:response];
        [dictDetail retain];
        NSString *counterlike=[dictDetail objectForKey:@"totalLikes"];
        [lblLike setText:[NSString stringWithFormat:@"%@",counterlike]];
        
        BOOL currentUserLike = [[dictDetail objectForKey:@"currentUserLike"] boolValue];
        if (currentUserLike == TRUE) {
            
            UIImage* imageBtn = [UIImage imageNamed:@"favoritered@2x.png"];
            [btnLike setBackgroundImage:imageBtn forState:UIControlStateNormal];
        }
        else{
            
            UIImage* imageBtn = [UIImage imageNamed:@"favorite.png"];
            [btnLike setBackgroundImage:imageBtn forState:UIControlStateNormal];
        }
        
    }
    else if(wrapper == commentsRequest)
    {
        dictComment =[parser objectWithString:response];
        [dictComment retain];
        
        NSString *counterlike=[dictComment objectForKey:@"totalLikes"];
        [lblLike setText:[NSString stringWithFormat:@"%@",counterlike]];
        
        arrComments = [dictComment objectForKey:@"results"];
        NSString *countstr = [NSString stringWithFormat:@"%d",arrComments.count];
        [lblComment setText:countstr];
        
        BOOL currentUserLike = [[dictComment objectForKey:@"currentUserLike"] boolValue];
        if (currentUserLike == TRUE) {
            
            UIImage* imageBtn = [UIImage imageNamed:@"favoritered@2x.png"];
            [btnLike setBackgroundImage:imageBtn forState:UIControlStateNormal];
        }
        else{
            
            UIImage* imageBtn = [UIImage imageNamed:@"favorite.png"];
            [btnLike setBackgroundImage:imageBtn forState:UIControlStateNormal];
        }
        [tblView reloadData];
    }
    else if(wrapper == sendCommentRequest)
    {
        [self fetchComments];
    }
    [parser release];
    [appDelegate hideLoadingView];

}


No comments:

Post a Comment