Browse Source

【功能】添加Keys

xingcheng02 1 year ago
parent
commit
0918425cc9

+ 1 - 1
XCTheme/Classes/Impl/XCThemeManager.swift

@@ -65,7 +65,7 @@ public class XCThemeManager: NSObject {
         }
         
         // TODO: Mocked
-        self.selectedTheme = self.theme(forId: "bubbles_motion")
+        self.selectedTheme = self.theme(forId: "0.system_auto")
         
         let originalMethod = class_getInstanceMethod(UIViewController.classForCoder(), #selector(UIViewController.viewDidLoad))!
         let newMethod = class_getInstanceMethod(UIViewController.classForCoder(), #selector(UIViewController.XCThemeManagerSwizzledViewDidLoad))!

+ 4 - 2
XCTheme/Classes/Impl/XCThemeService.m

@@ -28,14 +28,16 @@
 #pragma mark - Theme Download
 - (NSArray<XCThemeSpecModel *> *)fetchBundleSpecs {
     NSString *path = [NSBundle.mainBundle.resourcePath stringByAppendingString:@"/ThemeResources"];
-    NSArray *items = [NSFileManager.defaultManager contentsOfDirectoryAtPath:path error:nil];
+    NSArray *items = [[NSFileManager.defaultManager contentsOfDirectoryAtPath:path error:nil] sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
+        return [obj1 compare:obj2];
+    }];
     NSMutableArray<XCThemeSpecModel *> *specs = [NSMutableArray new];
     for (NSString *file in items) {
         NSString *filePath = [NSString stringWithFormat:@"%@/%@", path, file];
         BOOL isDir = NO;
         [NSFileManager.defaultManager fileExistsAtPath:filePath isDirectory:&isDir];
         if (isDir) {
-            XCThemeSpec *theme = [[XCThemeSpec alloc] initWithThemeId:filePath];
+            XCThemeSpec *theme = [[XCThemeSpec alloc] initWithThemeId:file];
             if (theme) {
                 XCThemeSpecModel *specModel = [[XCThemeSpecModel alloc] initWithWrappedObject:theme];
                 [specs addObject:specModel];

+ 38 - 0
XCTheme/Classes/Impl/XCThemeSpec.swift

@@ -43,6 +43,9 @@ public class XCThemeSpec: NSObject {
         case "light":
             self.interfaceStyle = .light
             break
+        case "auto":
+            self.interfaceStyle = .unspecified
+            break
         default:
             return nil
         }
@@ -124,6 +127,41 @@ extension XCThemeSpec {
         return UIColor(hexString: color)
     }
     
+    public var rarity: Int {
+        guard let rarity = self.originalDict["rarity"] as? Int else {
+            return 0
+        }
+        return rarity
+    }
+    
+    public var bannerImage: String? {
+        guard let bannerURL = self.originalDict["bannerImage"] as? String else {
+            return nil
+        }
+        return bannerURL
+    }
+    
+    public var themeNameChinese: String? {
+        guard let value = self.originalDict["themeName.ch"] as? String else {
+            return nil
+        }
+        return value
+    }
+    
+    public var themeNameEnglish: String? {
+        guard let value = self.originalDict["themeName.en"] as? String else {
+            return nil
+        }
+        return value
+    }
+    
+    public var useSystemAppearance: Bool {
+        guard let value = self.originalDict["system"] as? Bool else {
+            return false
+        }
+        return value
+    }
+    
 }
 
 fileprivate extension UIColor {

+ 6 - 1
XCTheme/Classes/Module/XCThemeSpecModel.h

@@ -11,7 +11,7 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface XCThemeSpecModel : NSObject
 
-@property (nonatomic, weak, readonly) id wrappedObject;
+@property (nonatomic, strong, readonly) id wrappedObject;
 
 @property (nonatomic, copy, readonly) NSString *themeId;
 @property (nonatomic, copy, readonly, nullable) NSString *containerPath;
@@ -22,6 +22,11 @@ NS_ASSUME_NONNULL_BEGIN
 @property (nonatomic, copy, readonly, nullable) NSString *blurStyle;
 @property (nonatomic, copy, readonly, nullable) NSString *entranceHTMLFile;
 @property (nonatomic, strong, readonly, nullable) UIColor *entranceHTMLColor;
+@property (nonatomic, assign, readonly) NSInteger rarity;
+@property (nonatomic, copy, readonly, nullable) NSString *bannerImage;
+@property (nonatomic, copy, readonly, nullable) NSString *titleChinese;
+@property (nonatomic, copy, readonly, nullable) NSString *titleEnglish;
+@property (nonatomic, assign, readonly) BOOL useSystemAppearance;
 
 - (nullable instancetype)initWithWrappedObject:(id)object;
 

+ 21 - 1
XCTheme/Classes/Module/XCThemeSpecModel.m

@@ -10,7 +10,7 @@
 
 @interface XCThemeSpecModel ()
 
-@property (nonatomic, weak) XCThemeSpec *wrappedObject;
+@property (nonatomic, strong) XCThemeSpec *wrappedObject;
 
 @end
 
@@ -66,4 +66,24 @@
     return self.wrappedObject.themeId;
 }
 
+- (NSInteger)rarity {
+    return self.wrappedObject.rarity;
+}
+
+- (NSString *)bannerImage {
+    return self.wrappedObject.bannerImage;
+}
+
+- (NSString *)titleChinese {
+    return self.wrappedObject.themeNameChinese;
+}
+
+- (NSString *)titleEnglish {
+    return self.wrappedObject.themeNameEnglish;
+}
+
+- (BOOL)useSystemAppearance {
+    return self.wrappedObject.useSystemAppearance;
+}
+
 @end