开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
1 Star 0 Fork 1

碳猫科技/react-native-code-push

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (3)
标签 (75)
master
brownfield-apps-dev
brownfield-apps-archive
v5.4.2
v5.4.1
v5.4.0
v5.3.5
v5.3.4
v5.3.3
v5.3.2
v5.3.1
v5.3.0
v5.2.2
v5.2.1
v5.2.0-beta
v5.1.3-beta
v5.1.2-beta
v5.1.1-beta
v5.1.0-beta
v5.0.0-beta
v4.1.0-beta
v4.0.0-beta
v3.0.1-beta
master
分支 (3)
标签 (75)
master
brownfield-apps-dev
brownfield-apps-archive
v5.4.2
v5.4.1
v5.4.0
v5.3.5
v5.3.4
v5.3.3
v5.3.2
v5.3.1
v5.3.0
v5.2.2
v5.2.1
v5.2.0-beta
v5.1.3-beta
v5.1.2-beta
v5.1.1-beta
v5.1.0-beta
v5.0.0-beta
v4.1.0-beta
v4.0.0-beta
v3.0.1-beta
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (3)
标签 (75)
master
brownfield-apps-dev
brownfield-apps-archive
v5.4.2
v5.4.1
v5.4.0
v5.3.5
v5.3.4
v5.3.3
v5.3.2
v5.3.1
v5.3.0
v5.2.2
v5.2.1
v5.2.0-beta
v5.1.3-beta
v5.1.2-beta
v5.1.1-beta
v5.1.0-beta
v5.0.0-beta
v4.1.0-beta
v4.0.0-beta
v3.0.1-beta
react-native-code-push
/
ios
/
CodePush
/
CodePushDownloadHandler.m
react-native-code-push
/
ios
/
CodePush
/
CodePushDownloadHandler.m
CodePushDownloadHandler.m 4.72 KB
一键复制 编辑 原始数据 按行查看 历史
Geoffrey Goh 提交于 2016年08月20日 02:53 +08:00 . update error messages
#import "CodePush.h"
@implementation CodePushDownloadHandler {
// Header chars used to determine if the file is a zip.
char _header[4];
}
- (id)init:(NSString *)downloadFilePath
operationQueue:(dispatch_queue_t)operationQueue
progressCallback:(void (^)(long long, long long))progressCallback
doneCallback:(void (^)(BOOL))doneCallback
failCallback:(void (^)(NSError *err))failCallback {
self.outputFileStream = [NSOutputStream outputStreamToFileAtPath:downloadFilePath
append:NO];
self.receivedContentLength = 0;
self.operationQueue = operationQueue;
self.progressCallback = progressCallback;
self.doneCallback = doneCallback;
self.failCallback = failCallback;
return self;
}
- (void)download:(NSString *)url {
self.downloadUrl = url;
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request
delegate:self
startImmediately:NO];
if ([NSOperationQueue instancesRespondToSelector:@selector(setUnderlyingQueue:)]) {
NSOperationQueue *delegateQueue = [NSOperationQueue new];
delegateQueue.underlyingQueue = self.operationQueue;
[connection setDelegateQueue:delegateQueue];
} else {
[connection scheduleInRunLoop:[NSRunLoop mainRunLoop]
forMode:NSDefaultRunLoopMode];
}
[connection start];
}
#pragma mark NSURLConnection Delegate Methods
- (NSCachedURLResponse *)connection:(NSURLConnection *)connection
willCacheResponse:(NSCachedURLResponse*)cachedResponse {
// Return nil to indicate not necessary to store a cached response for this connection
return nil;
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
NSInteger statusCode = [(NSHTTPURLResponse *)response statusCode];
if (statusCode >= 400) {
[self.outputFileStream close];
[connection cancel];
NSError *err = [CodePushErrorUtils errorWithMessage:[NSString stringWithFormat: @"Received %ld response from %@", (long)statusCode, self.downloadUrl]];
self.failCallback(err);
return;
}
}
self.expectedContentLength = response.expectedContentLength;
[self.outputFileStream open];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
if (self.receivedContentLength < 4) {
for (int i = 0; i < [data length]; i++) {
int headerOffset = (int)self.receivedContentLength + i;
if (headerOffset >= 4) {
break;
}
const char *bytes = [data bytes];
_header[headerOffset] = bytes[i];
}
}
self.receivedContentLength = self.receivedContentLength + [data length];
NSInteger bytesLeft = [data length];
do {
NSInteger bytesWritten = [self.outputFileStream write:[data bytes]
maxLength:bytesLeft];
if (bytesWritten == -1) {
break;
}
bytesLeft -= bytesWritten;
} while (bytesLeft > 0);
self.progressCallback(self.expectedContentLength, self.receivedContentLength);
// bytesLeft should not be negative.
assert(bytesLeft >= 0);
if (bytesLeft) {
[self.outputFileStream close];
[connection cancel];
self.failCallback([self.outputFileStream streamError]);
}
}
- (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error
{
[self.outputFileStream close];
self.failCallback(error);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
[self.outputFileStream close];
if (self.receivedContentLength < 1) {
NSError *err = [CodePushErrorUtils errorWithMessage:[NSString stringWithFormat:@"Received empty response from %@", self.downloadUrl]];
self.failCallback(err);
return;
}
// expectedContentLength might be -1 when NSURLConnection don't know the length(e.g. response encode with gzip)
if (self.expectedContentLength > 0) {
// We should have received all of the bytes if this is called.
assert(self.receivedContentLength == self.expectedContentLength);
}
BOOL isZip = _header[0] == 'P' && _header[1] == 'K' && _header[2] == 3 && _header[3] == 4;
self.doneCallback(isZip);
}
@end
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

React Native module for CodePush
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Objective-C
1
https://gitee.com/hackcat/react-native-code-push.git
git@gitee.com:hackcat/react-native-code-push.git
hackcat
react-native-code-push
react-native-code-push
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /