Skip to content

Commit

Permalink
unique a ballooned whitelist if there are lots of duplicate entries; …
Browse files Browse the repository at this point in the history
…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)
  • Loading branch information
simX committed Oct 1, 2009
1 parent 33c8bcf commit 12ecfb2
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 24 deletions.
45 changes: 21 additions & 24 deletions Plugin/CTFWhitelist.m
Expand Up @@ -43,27 +43,18 @@ of this software and associated documentation files (the "Software"), to deal
CTFSiteKindWhitelist = 0 CTFSiteKindWhitelist = 0
} CTGSiteKind; } CTGSiteKind;



static NSDictionary* itemForSite( NSSet* set, NSString* site )
static NSUInteger indexOfItemForSite( NSArray* arr, NSString* site )
{ {
NSDictionary *specificWhitelistItem = nil;

int i = 0; int i = 0;
CTFForEachObject( NSDictionary, item, arr ) { CTFForEachObject( NSDictionary, item, set ) {
if( [ [ item objectForKey: @"site" ] isEqualToString: site ] ) if( [ [ item objectForKey: @"site" ] isEqualToString: site ] )
return i; specificWhitelistItem = item;
++i; ++i;
} }


return NSNotFound; return specificWhitelistItem;
}

static NSDictionary* itemForSite( NSArray* arr, NSString* site )
{
NSUInteger index = indexOfItemForSite( arr, site );

if( index != NSNotFound )
return [ arr objectAtIndex: index ];

return nil;
} }


static NSDictionary* whitelistItemForSite( NSString* site ) static NSDictionary* whitelistItemForSite( NSString* site )
Expand Down Expand Up @@ -166,25 +157,31 @@ - (BOOL) _isHostWhitelisted


- (BOOL) _isWhiteListedForHostString:(NSString *)hostString - (BOOL) _isWhiteListedForHostString:(NSString *)hostString
{ {
NSArray *hostWhitelist = [[CTFUserDefaultsController standardUserDefaults] arrayForKey: sHostSiteInfoDefaultsKey]; NSArray *hostWhitelistArray = [[CTFUserDefaultsController standardUserDefaults] arrayForKey: sHostSiteInfoDefaultsKey];
return hostWhitelist && itemForSite(hostWhitelist, hostString) != nil; NSSet *hostWhitelistSet = [NSSet setWithArray:hostWhitelistArray];
return hostWhitelistArray && itemForSite(hostWhitelistSet, hostString) != nil;
} }


- (NSMutableArray *) _mutableSiteInfo - (NSMutableSet *) _mutableSiteInfo
{ {
NSMutableArray *hostWhitelist = [[[[CTFUserDefaultsController standardUserDefaults] arrayForKey: sHostSiteInfoDefaultsKey] mutableCopy] autorelease]; NSMutableArray *hostWhitelistArray = [[[[CTFUserDefaultsController standardUserDefaults] arrayForKey: sHostSiteInfoDefaultsKey] mutableCopy] autorelease];
if (hostWhitelist == nil) {
hostWhitelist = [NSMutableArray array]; NSMutableSet *hostWhitelist;
} if (hostWhitelistArray == nil) {
hostWhitelist = [NSMutableSet setWithCapacity:0];
} else {
hostWhitelist = [NSMutableSet setWithArray:hostWhitelistArray];
}

return hostWhitelist; return hostWhitelist;
} }


- (void) _addHostToWhitelist - (void) _addHostToWhitelist
{ {
NSMutableArray *siteInfo = [self _mutableSiteInfo]; NSMutableSet *siteInfo = [self _mutableSiteInfo];
[siteInfo addObject: whitelistItemForSite([self host])]; [siteInfo addObject: whitelistItemForSite([self host])];


[[CTFUserDefaultsController standardUserDefaults] setValue:siteInfo forKeyPath:@"values.siteInfo"]; [[CTFUserDefaultsController standardUserDefaults] setValue:[siteInfo allObjects] forKeyPath:@"values.siteInfo"];


[[NSNotificationCenter defaultCenter] postNotificationName: sCTFWhitelistAdditionMade object: self]; [[NSNotificationCenter defaultCenter] postNotificationName: sCTFWhitelistAdditionMade object: self];
} }
Expand Down
1 change: 1 addition & 0 deletions Plugin/Plugin.h
Expand Up @@ -65,6 +65,7 @@ THE SOFTWARE.


- (id) initWithArguments:(NSDictionary *)arguments; - (id) initWithArguments:(NSDictionary *)arguments;
- (void)_migratePrefsToExternalFile; - (void)_migratePrefsToExternalFile;
- (void)_uniquePrefsFileWhitelist;
- (void) _addApplicationWhitelistArrayToPrefsFile; - (void) _addApplicationWhitelistArrayToPrefsFile;


- (DOMElement *)container; - (DOMElement *)container;
Expand Down
10 changes: 10 additions & 0 deletions Plugin/Plugin.m
Expand Up @@ -155,6 +155,7 @@ - (id) initWithArguments:(NSDictionary *)arguments


[self _migrateWhitelist]; [self _migrateWhitelist];
[self _migratePrefsToExternalFile]; [self _migratePrefsToExternalFile];
[self _uniquePrefsFileWhitelist];
[self _addApplicationWhitelistArrayToPrefsFile]; [self _addApplicationWhitelistArrayToPrefsFile];




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


- (void) _uniquePrefsFileWhitelist
{
NSArray *siteInfoArray = [[CTFUserDefaultsController standardUserDefaults] arrayForKey:@"siteInfo"];
NSSet *siteInfoSet = [NSSet setWithArray:siteInfoArray];

[[CTFUserDefaultsController standardUserDefaults] setValue:[siteInfoSet allObjects] forKeyPath:@"values.siteInfo"];
}


- (void) _addApplicationWhitelistArrayToPrefsFile - (void) _addApplicationWhitelistArrayToPrefsFile
{ {
CTFUserDefaultsController *standardUserDefaults = [CTFUserDefaultsController standardUserDefaults]; CTFUserDefaultsController *standardUserDefaults = [CTFUserDefaultsController standardUserDefaults];
Expand Down

0 comments on commit 12ecfb2

Please sign in to comment.