aboutsummaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/TableDocument.m92
1 files changed, 61 insertions, 31 deletions
diff --git a/Source/TableDocument.m b/Source/TableDocument.m
index 7f64fcc0..9549d3f0 100644
--- a/Source/TableDocument.m
+++ b/Source/TableDocument.m
@@ -85,6 +85,8 @@
prefs = [NSUserDefaults standardUserDefaults];
queryEditorInitString = nil;
[saveConnectionEncryptString setStringValue:@""];
+ saveConnectionAccessory = nil;
+ saveConnectionAutoConnect = nil;
spfSession = nil;
@@ -164,6 +166,10 @@
if (![NSBundle loadNibNamed:@"ConnectionErrorDialog" owner:self]) {
NSLog(@"Connection error dialog could not be loaded; connection failure handling will not function correctly.");
}
+ if(![NSBundle loadNibNamed:@"SaveSPFAccessory" owner:self]) {
+ NSLog(@"SaveSPFAccessory accessory dialog could not be loaded.");
+ return;
+ }
}
- (void)initWithConnectionFile:(NSString *)path
@@ -180,6 +186,25 @@
int connectionType;
+ // Inform about the data source in the window title bar
+ [tableWindow setTitle:[NSString stringWithFormat:NSLocalizedString(@"‘%@’ – Connecting…",@"‘%@’ – Connecting…"), [path lastPathComponent]]];
+
+ // Clean fields
+ [connectionController setName:@""];
+ [connectionController setUser:@""];
+ [connectionController setHost:@""];
+ [connectionController setPort:@""];
+ [connectionController setSocket:@""];
+ [connectionController setSshHost:@""];
+ [connectionController setSshUser:@""];
+ [connectionController setSshPort:@""];
+ [connectionController setDatabase:@""];
+ [connectionController setPassword:@""];
+ [connectionController setSshPassword:@""];
+
+ // Deselect all favorites
+ [[connectionController valueForKeyPath:@"favoritesTable"] deselectAll:connectionController];
+
NSData *pData = [NSData dataWithContentsOfFile:path options:NSUncachedRead error:&readError];
spf = [[NSPropertyListSerialization propertyListFromData:pData
@@ -194,12 +219,14 @@
[alert setAlertStyle:NSCriticalAlertStyle];
[alert runModal];
+ [self close];
return;
}
// For dispatching later
if(![[spf objectForKey:@"format"] isEqualToString:@"connection"]) {
NSLog(@"SPF file format is not 'connection'.");
+ [self close];
return;
}
@@ -212,22 +239,10 @@
[alert setAlertStyle:NSCriticalAlertStyle];
[alert runModal];
+ [self close];
return;
}
- // Clean fields
- [connectionController setName:@""];
- [connectionController setUser:@""];
- [connectionController setHost:@""];
- [connectionController setPort:@""];
- [connectionController setSocket:@""];
- [connectionController setSshHost:@""];
- [connectionController setSshUser:@""];
- [connectionController setSshPort:@""];
- [connectionController setDatabase:@""];
- [connectionController setPassword:@""];
- [connectionController setSshPassword:@""];
-
// Ask for a password if SPF file passwords were encrypted as sheet
if([spf objectForKey:@"encrypted"] && [[spf valueForKey:@"encrypted"] boolValue]) {
@@ -242,6 +257,10 @@
NSModalSession session = [NSApp beginModalSessionForWindow:inputTextWindow];
for (;;) {
+ // Execute code on DefaultRunLoop
+ [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
+ beforeDate:[NSDate distantFuture]];
+
// Break the run loop if editSheet was closed
if ([NSApp runModalSession:session] != NSRunContinuesResponse
|| ![inputTextWindow isVisible])
@@ -258,8 +277,10 @@
if(passwordSheetReturnCode)
encryptpw = [inputTextWindowSecureTextField stringValue];
- else
+ else {
+ [self close];
return;
+ }
}
@@ -282,8 +303,8 @@
[alert setAlertStyle:NSCriticalAlertStyle];
[alert runModal];
+ [self close];
return;
-
}
}
@@ -296,8 +317,8 @@
[alert setAlertStyle:NSCriticalAlertStyle];
[alert runModal];
+ [self close];
return;
-
}
encryptpw = nil;
@@ -311,13 +332,13 @@
[alert setAlertStyle:NSCriticalAlertStyle];
[alert runModal];
+ [self close];
return;
}
connection = [NSDictionary dictionaryWithDictionary:[data objectForKey:@"connection"]];
if([connection objectForKey:@"type"]) {
-
if([[connection objectForKey:@"type"] isEqualToString:@"SP_CONNECTION_TCPIP"])
connectionType = SP_CONNECTION_TCPIP;
else if([[connection objectForKey:@"type"] isEqualToString:@"SP_CONNECTION_SOCKET"])
@@ -362,14 +383,13 @@
spfSession = [[NSDictionary dictionaryWithDictionary:[data objectForKey:@"session"]] retain];
if(![connection objectForKey:@"password"]) {
- [connectionController setPassword:@""];
- [connectionController setSshPassword:@""];
- [[connectionController valueForKeyPath:@"standardPasswordField"] selectText:self];
+ // TODO How to set the focus to standardPasswordField in the connection nib?
+ // [[connectionController valueForKeyPath:@"standardPasswordField"] selectText:connectionController];
return;
}
if([connection objectForKey:@"auto_connect"] && [[connection valueForKey:@"auto_connect"] boolValue])
- [connectionController initiateConnection:nil];
+ [connectionController initiateConnection:self];
}
@@ -1898,20 +1918,16 @@
} else if([sender tag] == 1){
// Save current session (open connection windows as SPF file)
- // [panel setMessage:NSLocalizedString(@"Save Sequel Pro session", @"Save Sequel Pro session")];
[panel setAllowedFileTypes:[NSArray arrayWithObjects:@"spf", nil]];
- // [saveConnectionEncryptString setDelegate:self];
- // Load the accessory view everytime
- if (![NSBundle loadNibNamed:@"SaveSPFAccessory" owner:self]) {
- NSLog(@"Failed to load SaveSPFAccessory.nib");
- return;
- }
[saveConnectionEncryptString setStringValue:@""];
[saveConnectionIncludeQuery setEnabled:([[[[customQueryInstance valueForKeyPath:@"textView"] textStorage] string] length])];
+ // Update accessory button states
[self saveConnectionAccessoryPasswordButton:nil];
+ // TODO note: it seems that one has problems with a NSSecureTextField
+ // inside an accessory view - ask HansJB
[panel setAccessoryView:saveConnectionAccessory];
filename = [NSString stringWithFormat:@"%@", [self name]];
contextInfo = @"saveSPFfile";
@@ -1937,12 +1953,24 @@
[saveConnectionSavePasswordAlert setHidden:([saveConnectionSavePassword state] == NSOffState)];
if(sender == saveConnectionEncrypt && [saveConnectionEncrypt state] == NSOnState)
[saveConnectionEncryptString selectText:sender];
+
+ // Unfocus saveConnectionEncryptString
if(sender == saveConnectionEncrypt && [saveConnectionEncrypt state] == NSOffState) {
+ // [saveConnectionEncryptString setStringValue:[saveConnectionEncryptString stringValue]];
+ // TODO how can one make it better ?
[saveConnectionEncryptString setHidden:YES];
[saveConnectionEncryptString setHidden:NO];
}
-
+ // Enforce to clear the password string after invoking NSSavePanel
+ // TODO Why I cannot set it in saveConnectionSheet ?
+ if(sender == NULL) {
+ [saveConnectionEncryptString selectText:sender];
+ [saveConnectionEncryptString setHidden:YES];
+ [saveConnectionEncryptString setHidden:NO];
+ }
+
+
}
- (void)saveConnectionPanelDidEnd:(NSSavePanel *)panel returnCode:(int)returnCode contextInfo:(void *)contextInfo
@@ -1975,9 +2003,11 @@
// Save connection and session as SPF file
else if(contextInfo == @"saveSPFfile") {
-
+ // Abort editing of saveConnectionEncryptString
+ // TODO How can one make it better?
[saveConnectionEncryptString abortEditing];
- [saveConnectionEncryptString selectText:nil];
+ [saveConnectionEncryptString setStringValue:[saveConnectionEncryptString stringValue]];
+
[self saveSPFtoFile:fileName];
}