处理因为网络下载失败导致之前的皮肤不在的bug

This commit is contained in:
2025-11-25 22:00:13 +08:00
parent 73c83153f9
commit 4ab8a61a3c

View File

@@ -97,12 +97,14 @@ static NSString * const kKBSkinPendingIconShortKey = @"iconShortNames";
BOOL isDir = NO;
BOOL hasIconsDir = [fm fileExistsAtPath:iconsDir isDirectory:&isDir] && isDir;
NSArray *contents = hasIconsDir ? [fm contentsOfDirectoryAtPath:iconsDir error:NULL] : nil;
//
BOOL hasCachedAssets = (contents.count > 0);
NSString *bgPath = [skinRoot stringByAppendingPathComponent:@"background.png"];
dispatch_group_t group = dispatch_group_create();
__block BOOL zipOK = YES;
__block BOOL didUnzip = NO; // Zip
__block NSError *innerError = nil;
#if __has_include(<SSZipArchive/SSZipArchive.h>)
@@ -156,6 +158,9 @@ static NSString * const kKBSkinPendingIconShortKey = @"iconShortNames";
return;
}
// 使 icons
didUnzip = YES;
//
// Skins/<skinId>/icons Skins/<skinId>/<>/icons
// icons background.png
@@ -207,7 +212,7 @@ static NSString * const kKBSkinPendingIconShortKey = @"iconShortNames";
[KBHUD show];
[[KBNetworkManager shared] GET:zipURL parameters:nil headers:nil completion:^(id jsonOrData, NSURLResponse *response, NSError *error) {
NSLog(@"[SkinBridge] GET finished, error = %@", error);
[KBHUD dismiss];
// [KBHUD dismiss];
NSData *data = ([jsonOrData isKindOfClass:NSData.class] ? (NSData *)jsonOrData : nil);
if (error || data.length == 0) {
zipOK = NO;
@@ -249,6 +254,17 @@ static NSString * const kKBSkinPendingIconShortKey = @"iconShortNames";
//
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
//
// B
BOOL hasAssets = (hasCachedAssets || didUnzip);
if (!hasAssets) {
NSError *finalError = innerError ?: [NSError errorWithDomain:KBSkinBridgeErrorDomain
code:KBSkinBridgeErrorZipMissing
userInfo:@{NSLocalizedDescriptionKey: @"Zip resource not available"}];
if (completion) completion(NO, finalError);
return;
}
// key_icons -> App Group
NSMutableDictionary<NSString *, NSString *> *iconPathMap = [NSMutableDictionary dictionary];
[iconShortNames enumerateKeysAndObjectsUsingBlock:^(NSString *identifier, NSString *shortName, BOOL *stop) {