109 lines
2.6 KiB
Objective-C
109 lines
2.6 KiB
Objective-C
//
|
|
// UZKFileInfo.m
|
|
// UnzipKit
|
|
//
|
|
//
|
|
|
|
#import "UZKFileInfo.h"
|
|
#import "unzip.h"
|
|
|
|
@interface UZKFileInfo ()
|
|
|
|
@property (readwrite) tm_unz zipTMUDate;
|
|
|
|
@end
|
|
|
|
|
|
@implementation UZKFileInfo
|
|
|
|
@synthesize timestamp = _timestamp;
|
|
|
|
|
|
#pragma mark - Initialization
|
|
|
|
|
|
+ (instancetype) fileInfo:(unz_file_info64 *)fileInfo filename:(NSString *)filename {
|
|
return [[UZKFileInfo alloc] initWithFileInfo:fileInfo filename:filename];
|
|
}
|
|
|
|
- (instancetype)initWithFileInfo:(unz_file_info64 *)fileInfo filename:(NSString *)filename
|
|
{
|
|
if ((self = [super init])) {
|
|
_filename = filename;
|
|
_uncompressedSize = fileInfo->uncompressed_size;
|
|
_compressedSize = fileInfo->compressed_size;
|
|
_zipTMUDate = fileInfo->tmu_date;
|
|
_CRC = fileInfo->crc;
|
|
_isEncryptedWithPassword = (fileInfo->flag & 1) != 0;
|
|
_isDirectory = [filename hasSuffix:@"/"];
|
|
|
|
if (_isDirectory) {
|
|
_filename = [_filename substringToIndex:_filename.length - 1];
|
|
}
|
|
|
|
_compressionMethod = [self readCompressionMethod:fileInfo->compression_method
|
|
flag:fileInfo->flag];
|
|
|
|
uLong permissions = (fileInfo->external_fa >> 16) & 0777U;
|
|
_posixPermissions = permissions ? permissions : 0644U;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
|
|
|
|
#pragma mark - Properties
|
|
|
|
|
|
- (NSDate *)timestamp {
|
|
if (!_timestamp) {
|
|
_timestamp = [self readDate:self.zipTMUDate];
|
|
}
|
|
|
|
return _timestamp;
|
|
}
|
|
|
|
|
|
|
|
#pragma mark - Private Methods
|
|
|
|
|
|
- (UZKCompressionMethod)readCompressionMethod:(uLong)compressionMethod
|
|
flag:(uLong)flag
|
|
{
|
|
UZKCompressionMethod level = UZKCompressionMethodNone;
|
|
if (compressionMethod != 0) {
|
|
switch ((flag & 0x6) / 2) {
|
|
case 0:
|
|
level = UZKCompressionMethodDefault;
|
|
break;
|
|
|
|
case 1:
|
|
level = UZKCompressionMethodBest;
|
|
break;
|
|
|
|
default:
|
|
level = UZKCompressionMethodFastest;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return level;
|
|
}
|
|
|
|
- (NSDate *)readDate:(tm_unz)date
|
|
{
|
|
NSDateComponents *components = [[NSDateComponents alloc] init];
|
|
components.day = date.tm_mday;
|
|
components.month = date.tm_mon + 1;
|
|
components.year = date.tm_year;
|
|
components.hour = date.tm_hour;
|
|
components.minute = date.tm_min;
|
|
components.second = date.tm_sec;
|
|
NSCalendar *calendar = [NSCalendar currentCalendar];
|
|
|
|
return [calendar dateFromComponents:components];
|
|
}
|
|
|
|
@end
|