Minor UI changes.
[pithos-macos] / pithos-macos / pithos_macosAppDelegate.m
1 //
2 //  pithos_macosAppDelegate.m
3 //  pithos-macos
4 //
5 // Copyright 2011 GRNET S.A. All rights reserved.
6 //
7 // Redistribution and use in source and binary forms, with or
8 // without modification, are permitted provided that the following
9 // conditions are met:
10 // 
11 //   1. Redistributions of source code must retain the above
12 //      copyright notice, this list of conditions and the following
13 //      disclaimer.
14 // 
15 //   2. Redistributions in binary form must reproduce the above
16 //      copyright notice, this list of conditions and the following
17 //      disclaimer in the documentation and/or other materials
18 //      provided with the distribution.
19 // 
20 // THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
21 // OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
24 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
27 // USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28 // AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30 // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 // POSSIBILITY OF SUCH DAMAGE.
32 // 
33 // The views and conclusions contained in the software and
34 // documentation are those of the authors and should not be
35 // interpreted as representing official policies, either expressed
36 // or implied, of GRNET S.A.
37
38 #import "pithos_macosAppDelegate.h"
39 #import "PithosBrowserController.h"
40
41 @implementation pithos_macosAppDelegate
42 @synthesize pithosBrowserController;
43
44 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
45     [[NSAppleEventManager sharedAppleEventManager] setEventHandler:self 
46                                                        andSelector:@selector(handleAppleEvent:withReplyEvent:) 
47                                                      forEventClass:kInternetEventClass 
48                                                         andEventID:kAEGetURL];
49     [pithosBrowserController showWindow:self];
50 }
51
52 - (void)handleAppleEvent:(NSAppleEventDescriptor *)event withReplyEvent: (NSAppleEventDescriptor *)replyEvent {
53     NSURL *url = [NSURL URLWithString:[[event paramDescriptorForKeyword:keyDirectObject] stringValue]];
54     NSString *host = [url host];
55         NSString *query = [url query];
56     NSLog(@"host : '%@', query: '%@'", host, query);
57     NSProcessInfo *processInfo = [NSProcessInfo processInfo];
58     if ([host isEqualToString:[NSString stringWithFormat:@"%@_%d", [processInfo processName], [processInfo processIdentifier]]] && query) {
59         // user=
60         NSString *authUser;
61         NSRange userRange = [query rangeOfString:@"user=" options:NSCaseInsensitiveSearch];
62         if (userRange.length == 0)
63             // XXX maybe show an error message?
64             return;
65         NSUInteger authUserStartLocation = userRange.location + userRange.length;
66         NSRange userEndRange = [query rangeOfString:@"&" options:NSCaseInsensitiveSearch 
67                                               range:NSMakeRange(authUserStartLocation, [query length] - authUserStartLocation)];
68         if (userEndRange.length) {
69             authUser = [[query substringWithRange:NSMakeRange(authUserStartLocation, userEndRange.location - authUserStartLocation)]
70                         stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
71         } else {
72             authUser = [[query substringFromIndex:authUserStartLocation]
73                         stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
74         }
75         // token=
76         NSString *authToken;
77         NSRange tokenRange = [query rangeOfString:@"token=" options:NSCaseInsensitiveSearch];
78         if (tokenRange.length == 0)
79             // XXX maybe show an error message?
80             return;
81         NSUInteger authTokenStartLocation = tokenRange.location + tokenRange.length;
82         NSRange tokenEndRange = [query rangeOfString:@"&" options:NSCaseInsensitiveSearch 
83                                               range:NSMakeRange(authTokenStartLocation, [query length] - authTokenStartLocation)];
84         if (tokenEndRange.length) {
85             authToken = [[query substringWithRange:NSMakeRange(authTokenStartLocation, tokenEndRange.location - authTokenStartLocation)]
86                          stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
87         } else {
88             authToken = [[query substringFromIndex:authTokenStartLocation]
89                          stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
90         }
91         NSLog(@"query authUser: '%@', authToken: '%@'", authUser, authToken);
92         [pithosBrowserController authenticateFromURLWithAuthUser:authUser authToken:authToken];
93     }
94     // XXX else maybe show an error message?
95 }
96
97 @end