|
30 | 30 | #import <sys/time.h> |
31 | 31 |
|
32 | 32 |
|
33 | | -NSString *XADResourceDataKey=@"XADResourceData"; |
34 | | -NSString *XADFinderFlags=@"XADFinderFlags"; |
| 33 | +NSString *const XADResourceDataKey=@"XADResourceData"; |
| 34 | +NSString *const XADFinderFlags=@"XADFinderFlags"; |
35 | 35 |
|
36 | 36 |
|
37 | 37 |
|
@@ -81,8 +81,8 @@ -(id)init |
81 | 81 | immediatesize=0; |
82 | 82 | parentarchive=nil; |
83 | 83 |
|
84 | | - dataentries=[[NSMutableArray array] retain]; |
85 | | - resourceentries=[[NSMutableArray array] retain]; |
| 84 | + dataentries=[[NSMutableArray alloc] init]; |
| 85 | + resourceentries=[[NSMutableArray alloc] init]; |
86 | 86 | namedict=nil; |
87 | 87 | } |
88 | 88 | return self; |
@@ -1140,100 +1140,144 @@ -(void)fixWritePermissions { [self updateAttributesForDeferredDirectories]; } |
1140 | 1140 |
|
1141 | 1141 |
|
1142 | 1142 | -(NSStringEncoding)archive:(XADArchive *)archive encodingForData:(NSData *)data guess:(NSStringEncoding)guess confidence:(float)confidence |
1143 | | -{ return [delegate archive:archive encodingForData:data guess:guess confidence:confidence]; } |
| 1143 | +{ |
| 1144 | + if ([delegate respondsToSelector:@selector(archive:encodingForData:guess:confidence:)]) { |
| 1145 | + return [delegate archive:archive encodingForData:data guess:guess confidence:confidence]; |
| 1146 | + } else if ([delegate respondsToSelector:@selector(archive:encodingForName:guess:confidence:)]) { |
| 1147 | + // Default implementation calls old method |
| 1148 | + // ...if it's available |
| 1149 | + NSMutableData *terminateddata=[[NSMutableData alloc] initWithData:data]; |
| 1150 | + [terminateddata increaseLengthBy:1]; // append a 0 byte |
| 1151 | + #pragma clang diagnostic push |
| 1152 | + #pragma clang diagnostic ignored "-Wdeprecated" |
| 1153 | + NSStringEncoding enc=[delegate archive:archive encodingForName:terminateddata.bytes guess:guess confidence:confidence]; |
| 1154 | + #pragma clang diagnostic pop |
| 1155 | + [terminateddata release]; |
| 1156 | + return enc; |
| 1157 | + } else { |
| 1158 | + return guess; |
| 1159 | + } |
| 1160 | +} |
1144 | 1161 |
|
1145 | | --(XADAction)archive:(XADArchive *)archive nameDecodingDidFailForEntry:(int)n data:(NSData *)data |
1146 | | -{ return [delegate archive:archive nameDecodingDidFailForEntry:n data:data]; } |
| 1162 | +-(XADAction)archive:(XADArchive *)archive nameDecodingDidFailForEntry:(NSInteger)n data:(NSData *)data |
| 1163 | +{ |
| 1164 | + if ([delegate respondsToSelector:@selector(archive:nameDecodingDidFailForEntry:data:)]) { |
| 1165 | + return [delegate archive:archive nameDecodingDidFailForEntry:n data:data]; |
| 1166 | + } else if ([delegate respondsToSelector:@selector(archive:nameDecodingDidFailForEntry:bytes:)]) { |
| 1167 | + // Default implementation calls old method |
| 1168 | + // ...if it's available |
| 1169 | + NSMutableData *terminateddata=[[NSMutableData alloc] initWithData:data]; |
| 1170 | + [terminateddata increaseLengthBy:1]; // append a 0 byte |
| 1171 | + #pragma clang diagnostic push |
| 1172 | + #pragma clang diagnostic ignored "-Wdeprecated" |
| 1173 | + XADAction action=[delegate archive:archive nameDecodingDidFailForEntry:n bytes:terminateddata.bytes]; |
| 1174 | + #pragma clang diagnostic pop |
| 1175 | + [terminateddata release]; |
| 1176 | + return action; |
| 1177 | + } else { |
| 1178 | + return XADAbortAction; |
| 1179 | + } |
| 1180 | +} |
1147 | 1181 |
|
1148 | 1182 | -(BOOL)archiveExtractionShouldStop:(XADArchive *)arc |
1149 | | -{ return [delegate archiveExtractionShouldStop:arc]; } |
| 1183 | +{ |
| 1184 | + if ([delegate respondsToSelector:@selector(archiveExtractionShouldStop:)]) { |
| 1185 | + return [delegate archiveExtractionShouldStop:arc]; |
| 1186 | + } else { |
| 1187 | + return NO; |
| 1188 | + } |
| 1189 | +} |
1150 | 1190 |
|
1151 | 1191 | -(BOOL)archive:(XADArchive *)arc shouldCreateDirectory:(NSString *)directory |
1152 | | -{ return [delegate archive:arc shouldCreateDirectory:directory]; } |
1153 | | - |
1154 | | --(void)archive:(XADArchive *)arc didCreateDirectory:(NSString *)directory |
1155 | | -{ [delegate archive:arc didCreateDirectory:directory]; } |
| 1192 | +{ |
| 1193 | + if ([delegate respondsToSelector:@selector(archive:shouldCreateDirectory:)]) { |
| 1194 | + return [delegate archive:arc shouldCreateDirectory:directory]; |
| 1195 | + } else { |
| 1196 | + return YES; |
| 1197 | + } |
| 1198 | +} |
1156 | 1199 |
|
1157 | | --(XADAction)archive:(XADArchive *)arc entry:(int)n collidesWithFile:(NSString *)file newFilename:(NSString **)newname |
1158 | | -{ return [delegate archive:arc entry:n collidesWithFile:file newFilename:newname]; } |
| 1200 | +-(XADAction)archive:(XADArchive *)arc entry:(NSInteger)n collidesWithFile:(NSString *)file newFilename:(NSString **)newname |
| 1201 | +{ |
| 1202 | + if ([delegate respondsToSelector:@selector(archive:entry:collidesWithFile:newFilename:)]) { |
| 1203 | + return [delegate archive:arc entry:n collidesWithFile:file newFilename:newname]; |
| 1204 | + } else { |
| 1205 | + return XADOverwriteAction; |
| 1206 | + } |
| 1207 | +} |
1159 | 1208 |
|
1160 | | --(XADAction)archive:(XADArchive *)arc entry:(int)n collidesWithDirectory:(NSString *)file newFilename:(NSString **)newname |
1161 | | -{ return [delegate archive:arc entry:n collidesWithDirectory:file newFilename:newname]; } |
| 1209 | +-(XADAction)archive:(XADArchive *)arc entry:(NSInteger)n collidesWithDirectory:(NSString *)file newFilename:(NSString **)newname |
| 1210 | +{ |
| 1211 | + if ([delegate respondsToSelector:@selector(archive:entry:collidesWithDirectory:newFilename:)]) { |
| 1212 | + return [delegate archive:arc entry:n collidesWithDirectory:file newFilename:newname]; |
| 1213 | + } else { |
| 1214 | + return XADSkipAction; |
| 1215 | + } |
| 1216 | +} |
1162 | 1217 |
|
1163 | | --(XADAction)archive:(XADArchive *)arc creatingDirectoryDidFailForEntry:(int)n |
1164 | | -{ return [delegate archive:arc creatingDirectoryDidFailForEntry:n]; } |
| 1218 | +-(XADAction)archive:(XADArchive *)arc creatingDirectoryDidFailForEntry:(NSInteger)n |
| 1219 | +{ |
| 1220 | + if ([delegate respondsToSelector:@selector(archive:creatingDirectoryDidFailForEntry:)]) { |
| 1221 | + return [delegate archive:arc creatingDirectoryDidFailForEntry:n]; |
| 1222 | + } else { |
| 1223 | + return XADAbortAction; |
| 1224 | + } |
| 1225 | +} |
1165 | 1226 |
|
1166 | 1227 | -(void)archiveNeedsPassword:(XADArchive *)arc |
1167 | | -{ [delegate archiveNeedsPassword:arc]; } |
1168 | | - |
1169 | | --(void)archive:(XADArchive *)arc extractionOfEntryWillStart:(int)n |
1170 | | -{ [delegate archive:arc extractionOfEntryWillStart:n]; } |
1171 | | - |
1172 | | --(void)archive:(XADArchive *)arc extractionProgressForEntry:(int)n bytes:(off_t)bytes of:(off_t)total |
1173 | | -{ [delegate archive:arc extractionProgressForEntry:n bytes:bytes of:total]; } |
1174 | | - |
1175 | | --(void)archive:(XADArchive *)arc extractionOfEntryDidSucceed:(int)n |
1176 | | -{ [delegate archive:arc extractionOfEntryDidSucceed:n]; } |
1177 | | - |
1178 | | --(XADAction)archive:(XADArchive *)arc extractionOfEntryDidFail:(int)n error:(XADError)error |
1179 | | -{ return [delegate archive:arc extractionOfEntryDidFail:n error:error]; } |
1180 | | - |
1181 | | --(XADAction)archive:(XADArchive *)arc extractionOfResourceForkForEntryDidFail:(int)n error:(XADError)error |
1182 | | -{ return [delegate archive:arc extractionOfResourceForkForEntryDidFail:n error:error]; } |
1183 | | - |
1184 | | --(void)archive:(XADArchive *)arc extractionProgressBytes:(off_t)bytes of:(off_t)total |
1185 | | -{ [delegate archive:arc extractionProgressBytes:bytes of:total]; } |
1186 | | - |
1187 | | -//-(void)archive:(XADArchive *)arc extractionProgressFiles:(int)files of:(int)total; |
1188 | | -//{} |
1189 | | - |
1190 | | -@end |
1191 | | - |
1192 | | - |
1193 | | - |
1194 | | -@implementation NSObject (XADArchiveDelegate) |
| 1228 | +{ |
| 1229 | + if ([delegate respondsToSelector:@selector(archiveNeedsPassword:)]) { |
| 1230 | + [delegate archiveNeedsPassword:arc]; |
| 1231 | + } |
| 1232 | +} |
1195 | 1233 |
|
1196 | | --(NSStringEncoding)archive:(XADArchive *)archive encodingForData:(NSData *)data guess:(NSStringEncoding)guess confidence:(float)confidence |
| 1234 | +-(void)archive:(XADArchive *)arc extractionOfEntryWillStart:(NSInteger)n |
1197 | 1235 | { |
1198 | | - // Default implementation calls old method |
1199 | | - NSMutableData *terminateddata=[[NSMutableData alloc] initWithData:data]; |
1200 | | - [terminateddata increaseLengthBy:1]; // append a 0 byte |
1201 | | - NSStringEncoding enc=[self archive:archive encodingForName:[terminateddata bytes] guess:guess confidence:confidence]; |
1202 | | - [terminateddata release]; |
1203 | | - return enc; |
| 1236 | + if ([delegate respondsToSelector:@selector(archive:extractionOfEntryWillStart:)]) { |
| 1237 | + [delegate archive:arc extractionOfEntryWillStart:n]; |
| 1238 | + } |
1204 | 1239 | } |
1205 | 1240 |
|
1206 | | --(XADAction)archive:(XADArchive *)archive nameDecodingDidFailForEntry:(int)n data:(NSData *)data |
| 1241 | +-(void)archive:(XADArchive *)arc extractionProgressForEntry:(NSInteger)n bytes:(off_t)bytes of:(off_t)total |
1207 | 1242 | { |
1208 | | - // Default implementation calls old method |
1209 | | - NSMutableData *terminateddata=[[NSMutableData alloc] initWithData:data]; |
1210 | | - XADAction action=[self archive:archive nameDecodingDidFailForEntry:n bytes:[terminateddata bytes]]; |
1211 | | - [terminateddata release]; |
1212 | | - return action; |
| 1243 | + if ([delegate respondsToSelector:@selector(archive:extractionProgressForEntry:bytes:of:)]) { |
| 1244 | + [delegate archive:arc extractionProgressForEntry:n bytes:bytes of:total]; |
| 1245 | + } |
1213 | 1246 | } |
1214 | 1247 |
|
1215 | | --(BOOL)archiveExtractionShouldStop:(XADArchive *)archive { return NO; } |
1216 | | --(BOOL)archive:(XADArchive *)archive shouldCreateDirectory:(NSString *)directory { return YES; } |
1217 | | --(void)archive:(XADArchive *)archive didCreateDirectory:(NSString *)directory { } |
1218 | | --(XADAction)archive:(XADArchive *)archive entry:(int)n collidesWithFile:(NSString *)file newFilename:(NSString **)newname { return XADOverwriteAction; } |
1219 | | --(XADAction)archive:(XADArchive *)archive entry:(int)n collidesWithDirectory:(NSString *)file newFilename:(NSString **)newname { return XADSkipAction; } |
1220 | | --(XADAction)archive:(XADArchive *)archive creatingDirectoryDidFailForEntry:(int)n { return XADAbortAction; } |
| 1248 | +-(void)archive:(XADArchive *)arc extractionOfEntryDidSucceed:(NSInteger)n |
| 1249 | +{ |
| 1250 | + if ([delegate respondsToSelector:@selector(archive:extractionOfEntryDidSucceed:)]) { |
| 1251 | + [delegate archive:arc extractionOfEntryDidSucceed:n]; |
| 1252 | + } |
| 1253 | +} |
1221 | 1254 |
|
1222 | | --(void)archiveNeedsPassword:(XADArchive *)archive {} |
| 1255 | +-(XADAction)archive:(XADArchive *)arc extractionOfEntryDidFail:(NSInteger)n error:(XADError)error |
| 1256 | +{ |
| 1257 | + if ([delegate respondsToSelector:@selector(archive:extractionOfEntryDidFail:error:)]) { |
| 1258 | + return [delegate archive:arc extractionOfEntryDidFail:n error:error]; |
| 1259 | + } else { |
| 1260 | + return XADAbortAction; |
| 1261 | + } |
| 1262 | +} |
1223 | 1263 |
|
1224 | | --(void)archive:(XADArchive *)archive extractionOfEntryWillStart:(int)n {} |
1225 | | --(void)archive:(XADArchive *)archive extractionProgressForEntry:(int)n bytes:(off_t)bytes of:(off_t)total {} |
1226 | | --(void)archive:(XADArchive *)archive extractionOfEntryDidSucceed:(int)n {} |
1227 | | --(XADAction)archive:(XADArchive *)archive extractionOfEntryDidFail:(int)n error:(XADError)error { return XADAbortAction; } |
1228 | | --(XADAction)archive:(XADArchive *)archive extractionOfResourceForkForEntryDidFail:(int)n error:(XADError)error { return XADAbortAction; } |
| 1264 | +-(XADAction)archive:(XADArchive *)arc extractionOfResourceForkForEntryDidFail:(NSInteger)n error:(XADError)error |
| 1265 | +{ |
| 1266 | + if ([delegate respondsToSelector:@selector(archive:extractionOfResourceForkForEntryDidFail:error:)]) { |
| 1267 | + return [delegate archive:arc extractionOfResourceForkForEntryDidFail:n error:error]; |
| 1268 | + } else { |
| 1269 | + return XADAbortAction; |
| 1270 | + } |
| 1271 | +} |
1229 | 1272 |
|
1230 | | --(void)archive:(XADArchive *)archive extractionProgressBytes:(off_t)bytes of:(off_t)total {} |
1231 | | --(void)archive:(XADArchive *)archive extractionProgressFiles:(int)files of:(int)total {} |
| 1273 | +-(void)archive:(XADArchive *)arc extractionProgressBytes:(off_t)bytes of:(off_t)total |
| 1274 | +{ |
| 1275 | + if ([delegate respondsToSelector:@selector(archive:extractionProgressBytes:of:)]) { |
| 1276 | + [delegate archive:arc extractionProgressBytes:bytes of:total]; |
| 1277 | + } |
| 1278 | +} |
1232 | 1279 |
|
1233 | | -// Deprecated |
1234 | | --(NSStringEncoding)archive:(XADArchive *)archive encodingForName:(const char *)bytes guess:(NSStringEncoding)guess confidence:(float)confidence { return guess; } |
1235 | | --(XADAction)archive:(XADArchive *)archive nameDecodingDidFailForEntry:(int)n bytes:(const char *)bytes { return XADAbortAction; } |
| 1280 | +-(void)archive:(XADArchive *)arc extractionProgressFiles:(NSInteger)files of:(NSInteger)total; |
| 1281 | +{} |
1236 | 1282 |
|
1237 | 1283 | @end |
1238 | | - |
1239 | | - |
|
0 commit comments