/
SNBPreferencesManager.mm
103 lines (86 loc) · 3.31 KB
/
SNBPreferencesManager.mm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#import "Interfaces.h"
#import "SNBPreferencesManager.h"
@interface SNBPreferencesManager (Private)
-(void)_preferencesChanged;
@end
static void preferencesChanged() {
NSLog(@"prefs callback received");
CFPreferencesAppSynchronize(CFSTR("com.phillipt.snakebite"));
[[SNBPreferencesManager sharedManager] _preferencesChanged];
}
@implementation SNBPreferencesManager
+(void)load {
NSLog(@"Load called");
//make sure this exists in time
[self sharedManager];
}
+(instancetype)sharedManager {
// Setup instance for current class once
static id sharedInstance = nil;
static dispatch_once_t token = 0;
dispatch_once(&token, ^{
sharedInstance = [self new];
});
// Provide instance
return sharedInstance;
}
-(id)init {
if ((self = [super init])) {
NSLog(@"init called");
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(),
NULL,
(CFNotificationCallback)preferencesChanged,
CFSTR("com.phillipt.snakebite/prefsChanged"),
NULL,
CFNotificationSuspensionBehaviorDeliverImmediately);
[self _preferencesChanged];
}
return self;
}
-(void)attemptSettingFallbackPrefs {
//set default values and bail
//only force-set defaults if it seems like values haven't been set yet
//once prefs have been set once, _blurStyle will only ever be 13 or 25, so let's use that to see if preferences have ever been set
if (_blurStyle == 0) {
NSLog(@"Setting default values because preferences have never been created");
_enabled = YES;
_showAppLabels = NO;
_useMultitaskingMode = YES;
_numApps = 6;
_blurStyle = 25;
}
}
-(void)_preferencesChanged {
NSLog(@"preferencesChanged");
CFStringRef appID = CFSTR("com.phillipt.snakebite");
CFArrayRef keyList = CFPreferencesCopyKeyList(appID, kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
if (!keyList) {
NSLog(@"There's been an error getting the key list!");
[self attemptSettingFallbackPrefs];
return;
}
NSDictionary* preferences = (NSDictionary *)CFBridgingRelease(CFPreferencesCopyMultiple(keyList, appID, kCFPreferencesCurrentUser, kCFPreferencesAnyHost));
CFRelease(keyList);
if (!preferences) {
NSLog(@"There's been an error getting the preferences dictionary!");
[self attemptSettingFallbackPrefs];
}
NSLog(@"keysToValues: %@", preferences);
_enabled = preferences[@"enabled"] ? [(NSNumber*)preferences[@"enabled"] boolValue] : YES;
_showAppLabels = preferences[@"showAppLabels"] ? [(NSNumber*)preferences[@"showAppLabels"] boolValue] : NO;
_useMultitaskingMode = preferences[@"useMultitaskingMode"] ? [(NSNumber*)preferences[@"useMultitaskingMode"] boolValue] : YES;
_numApps = preferences[@"numApps"] ? [(NSNumber*)preferences[@"numApps"] intValue] : 6;
_blurStyle = preferences[@"blurStyle"] ? [(NSNumber*)preferences[@"blurStyle"] intValue] : 25;
NSMutableArray* favorites = [NSMutableArray new];
for (NSString *key in [preferences allKeys]) {
NSString* prefix = @"fav-";
if ([key hasPrefix:prefix]) {
NSString *trimmedBundleID = [key substringFromIndex:prefix.length];
if ([((NSNumber*)preferences[key]) boolValue]) {
[favorites addObject:trimmedBundleID];
}
}
}
_favoriteBundleIDs = [NSArray arrayWithArray:favorites];
}
@end