Skip to content

Commit

Permalink
caching sum of langs and keys
Browse files Browse the repository at this point in the history
  • Loading branch information
cescofry committed Jun 26, 2013
1 parent 344a12a commit b0f9061
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 16 deletions.
27 changes: 12 additions & 15 deletions HiperStrings/Controllers/ZFFileDetailController.m
Original file line number Diff line number Diff line change
Expand Up @@ -23,22 +23,11 @@ @implementation ZFFileDetailController
- (void)setLangFile:(ZFLangFile *)langFile {
_langFile = langFile;

[self didSwithSegmentedControl:self.segmentedControl];
self.columns = [[NSArray arrayWithObject:KEY_KEY] arrayByAddingObjectsFromArray:[_langFile allLanguages]];
self.keys = (self.columns.count > 1)? [self.langFile allKeys] : [NSArray array];

}

#pragma mark - Segmented Controller

- (IBAction)didSwithSegmentedControl:(NSSegmentedControl *)sender {
self.rows = (self.segmentedControl.selectedSegment == 0)? [self.langFile iOStranslations] : [self.langFile androidTranslations];

self.columns = [[NSArray arrayWithObject:KEY_KEY] arrayByAddingObjectsFromArray:[self.rows allKeys]];
self.keys = (self.columns.count > 1)? [[self.rows objectForKey:[self.columns objectAtIndex:1]] allKeys] : [NSArray array];

NSMutableArray *addCol = [self.columns mutableCopy];

[self.tableView beginUpdates];

NSArray *columns = [self.tableView.tableColumns copy];
[columns enumerateObjectsUsingBlock:^(NSTableColumn *column, NSUInteger idx, BOOL *stop) {
if ([self.columns containsObject:column.identifier]) {
Expand All @@ -54,14 +43,22 @@ - (IBAction)didSwithSegmentedControl:(NSSegmentedControl *)sender {
[self.tableView addTableColumn:column];
}];


[self didSwithSegmentedControl:self.segmentedControl];

}

#pragma mark - Segmented Controller

- (IBAction)didSwithSegmentedControl:(NSSegmentedControl *)sender {
self.rows = (self.segmentedControl.selectedSegment == 0)? [self.langFile iOStranslations] : [self.langFile androidTranslations];
[self.tableView reloadData];
[self.tableView endUpdates];
}

#pragma mark - TableView

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
return [self.rows count];
return [self.keys count];
}

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
Expand Down
4 changes: 4 additions & 0 deletions Strings/ZFLangFile.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,11 @@
@property (nonatomic, strong) NSMutableDictionary *iOStranslations;
@property (nonatomic, strong) NSMutableDictionary *androidTranslations;

@property (nonatomic, strong) NSArray *allKeys;
@property (nonatomic, strong) NSArray *allLanguages;

- (BOOL)addFileAtURL:(NSURL *) url;
- (BOOL)mergeWithFile:(ZFLangFile *)file;
- (void)finalizeMerge;

@end
51 changes: 50 additions & 1 deletion Strings/ZFLangFile.m
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
#import "ZFStringsConverter.h"
#import "ZFUtils.h"

#define FAV_LANG @"en"

@interface ZFLangFile ()

@property (nonatomic, strong) NSArray *hashKeys;
Expand Down Expand Up @@ -57,6 +59,7 @@ - (BOOL)addFileAtURL:(NSURL *)url {
BOOL isIOS;
NSString *lang = [[ZFUtils sharedUtils] langFromURL:url isIOS:&isIOS];
if (!lang) return NO;

BOOL alreadyExists = (isIOS)? ([self.iOStranslations objectForKey:lang] != nil) : ([self.androidTranslations objectForKey:lang] != nil);
if (alreadyExists) return NO;

Expand All @@ -73,6 +76,9 @@ - (BOOL)addFileAtURL:(NSURL *)url {
[self.androidTranslations setObject:translations forKey:lang];
}

self.allKeys = nil;
self.allLanguages = nil;

return YES;
}

Expand All @@ -95,7 +101,50 @@ - (BOOL)mergeWithFile:(ZFLangFile *)file {
mergeAndroid = YES;
}];

return (mergeIOS || mergeAndroid);
BOOL didMerge = (mergeIOS || mergeAndroid);
if (didMerge) {
self.allKeys = nil;
self.allLanguages = nil;
}
return didMerge;
}

- (void)fillGaps {
NSMutableArray *allKeys = [NSMutableArray array];
NSMutableArray *allLanguages = [NSMutableArray array];

[self.iOStranslations enumerateKeysAndObjectsUsingBlock:^(NSString *lang, NSDictionary *translation, BOOL *stop) {
if (![allLanguages containsObject:lang]) [allLanguages addObject:lang];
[translation.allKeys enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop) {
if ([allKeys containsObject:key]) return;
[allKeys addObject:key];
}];
}];

[self.androidTranslations enumerateKeysAndObjectsUsingBlock:^(NSString *lang, NSDictionary *translation, BOOL *stop) {
if (![allLanguages containsObject:lang]) [allLanguages addObject:lang];
[translation.allKeys enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop) {
if ([allKeys containsObject:key]) return;
[allKeys addObject:key];
}];
}];

_allKeys = [allKeys sortedArrayUsingSelector:@selector(compare:)];
_allLanguages = [allLanguages sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
if ([obj1 isEqualToString:FAV_LANG]) return NSOrderedAscending;
else if ([obj2 isEqualToString:FAV_LANG]) return NSOrderedDescending;
else return [obj1 compare:obj2];
}];
}

- (NSArray *)allKeys {
if (!_allKeys) [self fillGaps];
return _allKeys;
}

- (NSArray *)allLanguages {
if (!_allLanguages) [self fillGaps];
return _allLanguages;
}

@end

0 comments on commit b0f9061

Please sign in to comment.