aboutsummaryrefslogtreecommitdiffstats
path: root/Video Tuneup/Classes/WebserviceCommunicator.m
blob: cdf57714a0cfc50b6b3e515735d7f0e7b1f65c34 (plain)
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
//
//  WebserviceCommunicator.m
//  Video Tuneup
//
//  Created by tw on 4/25/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import "WebserviceCommunicator.h"

#define BASEPATH (@"http://localhost:4567")

@implementation WebserviceCommunicator

@synthesize fileHandle, songPath;

- (id)init {
    self = [super init];
    if (self) {
        songPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"mixed_song.mp3"];
        [[NSFileManager defaultManager] createFileAtPath:songPath contents:nil attributes:nil];
        fileHandle = [NSFileHandle fileHandleForWritingAtPath:songPath];
    }
    return self;
}

-(void)mixMusic:(NSURL *)file {
    NSString *uploadFileName = [file lastPathComponent];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@/blend/%@", BASEPATH, uploadFileName]] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:130.0]; // BASEPATH/blend/:filename
    [request setHTTPMethod:@"POST"];
    [request setHTTPShouldHandleCookies:NO];
    NSString *boundary = @"--x-x-x-x-";
    [request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary] forHTTPHeaderField:@"Content-Type"];
    
    NSData *songData = [NSData dataWithContentsOfURL:file];
    NSMutableData *requestData = [[NSMutableData alloc] init];
    
//  To send extra params:
//
//  for (NSString *paramName in params) ...
//	[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
//	[body appendData:[@"Content-Disposition: form-data; name=\"photo-description\"\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
//	[body appendData:[@"testing 123" dataUsingEncoding:NSUTF8StringEncoding]];
//    [body appendData:[[NSString stringWithFormat:@"%@\r\n", [_params objectForKey:param]] dataUsingEncoding:NSUTF8StringEncoding]];
	
    [requestData appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
	[requestData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n", @"data", uploadFileName] dataUsingEncoding:NSUTF8StringEncoding]];
	[requestData appendData:[@"Content-Type: audio/mpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
	[requestData appendData:songData];
    [requestData appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    
    [requestData appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    
	[request setHTTPBody:requestData];
    
    (void)[[NSURLConnection alloc] initWithRequest:request delegate:self];
}


- (void)setParentController:(ViewController *)viewController {
    _viewController = viewController;
}


#pragma mark NSURLConnection delegate methods

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
	NSLog(@"Got response data");
    
    [fileHandle seekToEndOfFile];
    [fileHandle writeData:data];
}

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
	NSLog(@"Song send failed");
    if(_viewController != nil) {
        [[_viewController internetRequestLabel] setText:@"(failed)"];
    }
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection {
	NSLog(@"Song send finished loading.");

    [fileHandle closeFile];
    if(_viewController != nil) {
        [[_viewController internetRequestLabel] setText:@"(completed)"];
    }
    
    // This is happening before file is completely sent back. Need to change timeout.

    NSLog(@"Received song path is %@", songPath);
    [_viewController loadAudioFromFile:[NSURL fileURLWithPath:songPath]];
}

@end