aboutsummaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/SPAppController.m52
1 files changed, 51 insertions, 1 deletions
diff --git a/Source/SPAppController.m b/Source/SPAppController.m
index 0d60437b..9b658dc4 100644
--- a/Source/SPAppController.m
+++ b/Source/SPAppController.m
@@ -139,6 +139,21 @@
*/
- (void)applicationDidFinishLaunching:(NSNotification *)notification
{
+ NSDictionary *spfDict = nil;
+ NSArray *args = [[NSProcessInfo processInfo] arguments];
+ if (args.count == 5) {
+ if (([[args objectAtIndex:1] isEqualToString:@"--spfData"] && [[args objectAtIndex:3] isEqualToString:@"--dataVersion"] && [[args objectAtIndex:4] isEqualToString:@"1"]) || ([[args objectAtIndex:3] isEqualToString:@"--spfData"] && [[args objectAtIndex:1] isEqualToString:@"--dataVersion"] && [[args objectAtIndex:2] isEqualToString:@"1"])) {
+ NSData* data = [[args objectAtIndex:2] dataUsingEncoding:NSUTF8StringEncoding];
+ NSError *error = nil;
+ spfDict = [NSPropertyListSerialization propertyListWithData:data options:0 format:NULL error:&error];
+ if (error) {
+ spfDict = nil;
+ }
+ }
+ }
+
+ [[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(externalApplicationWantsToOpenADatabaseConnection:) name:@"ExternalApplicationWantsToOpenADatabaseConnection" object:nil];
+
// Set ourselves as the crash reporter delegate
[[FRFeedbackReporter sharedReporter] setDelegate:self];
@@ -151,7 +166,11 @@
// If no documents are open, open one
if (![self frontDocument]) {
[self newWindow:self];
-
+
+ if (spfDict) {
+ [[self frontDocument] setState:spfDict];
+ }
+
// Set autoconnection if appropriate
if ([[NSUserDefaults standardUserDefaults] boolForKey:SPAutoConnectToDefault]) {
[[self frontDocument] connect];
@@ -159,6 +178,37 @@
}
}
+
+- (void)externalApplicationWantsToOpenADatabaseConnection:(NSNotification *)notification
+{
+ SPWindowController *frontController = nil;
+
+ for (NSWindow *aWindow in [NSApp orderedWindows]) {
+ if ([[aWindow windowController] isMemberOfClass:[SPWindowController class]]) {
+ frontController = [aWindow windowController];
+ break;
+ }
+ }
+
+ // If no window was found or the front most window has no tabs, create a new one
+ if (!frontController || [[frontController valueForKeyPath:@"tabView"] numberOfTabViewItems] == 1) {
+ [self newWindow:self];
+ // Open the spf file in a new tab if the tab bar is visible
+ } else if ([[frontController valueForKeyPath:@"tabView"] numberOfTabViewItems] != 1) {
+ if ([[frontController window] isMiniaturized]) [[frontController window] deminiaturize:self];
+ [frontController addNewConnection:self];
+ }
+
+ NSDictionary *userInfo = [notification userInfo];
+ NSString *MAMP_SPFVersion = [userInfo objectForKey:@"dataVersion"];
+ if ([MAMP_SPFVersion isEqualToString:@"1"]) {
+ NSDictionary *spfStructure = [userInfo objectForKey:@"spfData"];
+ if (spfStructure) {
+ [[self frontDocument] setState:spfStructure];
+ }
+ }
+}
+
/**
* Menu item validation.
*/