1414
1515NSString * const LV_FILE_NAME_OF_PACKAGE_DOWNLOAD_URL = @" ___download_url___" ;
1616NSString * const LV_FILE_NAME_OF_PACKAGE_TIMESTAMP = @" ___timestamp___" ;
17- NSString * const LV_FILE_NAME_OF_CHANGE_GRAMMAR = @" ___change_grammar___" ;
1817
1918@implementation LVPkgManager
2019
@@ -52,9 +51,6 @@ +(NSString*) filePathOfPackageDownloadUrl:(NSString *)packageName {
5251+(NSString *) filePathOfPackageTimestamp : (NSString *)packageName {
5352 return [self pathForFileName: LV_FILE_NAME_OF_PACKAGE_TIMESTAMP package: packageName];
5453}
55- +(NSString *) filePathOfChangeGrammar : (NSString *)packageName {
56- return [self pathForFileName: LV_FILE_NAME_OF_CHANGE_GRAMMAR package: packageName];
57- }
5854// ------------------------------------------------------------------------------------------
5955+(BOOL ) deleteFileOfPackageDownloadUrl : (NSString *) packageName {
6056 NSString * path = [self filePathOfPackageDownloadUrl: packageName];
@@ -93,29 +89,15 @@ +(BOOL) setPackage:(NSString*)packageName timestamp:(NSString*) timestamp{
9389 NSData * data = [timestamp dataUsingEncoding: NSUTF8StringEncoding];
9490 return [self writeFile: data packageName: packageName fileName: LV_FILE_NAME_OF_PACKAGE_TIMESTAMP];
9591}
96- // ------------------------------------ read/write change grammar -----------------------------------
97- +(NSString *) changeGrammarOfPackage : (NSString *)packageName {
98- NSData * data = [self readFileFromPackage: packageName fileName: LV_FILE_NAME_OF_CHANGE_GRAMMAR];
99- if ( data ) {
100- return [[NSString alloc ] initWithData: data encoding: NSUTF8StringEncoding];
101- } else {
102- return nil ;
103- }
104- }
10592
106- +(BOOL ) setPackage : (NSString *)packageName changeGrammar : (NSString *) timestamp {
107- // time file
108- NSData * data = [timestamp dataUsingEncoding: NSUTF8StringEncoding];
109- return [self writeFile: data packageName: packageName fileName: LV_FILE_NAME_OF_CHANGE_GRAMMAR];
110- }
11193
11294// ------------------------------------------------------------------------------------------
113- +(int ) unpackageFile : (NSString *) fileName packageName : (NSString *) packageName changeGrammar : ( BOOL ) changeGrammar {
95+ +(int ) unpackageFile : (NSString *) fileName packageName : (NSString *) packageName {
11496 NSString *path = [LVUtil PathForBundle: nil relativePath: fileName];
11597
11698 if ( [LVUtil exist: path] ){
11799 NSData * pkgData = [LVUtil dataReadFromFile: path];
118- return [self unpackageData: pkgData packageName: packageName changeGrammar: changeGrammar ];
100+ return [self unpackageData: pkgData packageName: packageName];
119101 }
120102 return -1 ;
121103}
@@ -124,7 +106,7 @@ +(BOOL) checkUpdateWithNewTS:(NSString*)newTS oldTS:(NSString*) oldTS{
124106 return newTS.length >0 && oldTS.length >0 && [newTS compare: oldTS]==NSOrderedDescending;
125107}
126108
127- +(int ) unpackageData : (NSData *) pkgData packageName : (NSString *) packageName changeGrammar : ( BOOL ) changeGrammar {
109+ +(int ) unpackageData : (NSData *) pkgData packageName : (NSString *) packageName {
128110 NSString *path = [self rootDirectoryOfPackage: packageName];
129111 if ( pkgData && [LVUtil createPath: path] ){
130112 LVZipArchive *archive = [LVZipArchive archiveWithData: pkgData];
@@ -136,7 +118,6 @@ +(int) unpackageData:(NSData*) pkgData packageName:(NSString*) packageName chang
136118 if ( (newTS && oldTS==nil ) || [self checkUpdateWithNewTS: newTS oldTS: oldTS] ){
137119 BOOL result = [archive unzipToDirectory: path];
138120 if ( result ) {
139- [self setPackage: packageName changeGrammar: (changeGrammar ? @" true" :@" false" ) ];
140121 [self setPackage: packageName timestamp: newTS];
141122 return 1 ;
142123 }
@@ -176,8 +157,17 @@ +(NSInteger) downloadPackage:(NSString*)packageName withInfo:(NSDictionary*) inf
176157 [self doDownloadPackage: packageName withInfo: info callback: callback];
177158 return LV_DOWNLOAD_NET;
178159 }
160+
161+ if (callback){
162+ callback (info, nil , LV_DOWNLOAD_CACHE);
163+ }
179164 return LV_DOWNLOAD_CACHE;
180165 }
166+
167+ if (callback){
168+ callback (info, nil , LV_DOWNLOAD_ERROR);
169+ }
170+
181171 return LV_DOWNLOAD_ERROR;
182172}
183173
@@ -198,36 +188,43 @@ +(BOOL) sha256Check:(NSData*) data ret:(NSString*) string{
198188+(void ) doDownloadPackage : (NSString *)pkgName withInfo : (NSDictionary *) info callback : (LVDownloadCallback) callback {
199189 LVPkgInfo* pkgInfo = [[LVPkgInfo alloc ] init: info];
200190
201- if ( callback == nil ){// 回调一定不是空
202- callback = ^(NSDictionary * dic, NSString * erro , LVDownloadDataType dataType){
203- };
204- }
205-
191+ __weak typeof (self) weakSelf = self;
206192 if ( pkgName.length >0 && pkgInfo.url .length >0 && pkgInfo.timestamp .length >0 ){
207193 [LVUtil download: pkgInfo.url callback: ^(NSData *data) {
208194 // 解包过程放在主线程执行!!!!
209195 dispatch_async (dispatch_get_main_queue (), ^{
210- if ( data ){
211- BOOL sha256OK = [self sha256Check: data ret: pkgInfo.sha256];
212- if ( sha256OK ){
213- [self deleteFileOfPackageDownloadUrl: pkgName];// 开始解包, 删除时间戳文件
214- if ( [self unpackageData: data packageName: pkgName changeGrammar: pkgInfo.changeGrammar]>=0 ) {
215- // 解包成功
216- if ( [self setPackage: pkgName downloadUrl: pkgInfo.url] ){// 写标记成功
217- callback (pkgInfo.originalDic , nil , LV_DOWNLOAD_NET);
218- return ;
219- }
220- }
221- }
222- } else {
223- LVError (@" [downloadPackage] error: url=%@ " ,pkgInfo.url );
224- }
225- callback (pkgInfo.originalDic , @" error" , LV_DOWNLOAD_ERROR);
196+ [weakSelf unpackageData: data packageName: pkgName withInfo: pkgInfo callback: callback];
226197 });
227198 }];
228199 }
229200}
230201
202+ +(NSInteger ) unpackageData : (NSData *)data packageName : (NSString *)pkgName withInfo : (LVPkgInfo*)pkgInfo callback : (LVDownloadCallback) callback {
203+
204+ if ( data ){
205+ BOOL sha256OK = [self sha256Check: data ret: pkgInfo.sha256];
206+ if ( sha256OK ){
207+ [self deleteFileOfPackageDownloadUrl: pkgName];// 开始解包, 删除时间戳文件
208+
209+ NSInteger result = [self unpackageData: data packageName: pkgName];
210+ if ( result >= 0 ) {
211+ // 解包成功
212+ if ( [self setPackage: pkgName downloadUrl: pkgInfo.url] && callback){// 写标记成功
213+ callback (pkgInfo.originalDic , nil , LV_DOWNLOAD_NET);
214+ }
215+
216+ return result;
217+ }
218+ }
219+ } else {
220+ LVError (@" [downloadPackage] error: url=%@ " ,pkgInfo.url );
221+ }
222+
223+ callback (pkgInfo.originalDic , @" error" , LV_DOWNLOAD_ERROR);
224+
225+ return -1 ;
226+ }
227+
231228+(NSData *) readLuaFile : (NSString *) fileName rsa : (LVRSA*)rsa {
232229 NSString * signfileName = [self signfileNameOfOriginFile: fileName];
233230 NSData * signData = [LVUtil dataReadFromFile: signfileName];
0 commit comments