Don't re-save mappings immediately upon load.
[enjoyable.git] / Classes / NJMappingsController.m
index 5faa4bf..fa851b1 100644 (file)
@@ -22,7 +22,8 @@
 - (id)init {
     if ((self = [super init])) {
         _mappings = [[NSMutableArray alloc] init];
-        _currentMapping = [[NJMapping alloc] initWithName:@"(default)"];
+        _currentMapping = [[NJMapping alloc] initWithName:
+                           NSLocalizedString(@"(default)", @"default name for first the mapping")];
         _manualMapping = _currentMapping;
         [_mappings addObject:_currentMapping];
     }
@@ -45,8 +46,7 @@
     return idx < _mappings.count ? _mappings[idx] : nil;
 }
 
-- (void)mappingsChanged {
-    [self save];
+- (void)mappingsSet {
     [tableView reloadData];
     [self updateInterfaceForCurrentMapping];
     [NSNotificationCenter.defaultCenter
                                 NJMappingKey: _currentMapping }];
 }
 
+- (void)mappingsChanged {
+    [self save];
+    [self mappingsSet];
+}
+
 - (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state
                                   objects:(__unsafe_unretained id [])buffer
                                     count:(NSUInteger)len {
@@ -79,7 +84,9 @@
 
     if (!found) {
         [self activateMapping:oldMapping];
-        if ([oldMapping.name.lowercaseString isEqualToString:@"@application"]) {
+        if ([oldMapping.name.lowercaseString isEqualToString:@"@application"]
+            || [oldMapping.name.lowercaseString isEqualToString:
+                NSLocalizedString(@"@Application", nil).lowercaseString]) {
             oldMapping.name = app.bestMappingName;
             [self mappingsChanged];
         }
 }
 
 - (IBAction)addPressed:(id)sender {
-    NJMapping *newMapping = [[NJMapping alloc] initWithName:@"Untitled"];
+    [self mappingPressed:sender];
+    NJMapping *newMapping = [[NJMapping alloc] init];
     [_mappings addObject:newMapping];
     [self activateMapping:newMapping];
     [self mappingsChanged];
 
 - (void)load {
     NSUInteger selected = [NSUserDefaults.standardUserDefaults integerForKey:@"selected"];
-    NSArray *mappings = [NSUserDefaults.standardUserDefaults arrayForKey:@"mappings"];
-    [self loadAllFrom:mappings andActivate:selected];
-}
-
-- (void)loadAllFrom:(NSArray *)storedMappings andActivate:(NSUInteger)selected {
+    NSArray *storedMappings = [NSUserDefaults.standardUserDefaults arrayForKey:@"mappings"];
     NSMutableArray* newMappings = [[NSMutableArray alloc] initWithCapacity:storedMappings.count];
 
     // Requires two passes to deal with inter-mapping references. First make
         if (selected >= newMappings.count)
             selected = 0;
         [self activateMapping:_mappings[selected]];
-        [self mappingsChanged];
+        [self mappingsSet];
     }
 }
 
         NJMapping *mergeInto = self[mapping.name];
         if ([mergeInto hasConflictWith:mapping]) {
             NSAlert *conflictAlert = [[NSAlert alloc] init];
-            conflictAlert.messageText = @"Replace existing mappings?";
+            conflictAlert.messageText = NSLocalizedString(@"import conflict prompt", @"Title of import conflict alert");
             conflictAlert.informativeText =
-            [NSString stringWithFormat:
-                @"This file contains inputs you've already mapped in \"%@\". Do you "
-                @"want to merge them and replace your existing mappings, or import this "
-                @"as a separate mapping?", mapping.name];
-            [conflictAlert addButtonWithTitle:@"Merge"];
-            [conflictAlert addButtonWithTitle:@"Cancel"];
-            [conflictAlert addButtonWithTitle:@"New Mapping"];
+            [NSString stringWithFormat:NSLocalizedString(@"import conflict in %@", @"Explanation of import conflict"),
+                                       mapping.name];
+            [conflictAlert addButtonWithTitle:NSLocalizedString(@"import and merge", @"button to merge imported mappings")];
+            [conflictAlert addButtonWithTitle:NSLocalizedString(@"cancel import", @"button to cancel import")];
+            [conflictAlert addButtonWithTitle:NSLocalizedString(@"import new mapping", @"button to import as new mapping")];
             [conflictAlert beginSheetModalForWindow:popoverActivate.window
                                       modalDelegate:self
                                      didEndSelector:@selector(mappingConflictDidResolve:returnCode:contextInfo:)
                                         contextInfo:(void *)CFBridgingRetain(@{ @"old mapping": mergeInto,
                                                                                 @"new mapping": mapping })];
+        } else if (mergeInto) {
+            [mergeInto mergeEntriesFrom:mapping];
+            [self activateMapping:mergeInto];
+            [self mappingsChanged];
         } else {
             [_mappings addObject:mapping];
             [self activateMapping:mapping];