Skip to content

Commit 12ecfb2

Browse files
committed
unique a ballooned whitelist if there are lots of duplicate entries; this seems to be pretty fast, since it basically just loads the array from prefs into a set and then writes the set back out again; on a 1.5 MB prefs file with 77673 items, on a MacBook Core 2 Duo 2 GHz, it takes only a second or two
(cherry picked from commit fa4536e)
1 parent 33c8bcf commit 12ecfb2

File tree

3 files changed

+32
-24
lines changed

3 files changed

+32
-24
lines changed

Plugin/CTFWhitelist.m

+21-24
Original file line numberDiff line numberDiff line change
@@ -43,27 +43,18 @@ of this software and associated documentation files (the "Software"), to deal
4343
CTFSiteKindWhitelist = 0
4444
} CTGSiteKind;
4545

46-
47-
static NSUInteger indexOfItemForSite( NSArray* arr, NSString* site )
46+
static NSDictionary* itemForSite( NSSet* set, NSString* site )
4847
{
48+
NSDictionary *specificWhitelistItem = nil;
49+
4950
int i = 0;
50-
CTFForEachObject( NSDictionary, item, arr ) {
51+
CTFForEachObject( NSDictionary, item, set ) {
5152
if( [ [ item objectForKey: @"site" ] isEqualToString: site ] )
52-
return i;
53+
specificWhitelistItem = item;
5354
++i;
5455
}
5556

56-
return NSNotFound;
57-
}
58-
59-
static NSDictionary* itemForSite( NSArray* arr, NSString* site )
60-
{
61-
NSUInteger index = indexOfItemForSite( arr, site );
62-
63-
if( index != NSNotFound )
64-
return [ arr objectAtIndex: index ];
65-
66-
return nil;
57+
return specificWhitelistItem;
6758
}
6859

6960
static NSDictionary* whitelistItemForSite( NSString* site )
@@ -166,25 +157,31 @@ - (BOOL) _isHostWhitelisted
166157

167158
- (BOOL) _isWhiteListedForHostString:(NSString *)hostString
168159
{
169-
NSArray *hostWhitelist = [[CTFUserDefaultsController standardUserDefaults] arrayForKey: sHostSiteInfoDefaultsKey];
170-
return hostWhitelist && itemForSite(hostWhitelist, hostString) != nil;
160+
NSArray *hostWhitelistArray = [[CTFUserDefaultsController standardUserDefaults] arrayForKey: sHostSiteInfoDefaultsKey];
161+
NSSet *hostWhitelistSet = [NSSet setWithArray:hostWhitelistArray];
162+
return hostWhitelistArray && itemForSite(hostWhitelistSet, hostString) != nil;
171163
}
172164

173-
- (NSMutableArray *) _mutableSiteInfo
165+
- (NSMutableSet *) _mutableSiteInfo
174166
{
175-
NSMutableArray *hostWhitelist = [[[[CTFUserDefaultsController standardUserDefaults] arrayForKey: sHostSiteInfoDefaultsKey] mutableCopy] autorelease];
176-
if (hostWhitelist == nil) {
177-
hostWhitelist = [NSMutableArray array];
178-
}
167+
NSMutableArray *hostWhitelistArray = [[[[CTFUserDefaultsController standardUserDefaults] arrayForKey: sHostSiteInfoDefaultsKey] mutableCopy] autorelease];
168+
169+
NSMutableSet *hostWhitelist;
170+
if (hostWhitelistArray == nil) {
171+
hostWhitelist = [NSMutableSet setWithCapacity:0];
172+
} else {
173+
hostWhitelist = [NSMutableSet setWithArray:hostWhitelistArray];
174+
}
175+
179176
return hostWhitelist;
180177
}
181178

182179
- (void) _addHostToWhitelist
183180
{
184-
NSMutableArray *siteInfo = [self _mutableSiteInfo];
181+
NSMutableSet *siteInfo = [self _mutableSiteInfo];
185182
[siteInfo addObject: whitelistItemForSite([self host])];
186183

187-
[[CTFUserDefaultsController standardUserDefaults] setValue:siteInfo forKeyPath:@"values.siteInfo"];
184+
[[CTFUserDefaultsController standardUserDefaults] setValue:[siteInfo allObjects] forKeyPath:@"values.siteInfo"];
188185

189186
[[NSNotificationCenter defaultCenter] postNotificationName: sCTFWhitelistAdditionMade object: self];
190187
}

Plugin/Plugin.h

+1
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ THE SOFTWARE.
6565

6666
- (id) initWithArguments:(NSDictionary *)arguments;
6767
- (void)_migratePrefsToExternalFile;
68+
- (void)_uniquePrefsFileWhitelist;
6869
- (void) _addApplicationWhitelistArrayToPrefsFile;
6970

7071
- (DOMElement *)container;

Plugin/Plugin.m

+10
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ - (id) initWithArguments:(NSDictionary *)arguments
155155

156156
[self _migrateWhitelist];
157157
[self _migratePrefsToExternalFile];
158+
[self _uniquePrefsFileWhitelist];
158159
[self _addApplicationWhitelistArrayToPrefsFile];
159160

160161

@@ -521,6 +522,15 @@ - (void) _migratePrefsToExternalFile
521522
[[NSUserDefaults standardUserDefaults] removeSuiteNamed:@"com.github.rentzsch.clicktoflash"];
522523
}
523524

525+
- (void) _uniquePrefsFileWhitelist
526+
{
527+
NSArray *siteInfoArray = [[CTFUserDefaultsController standardUserDefaults] arrayForKey:@"siteInfo"];
528+
NSSet *siteInfoSet = [NSSet setWithArray:siteInfoArray];
529+
530+
[[CTFUserDefaultsController standardUserDefaults] setValue:[siteInfoSet allObjects] forKeyPath:@"values.siteInfo"];
531+
}
532+
533+
524534
- (void) _addApplicationWhitelistArrayToPrefsFile
525535
{
526536
CTFUserDefaultsController *standardUserDefaults = [CTFUserDefaultsController standardUserDefaults];

0 commit comments

Comments
 (0)