修改在西班牙键盘bar上 ai图标不显示问题
This commit is contained in:
@@ -959,21 +959,67 @@ static NSString * const kKBSkinMetadataThemeKey = @"theme_json";
|
||||
NSLog(@"[SkinBridge] reloadCurrentSkinIconMap: currentSkin=%@ targetSkin=%@ lang=%@",
|
||||
currentSkinId, targetSkinId, languageCode);
|
||||
|
||||
if ([targetSkinId isEqualToString:currentSkinId]) {
|
||||
NSLog(@"[SkinBridge] reloadCurrentSkinIconMap: already on target skin, just refresh icon map");
|
||||
} else {
|
||||
BOOL hasTargetSkin = [KBSkinManager kb_hasAssetsForSkinId:targetSkinId];
|
||||
NSLog(@"[SkinBridge] reloadCurrentSkinIconMap: hasTargetSkin=%d", hasTargetSkin);
|
||||
|
||||
if (hasTargetSkin) {
|
||||
NSError *applyError = nil;
|
||||
BOOL applied = [self applyInstalledSkinWithId:targetSkinId error:&applyError];
|
||||
NSLog(@"[SkinBridge] reloadCurrentSkinIconMap: switched to %@ applied=%d error=%@",
|
||||
targetSkinId, applied, applyError);
|
||||
return applied;
|
||||
// 检查目标皮肤是否存在
|
||||
BOOL hasTargetSkin = [KBSkinManager kb_hasAssetsForSkinId:targetSkinId];
|
||||
NSLog(@"[SkinBridge] reloadCurrentSkinIconMap: hasTargetSkin=%d", hasTargetSkin);
|
||||
|
||||
if (hasTargetSkin) {
|
||||
// 先获取目标皮肤的图标映射
|
||||
NSDictionary<NSString *, NSString *> *iconShortNames = [self iconShortNamesForLanguageCode:languageCode];
|
||||
if (iconShortNames.count == 0) {
|
||||
iconShortNames = @{};
|
||||
}
|
||||
|
||||
NSFileManager *fm = [NSFileManager defaultManager];
|
||||
NSString *targetSkinRoot = [[self kb_skinsRootPath] stringByAppendingPathComponent:targetSkinId];
|
||||
NSString *targetIconsDir = [targetSkinRoot stringByAppendingPathComponent:@"icons"];
|
||||
|
||||
NSMutableDictionary<NSString *, NSString *> *iconPathMap = [NSMutableDictionary dictionary];
|
||||
[iconShortNames enumerateKeysAndObjectsUsingBlock:^(NSString *identifier, NSString *shortName, BOOL *stop) {
|
||||
if (![shortName isKindOfClass:NSString.class] || shortName.length == 0) return;
|
||||
NSString *fileName = shortName;
|
||||
if (fileName.pathExtension.length == 0) {
|
||||
fileName = [fileName stringByAppendingPathExtension:@"png"];
|
||||
}
|
||||
NSString *fullPath = [targetIconsDir stringByAppendingPathComponent:fileName];
|
||||
BOOL exists = [fm fileExistsAtPath:fullPath];
|
||||
if ([identifier isEqualToString:@"ai"] || [identifier isEqualToString:@"key_revoke"]) {
|
||||
NSLog(@"[SkinBridge] Checking icon: id=%@ shortName=%@ fullPath=%@ exists=%d",
|
||||
identifier, shortName, fullPath, exists);
|
||||
}
|
||||
if (exists) {
|
||||
NSString *relative = [NSString stringWithFormat:@"Skins/%@/icons/%@", targetSkinId, fileName];
|
||||
iconPathMap[identifier] = relative;
|
||||
}
|
||||
}];
|
||||
|
||||
NSLog(@"[SkinBridge] reloadCurrentSkinIconMap: targetSkin=%@ iconCount=%lu",
|
||||
targetSkinId, (unsigned long)iconPathMap.count);
|
||||
|
||||
// 构建主题 JSON
|
||||
NSDictionary *meta = [self kb_metadataForSkinId:targetSkinId];
|
||||
NSMutableDictionary *themeJSON = [NSMutableDictionary dictionary];
|
||||
themeJSON[@"id"] = targetSkinId;
|
||||
NSString *name = [meta[kKBSkinMetadataNameKey] isKindOfClass:NSString.class] ? meta[kKBSkinMetadataNameKey] : targetSkinId;
|
||||
themeJSON[@"name"] = name;
|
||||
if (iconPathMap.count > 0) {
|
||||
themeJSON[@"key_icons"] = iconPathMap.copy;
|
||||
}
|
||||
|
||||
NSString *bgPath = [targetSkinRoot stringByAppendingPathComponent:@"background.png"];
|
||||
NSData *bgData = [NSData dataWithContentsOfFile:bgPath];
|
||||
|
||||
BOOL themeOK = [[KBSkinManager shared] applyThemeFromJSON:themeJSON];
|
||||
if (bgData.length > 0) {
|
||||
[[KBSkinManager shared] applyImageSkinWithData:bgData skinId:targetSkinId name:name];
|
||||
}
|
||||
|
||||
NSLog(@"[SkinBridge] reloadCurrentSkinIconMap: switched to %@ applied=%d iconCount=%lu",
|
||||
targetSkinId, themeOK, (unsigned long)iconPathMap.count);
|
||||
return themeOK;
|
||||
}
|
||||
|
||||
// 如果目标皮肤不存在,尝试更新当前皮肤的图标映射
|
||||
if (currentSkinId.length == 0 || [currentSkinId isEqualToString:@"default"]) {
|
||||
NSLog(@"[SkinBridge] reloadCurrentSkinIconMap: no custom skin applied, skip");
|
||||
return NO;
|
||||
|
||||
Reference in New Issue
Block a user