]> git.saurik.com Git - winterboard.git/blobdiff - Settings.mm
Here we go again: this time with SBIcon setAlpha.
[winterboard.git] / Settings.mm
index 5f1ab8cf93e17d61809f17ed0aa8da16159c727a..619df9bae7cb45a9ef17842c8534f185d9415b22 100644 (file)
@@ -48,6 +48,31 @@ static BOOL settingsChanged;
 static NSMutableDictionary *_settings;
 static NSString *_plist;
 
+void AddThemes(NSMutableArray *themesOnDisk, NSString *folder) {
+    NSArray *themes([[NSFileManager defaultManager] contentsOfDirectoryAtPath:folder error:NULL]);
+    for (NSString *theme in themes) {
+        if (NSDictionary *info = [NSDictionary dictionaryWithContentsOfFile:[NSString stringWithFormat:@"%@/%@/Info.plist", folder, theme]]) {
+            if (NSArray *version = [info objectForKey:@"CoreFoundationVersion"]) {
+                size_t count([version count]);
+                if (count == 0 || count > 2)
+                    continue;
+
+                double lower([[version objectAtIndex:0] doubleValue]);
+                if (kCFCoreFoundationVersionNumber < lower)
+                    continue;
+
+                if (count != 1) {
+                    double upper([[version objectAtIndex:1] doubleValue]);
+                    if (upper <= kCFCoreFoundationVersionNumber)
+                        continue;
+                }
+            }
+        }
+
+        [themesOnDisk addObject:theme];
+    }
+}
+
 /* [NSObject yieldToSelector:(withObject:)] {{{*/
 @interface NSObject (wb$yieldToSelector)
 - (id) wb$yieldToSelector:(SEL)selector withObject:(id)object;
@@ -127,8 +152,6 @@ static NSString *_plist;
 
 @property (nonatomic, retain) NSMutableArray *themes;
 
-+ (void) load;
-
 - (id) initForContentSize:(CGSize)size;
 - (id) view;
 - (id) navigationTitle;
@@ -150,7 +173,7 @@ static NSString *_plist;
 
 @synthesize themes = _themes;
 
-+ (void) load {
++ (void) initialize {
     NSAutoreleasePool *pool([[NSAutoreleasePool alloc] init]);
     checkImage = [_UIImageWithName(@"UIPreferencesBlueCheck.png") retain];
     uncheckedImage = [[UIImage imageWithContentsOfFile:@"/System/Library/PreferenceBundles/WinterBoardSettings.bundle/SearchResultsCheckmarkClear.png"] retain];
@@ -174,16 +197,8 @@ static NSString *_plist;
         }
 
         NSMutableArray *themesOnDisk([NSMutableArray array]);
-
-        [themesOnDisk
-            addObjectsFromArray:[[NSFileManager defaultManager]
-            contentsOfDirectoryAtPath:@"/Library/Themes" error:NULL]
-        ];
-
-        [themesOnDisk addObjectsFromArray:[[NSFileManager defaultManager]
-            contentsOfDirectoryAtPath:[NSString stringWithFormat:@"%@/Library/SummerBoard/Themes", NSHomeDirectory()]
-            error:NULL
-        ]];
+        AddThemes(themesOnDisk, @"/Library/Themes");
+        AddThemes(themesOnDisk, [NSString stringWithFormat:@"%@/Library/SummerBoard/Themes", NSHomeDirectory()]);
 
         for (int i = 0, count = [themesOnDisk count]; i < count; i++) {
             NSString *theme = [themesOnDisk objectAtIndex:i];
@@ -557,8 +572,28 @@ static NSString *_plist;
 }
 
 - (id) specifiers {
-    if (!_specifiers)
-        _specifiers = [[self loadSpecifiersFromPlistName:@"WinterBoard" target:self] retain];
+    if (!_specifiers) {
+        NSMutableArray *specifiers([NSMutableArray array]);
+        for (PSSpecifier *specifier in [self loadSpecifiersFromPlistName:@"WinterBoard" target:self]) {
+            if (NSArray *version = [specifier propertyForKey:@"wb$filter"]) {
+                size_t count([version count]);
+                if (count == 0 || count > 2)
+                    continue;
+
+                double lower([[version objectAtIndex:0] doubleValue]);
+                if (kCFCoreFoundationVersionNumber < lower)
+                    continue;
+
+                if (count != 1) {
+                    double upper([[version objectAtIndex:1] doubleValue]);
+                    if (upper <= kCFCoreFoundationVersionNumber)
+                        continue;
+                }
+            }
+            [specifiers addObject:specifier];
+        }
+        _specifiers = [specifiers retain];
+    }
     return _specifiers;
 }