aboutsummaryrefslogtreecommitdiffstats
path: root/Source/TableDocument.m
diff options
context:
space:
mode:
Diffstat (limited to 'Source/TableDocument.m')
-rw-r--r--Source/TableDocument.m122
1 files changed, 86 insertions, 36 deletions
diff --git a/Source/TableDocument.m b/Source/TableDocument.m
index e6fe03a8..86e61f30 100644
--- a/Source/TableDocument.m
+++ b/Source/TableDocument.m
@@ -66,7 +66,7 @@
- (id)init
{
if ((self = [super init])) {
-
+
_mainNibLoaded = NO;
_encoding = [[NSString alloc] initWithString:@"utf8"];
_isConnected = NO;
@@ -77,13 +77,15 @@
mySQLConnection = nil;
mySQLVersion = nil;
variables = nil;
-
+
printWebView = [[WebView alloc] init];
[printWebView setFrameLoadDelegate:self];
-
+
prefs = [NSUserDefaults standardUserDefaults];
queryEditorInitString = nil;
+ spf = nil;
+
}
return self;
@@ -169,8 +171,8 @@
NSString *convError = nil;
NSPropertyListFormat format;
NSData *pData = [[NSData dataWithContentsOfFile:path options:NSUncachedRead error:&readError] decompress];
- NSDictionary *spf = [NSPropertyListSerialization propertyListFromData:pData
- mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&convError];
+ spf = [[NSPropertyListSerialization propertyListFromData:pData
+ mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&convError] retain];
if(!spf || readError != nil || [convError length] | format != NSPropertyListBinaryFormat_v1_0) {
NSAlert *alert = [NSAlert alertWithMessageText:[NSString stringWithFormat:NSLocalizedString(@"Error while reading connection data file", @"error while reading connection data file")]
@@ -184,6 +186,9 @@
return;
}
+ if([spf objectForKey:@"queries"])
+ [self initQueryEditorWithString:[spf objectForKey:@"queries"]];
+
if([spf objectForKey:@"type"])
[connectionController setType:[[spf objectForKey:@"type"] intValue]];
if([spf objectForKey:@"name"])
@@ -207,13 +212,28 @@
if([spf objectForKey:@"selectedDatabase"])
[connectionController setDatabase:[spf objectForKey:@"selectedDatabase"]];
- [connectionController initiateConnection:nil];
+ // If password are stored in SPF file auto-connect
+ // otherwise wait for password(s)
+ if([spf objectForKey:@"auth"]) {
+ if([[spf objectForKey:@"type"] intValue] == 2) {
+ if(![spf objectForKey:@"sshAuth"])
+ return;
+ [connectionController initiateConnection:nil];
+ [self performSelector:@selector(restoreSession) withObject:nil afterDelay:0.2];
+
+ } else {
+ [connectionController initiateConnection:nil];
+ }
+ }
- [self performSelector:@selector(restoreSessionWith:) withObject:spf afterDelay:0.2];
}
-- (void)restoreSessionWith:(NSDictionary *)spf
+/*
+ * Restore session from SPF file if given
+ */
+- (void)restoreSession
{
+
// Check and set the table
NSArray *tables = [tablesListInstance tables];
@@ -221,15 +241,37 @@
int cnt = 0;
while(cnt < 5) {
if(![tables indexOfObject:[spf objectForKey:@"selectedTable"]] == NSNotFound) break;
- usleep(1000);
+ usleep(500);
cnt++;
}
+
if([tables indexOfObject:[spf objectForKey:@"selectedTable"]] == NSNotFound) return;
// Select table
[tablesListInstance selectTableAtIndex:[NSNumber numberWithInt:[tables indexOfObject:[spf objectForKey:@"selectedTable"]]]];
- [tablesListInstance setContentRequiresReload:YES];
-
+
+ // Set table content details for restore
+ if([spf objectForKey:@"contentSortCol"])
+ [tableContentInstance setSortColumnNameToRestore:[spf objectForKey:@"contentSortCol"] isAscending:[[spf objectForKey:@"contentSortCol"] boolValue]];
+ if([spf objectForKey:@"contentLimitStartPosition"])
+ [tableContentInstance setLimitStartToRestore:[[spf objectForKey:@"contentLimitStartPosition"] intValue]];
+ if([spf objectForKey:@"contentSelectedIndexSet"]) {
+ NSMutableIndexSet *anIndexSet = [NSMutableIndexSet indexSet];
+ NSArray *items = [spf objectForKey:@"contentSelectedIndexSet"];
+ unsigned int i;
+ for(i=0; i<[items count]; i++)
+ {
+ [anIndexSet addIndex:(NSUInteger)NSArrayObjectAtIndex(items, i)];
+ }
+ [tableContentInstance setSelectedRowIndexesToRestore:anIndexSet];
+ }
+ if([spf objectForKey:@"contentViewport"])
+ [tableContentInstance setViewportToRestore:NSRectFromString([spf objectForKey:@"contentViewport"])];
+ if([spf objectForKey:@"contentFilter"])
+ [tableContentInstance setFiltersToRestore:[spf objectForKey:@"contentFilter"]];
+
+ [tablesListInstance setContentRequiresReload:YES];
+
// Select view
if ([spHistoryControllerInstance currentlySelectedView] != [[spf objectForKey:@"view"] intValue]) {
switch ([[spf objectForKey:@"view"] intValue]) {
@@ -253,7 +295,10 @@
return;
}
}
-
+
+ // dealloc spf data
+ [spf release];
+ spf = nil;
}
#pragma mark -
@@ -342,6 +387,10 @@
else
[tableWindow makeFirstResponder:[tablesListInstance valueForKeyPath:@"tablesListView"]];
+ if(spf != nil)
+ [self restoreSession];
+ // [self performSelector:@selector(restoreSession) withObject:nil afterDelay:0.3];
+
}
/**
@@ -1740,45 +1789,45 @@
}
else if(contextInfo == @"saveSPFfile") {
- NSMutableDictionary *spf = [NSMutableDictionary dictionary];
+ NSMutableDictionary *spfdata = [NSMutableDictionary dictionary];
NSIndexSet *contentSelectedIndexSet = [tableContentInstance selectedRowIndexes];
- [spf setObject:[NSNumber numberWithInt:1] forKey:@"version"];
- [spf setObject:@"session" forKey:@"format"];
+ [spfdata setObject:[NSNumber numberWithInt:1] forKey:@"version"];
+ [spfdata setObject:@"session" forKey:@"format"];
- [spf setObject:[self name] forKey:@"name"];
- [spf setObject:[self host] forKey:@"host"];
- [spf setObject:[self user] forKey:@"user"];
- [spf setObject:[connectionController password] forKey:@"auth"];
+ [spfdata setObject:[self name] forKey:@"name"];
+ [spfdata setObject:[self host] forKey:@"host"];
+ [spfdata setObject:[self user] forKey:@"user"];
+ // [spfdata setObject:[connectionController password] forKey:@"auth"];
- [spf setObject:[NSNumber numberWithInt:[connectionController type]] forKey:@"connectionType"];
+ [spfdata setObject:[NSNumber numberWithInt:[connectionController type]] forKey:@"connectionType"];
if([connectionController type] == 2) {
- [spf setObject:[connectionController sshHost] forKey:@"sshHost"];
- [spf setObject:[connectionController sshUser] forKey:@"sshUser"];
- [spf setObject:[connectionController sshPort] forKey:@"sshPort"];
- [spf setObject:[connectionController sshPassword] forKey:@"sshAuth"];
+ [spfdata setObject:[connectionController sshHost] forKey:@"sshHost"];
+ [spfdata setObject:[connectionController sshUser] forKey:@"sshUser"];
+ [spfdata setObject:[connectionController sshPort] forKey:@"sshPort"];
+ // [spfdata setObject:[connectionController sshPassword] forKey:@"sshAuth"];
}
if([connectionController port] &&[[connectionController port] length])
- [spf setObject:[connectionController port] forKey:@"port"];
+ [spfdata setObject:[connectionController port] forKey:@"port"];
if([[self database] length])
- [spf setObject:[self database] forKey:@"selectedDatabase"];
+ [spfdata setObject:[self database] forKey:@"selectedDatabase"];
if([[self table] length])
- [spf setObject:[self table] forKey:@"selectedTable"];
+ [spfdata setObject:[self table] forKey:@"selectedTable"];
if([tableContentInstance sortColumnName])
- [spf setObject:[tableContentInstance sortColumnName] forKey:@"contentSortCol"];
+ [spfdata setObject:[tableContentInstance sortColumnName] forKey:@"contentSortCol"];
- [spf setObject:[NSNumber numberWithInt:[spHistoryControllerInstance currentlySelectedView]] forKey:@"view"];
- [spf setObject:[NSNumber numberWithBool:[tableContentInstance sortColumnIsAscending]] forKey:@"contentSortColIsAsc"];
- [spf setObject:[NSNumber numberWithInt:[tableContentInstance limitStart]] forKey:@"contentLimitStartPosition"];
- [spf setObject:NSStringFromRect([tableContentInstance viewport]) forKey:@"contentViewport"];
+ [spfdata setObject:[NSNumber numberWithInt:[spHistoryControllerInstance currentlySelectedView]] forKey:@"view"];
+ [spfdata setObject:[NSNumber numberWithBool:[tableContentInstance sortColumnIsAscending]] forKey:@"contentSortColIsAsc"];
+ [spfdata setObject:[NSNumber numberWithInt:[tableContentInstance limitStart]] forKey:@"contentLimitStartPosition"];
+ [spfdata setObject:NSStringFromRect([tableContentInstance viewport]) forKey:@"contentViewport"];
if([tableContentInstance filterSettings])
- [spf setObject:[tableContentInstance filterSettings] forKey:@"contentFilter"];
+ [spfdata setObject:[tableContentInstance filterSettings] forKey:@"contentFilter"];
if([[[[customQueryInstance valueForKeyPath:@"textView"] textStorage] string] length])
- [spf setObject:[[[customQueryInstance valueForKeyPath:@"textView"] textStorage] string] forKey:@"queries"];
+ [spfdata setObject:[[[customQueryInstance valueForKeyPath:@"textView"] textStorage] string] forKey:@"queries"];
if (contentSelectedIndexSet && [contentSelectedIndexSet count]) {
NSMutableArray *indices = [NSMutableArray array];
@@ -1788,11 +1837,11 @@
for (idx = 0; idx < limit; idx++) {
[indices addObject:[NSNumber numberWithInt:indexBuffer[idx]]];
}
- [spf setObject:indices forKey:@"contentSelectedIndexSet"];
+ [spfdata setObject:indices forKey:@"contentSelectedIndexSet"];
}
NSString *err = nil;
- NSData *plist = [NSPropertyListSerialization dataFromPropertyList:spf
+ NSData *plist = [NSPropertyListSerialization dataFromPropertyList:spfdata
format:NSPropertyListBinaryFormat_v1_0
errorDescription:&err];
@@ -2618,6 +2667,7 @@
if (mySQLVersion) [mySQLVersion release];
[allDatabases release];
if(queryEditorInitString) [queryEditorInitString release];
+ if(spf) [spf release];
if(userManagerInstance) [userManagerInstance release];
[super dealloc];
}