diff --git a/CodePushDownloadHandler.m b/CodePushDownloadHandler.m index 49838a4..79f1784 100644 --- a/CodePushDownloadHandler.m +++ b/CodePushDownloadHandler.m @@ -44,10 +44,10 @@ failCallback:(void (^)(NSError *err))failCallback { -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { self.receivedContentLength = self.receivedContentLength + [data length]; - NSUInteger bytesLeft = [data length]; + NSInteger bytesLeft = [data length]; do { - NSUInteger bytesWritten = [self.outputFileStream write:[data bytes] + NSInteger bytesWritten = [self.outputFileStream write:[data bytes] maxLength:bytesLeft]; if (bytesWritten == -1) { break; @@ -59,21 +59,21 @@ failCallback:(void (^)(NSError *err))failCallback { self.progressCallback(self.expectedContentLength, self.receivedContentLength); if (bytesLeft) { - self.failCallback([self.outputFileStream streamError]); [self.outputFileStream close]; [connection cancel]; + self.failCallback([self.outputFileStream streamError]); } } - (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error { - self.failCallback(error); [self.outputFileStream close]; + self.failCallback(error); } -(void)connectionDidFinishLoading:(NSURLConnection *)connection { - self.doneCallback(); [self.outputFileStream close]; + self.doneCallback(); } @end \ No newline at end of file diff --git a/CodePushPackage.m b/CodePushPackage.m index bcdb568..2a7a5b6 100644 --- a/CodePushPackage.m +++ b/CodePushPackage.m @@ -154,8 +154,8 @@ NSString * const StatusFile = @"codepush.json"; failCallback:(void (^)(NSError *err))failCallback { NSString *packageFolderPath = [self getPackageFolderPath:updatePackage[@"packageHash"]]; - NSError *error; + if (![[NSFileManager defaultManager] fileExistsAtPath:packageFolderPath]) { [[NSFileManager defaultManager] createDirectoryAtPath:packageFolderPath withIntermediateDirectories:YES @@ -167,31 +167,31 @@ NSString * const StatusFile = @"codepush.json"; return failCallback(error); } - NSString *downloadFilePath = [packageFolderPath stringByAppendingPathComponent:@"app.jsbundle"]; + NSString *updateBundleFileName = [packageFolderPath stringByAppendingPathComponent:@"app.jsbundle"]; CodePushDownloadHandler *downloadHandler = [[CodePushDownloadHandler alloc] - init:downloadFilePath - progressCallback:progressCallback - doneCallback:^{ - NSError *error; - NSData *updateSerializedData = [NSJSONSerialization - dataWithJSONObject:updatePackage - options:0 - error:&error]; - NSString *packageJsonString = [[NSString alloc] - initWithData:updateSerializedData encoding:NSUTF8StringEncoding]; - - [packageJsonString writeToFile:[packageFolderPath stringByAppendingPathComponent:@"app.json"] - atomically:YES - encoding:NSUTF8StringEncoding - error:&error]; - if (error) { - failCallback(error); - } else { - doneCallback(); - } - } - failCallback:failCallback]; + init:updateBundleFileName + progressCallback:progressCallback + doneCallback:^{ + NSError *error; + NSData *updateSerializedData = [NSJSONSerialization + dataWithJSONObject:updatePackage + options:0 + error:&error]; + NSString *packageJsonString = [[NSString alloc] + initWithData:updateSerializedData encoding:NSUTF8StringEncoding]; + + [packageJsonString writeToFile:[packageFolderPath stringByAppendingPathComponent:@"app.json"] + atomically:YES + encoding:NSUTF8StringEncoding + error:&error]; + if (error) { + failCallback(error); + } else { + doneCallback(); + } + } + failCallback:failCallback]; [downloadHandler download:updatePackage[@"downloadUrl"]]; } diff --git a/README.md b/README.md index e16df2b..7557555 100644 --- a/README.md +++ b/README.md @@ -265,7 +265,7 @@ The `RemotePackage` inherits all of the same properties as the `LocalPackage`, b - __downloadUrl__: The URL at which the package is available for download. (String). This property is only needed for advanced usage, since the `download` method will automatically handle the acquisition of updates for you. ##### Methods -- __download(progressHandler?: Function): Promise__: Downloads the package update from the CodePush service. If a `progressHandler` is specified, it will be called periodically with an object (`{ totalBytes: Number, receivedBytes: Number }`) that reports the progress of the download till the download completes. Returns a Promise that resolves with the `LocalPackage`. +- __download(progressHandler?: Function): Promise__: Downloads the package update from the CodePush service. If a `progressHandler` is specified, it will be called periodically with an object (`{ totalBytes: Number, receivedBytes: Number }`) that reports the progress of the download until the download completes. Returns a Promise that resolves with the `LocalPackage`. --- diff --git a/package-mixins.js b/package-mixins.js index 5e8116b..4cdee70 100644 --- a/package-mixins.js +++ b/package-mixins.js @@ -1,48 +1,48 @@ var extend = require("extend"); -var { NativeAppEventEmitter } = require('react-native'); +var { NativeAppEventEmitter } = require("react-native"); module.exports = (NativeCodePush) => { - var remote = { - abortDownload: function abortDownload() { - return NativeCodePush.abortDownload(this); - }, - download: function download(progressHandler) { - if (!this.downloadUrl) { - return Promise.reject(new Error("Cannot download an update without a download url")); - } + var remote = { + abortDownload: function abortDownload() { + return NativeCodePush.abortDownload(this); + }, + download: function download(progressHandler) { + if (!this.downloadUrl) { + return Promise.reject(new Error("Cannot download an update without a download url")); + } - var downloadProgressSubscription; - if (progressHandler) { - // Use event subscription to obtain download progress. - downloadProgressSubscription = NativeAppEventEmitter.addListener( - 'CodePushDownloadProgress', - progressHandler - ); - } + var downloadProgressSubscription; + if (progressHandler) { + // Use event subscription to obtain download progress. + downloadProgressSubscription = NativeAppEventEmitter.addListener( + 'CodePushDownloadProgress', + progressHandler + ); + } - // Use the downloaded package info. Native code will save the package info - // so that the client knows what the current package version is. - return NativeCodePush.downloadUpdate(this) - .then((downloadedPackage) => { - downloadProgressSubscription && downloadProgressSubscription.remove(); - return extend({}, downloadedPackage, local); - }) - .catch((error) => { - downloadProgressSubscription && downloadProgressSubscription.remove(); - // Rethrow the error for subsequent handlers down the promise chain. - throw error; - }); - } - }; + // Use the downloaded package info. Native code will save the package info + // so that the client knows what the current package version is. + return NativeCodePush.downloadUpdate(this) + .then((downloadedPackage) => { + downloadProgressSubscription && downloadProgressSubscription.remove(); + return extend({}, downloadedPackage, local); + }) + .catch((error) => { + downloadProgressSubscription && downloadProgressSubscription.remove(); + // Rethrow the error for subsequent handlers down the promise chain. + throw error; + }); + } + }; - var local = { - apply: function apply(rollbackTimeout = 0, restartImmediately = true) { - return NativeCodePush.applyUpdate(this, rollbackTimeout, restartImmediately); - } - }; + var local = { + apply: function apply(rollbackTimeout = 0, restartImmediately = true) { + return NativeCodePush.applyUpdate(this, rollbackTimeout, restartImmediately); + } + }; - return { - remote: remote, - local: local - }; + return { + remote: remote, + local: local + }; }; \ No newline at end of file