Files

50 lines
2.3 KiB
Objective-C

#import "installer/FabricUtils.h"
#import "ModpackUtils.h"
@implementation ModpackUtils
+ (void)archive:(UZKArchive *)archive extractDirectory:(NSString *)dir toPath:(NSString *)path error:(NSError *__autoreleasing*)error {
[archive performOnFilesInArchive:^(UZKFileInfo *fileInfo, BOOL *stop) {
if (![fileInfo.filename hasPrefix:dir] ||
fileInfo.filename.length <= dir.length) {
return;
}
NSString *fileName = [fileInfo.filename substringFromIndex:dir.length+1];
NSString *destItemPath = [path stringByAppendingPathComponent:fileName];
NSString *destDirPath = fileInfo.isDirectory ? destItemPath : destItemPath.stringByDeletingLastPathComponent;
BOOL createdDir = [NSFileManager.defaultManager createDirectoryAtPath:destDirPath
withIntermediateDirectories:YES
attributes:nil error:error];
if (!createdDir) {
*stop = YES;
return;
} else if (fileInfo.isDirectory) {
return;
}
NSData *data = [archive extractData:fileInfo error:error];
BOOL written = [data writeToFile:destItemPath options:NSDataWritingAtomic error:error];
*stop = !data || !written;
if (!*stop) {
NSLog(@"[ModpackDL] Extracted %@", fileInfo.filename);
}
} error:error];
}
+ (NSDictionary *)infoForDependencies:(NSDictionary *)dependency {
NSMutableDictionary *info = [NSMutableDictionary new];
NSString *minecraftVersion = dependency[@"minecraft"];
if (dependency[@"forge"]) {
info[@"id"] = [NSString stringWithFormat:@"%@-forge-%@", minecraftVersion, dependency[@"forge"]];
} else if (dependency[@"fabric-loader"]) {
info[@"id"] = [NSString stringWithFormat:@"fabric-loader-%@-%@", dependency[@"fabric-loader"], minecraftVersion];
info[@"json"] = [NSString stringWithFormat:FabricUtils.endpoints[@"Fabric"][@"json"], minecraftVersion, dependency[@"fabric-loader"]];
} else if (dependency[@"quilt-loader"]) {
info[@"id"] = [NSString stringWithFormat:@"quilt-loader-%@-%@", dependency[@"quilt-loader"], minecraftVersion];
info[@"json"] = [NSString stringWithFormat:FabricUtils.endpoints[@"Quilt"][@"json"], minecraftVersion, dependency[@"quilt-loader"]];
}
return info;
}
@end