root / pithos-macos / pithos_macosAppDelegate.m @ 90fadc45
History | View | Annotate | Download (7.8 kB)
1 | d8d08dc1 | Miltiadis Vasilakis | // |
---|---|---|---|
2 | d8d08dc1 | Miltiadis Vasilakis | // pithos_macosAppDelegate.m |
3 | d8d08dc1 | Miltiadis Vasilakis | // pithos-macos |
4 | d8d08dc1 | Miltiadis Vasilakis | // |
5 | d8d08dc1 | Miltiadis Vasilakis | // Copyright 2011 GRNET S.A. All rights reserved. |
6 | d8d08dc1 | Miltiadis Vasilakis | // |
7 | d8d08dc1 | Miltiadis Vasilakis | // Redistribution and use in source and binary forms, with or |
8 | d8d08dc1 | Miltiadis Vasilakis | // without modification, are permitted provided that the following |
9 | d8d08dc1 | Miltiadis Vasilakis | // conditions are met: |
10 | d8d08dc1 | Miltiadis Vasilakis | // |
11 | d8d08dc1 | Miltiadis Vasilakis | // 1. Redistributions of source code must retain the above |
12 | d8d08dc1 | Miltiadis Vasilakis | // copyright notice, this list of conditions and the following |
13 | d8d08dc1 | Miltiadis Vasilakis | // disclaimer. |
14 | d8d08dc1 | Miltiadis Vasilakis | // |
15 | d8d08dc1 | Miltiadis Vasilakis | // 2. Redistributions in binary form must reproduce the above |
16 | d8d08dc1 | Miltiadis Vasilakis | // copyright notice, this list of conditions and the following |
17 | d8d08dc1 | Miltiadis Vasilakis | // disclaimer in the documentation and/or other materials |
18 | d8d08dc1 | Miltiadis Vasilakis | // provided with the distribution. |
19 | d8d08dc1 | Miltiadis Vasilakis | // |
20 | d8d08dc1 | Miltiadis Vasilakis | // THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS |
21 | d8d08dc1 | Miltiadis Vasilakis | // OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
22 | d8d08dc1 | Miltiadis Vasilakis | // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
23 | d8d08dc1 | Miltiadis Vasilakis | // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR |
24 | d8d08dc1 | Miltiadis Vasilakis | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
25 | d8d08dc1 | Miltiadis Vasilakis | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
26 | d8d08dc1 | Miltiadis Vasilakis | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
27 | d8d08dc1 | Miltiadis Vasilakis | // USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
28 | d8d08dc1 | Miltiadis Vasilakis | // AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
29 | d8d08dc1 | Miltiadis Vasilakis | // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
30 | d8d08dc1 | Miltiadis Vasilakis | // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
31 | d8d08dc1 | Miltiadis Vasilakis | // POSSIBILITY OF SUCH DAMAGE. |
32 | d8d08dc1 | Miltiadis Vasilakis | // |
33 | d8d08dc1 | Miltiadis Vasilakis | // The views and conclusions contained in the software and |
34 | d8d08dc1 | Miltiadis Vasilakis | // documentation are those of the authors and should not be |
35 | d8d08dc1 | Miltiadis Vasilakis | // interpreted as representing official policies, either expressed |
36 | d8d08dc1 | Miltiadis Vasilakis | // or implied, of GRNET S.A. |
37 | d8d08dc1 | Miltiadis Vasilakis | |
38 | d8d08dc1 | Miltiadis Vasilakis | #import "pithos_macosAppDelegate.h" |
39 | d8d08dc1 | Miltiadis Vasilakis | #import "PithosBrowserController.h" |
40 | 589a14ca | Miltiadis Vasilakis | #import "PithosPreferencesController.h" |
41 | 589a14ca | Miltiadis Vasilakis | #import "ASIPithosRequest.h" |
42 | af3b9f06 | Miltiadis Vasilakis | #import "ASIDownloadCache.h" |
43 | d8d08dc1 | Miltiadis Vasilakis | |
44 | d8d08dc1 | Miltiadis Vasilakis | @implementation pithos_macosAppDelegate |
45 | c6f07a3c | Miltiadis Vasilakis | @synthesize storageURLPrefix, publicURLPrefix; |
46 | d8d08dc1 | Miltiadis Vasilakis | |
47 | d8d08dc1 | Miltiadis Vasilakis | - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { |
48 | c6f07a3c | Miltiadis Vasilakis | // XXX hardcoded for now |
49 | e5096d8a | Miltiadis Vasilakis | storageURLPrefix = @"https://pithos.dev.grnet.gr/v1"; |
50 | c6f07a3c | Miltiadis Vasilakis | publicURLPrefix = @"https://pithos.dev.grnet.gr"; |
51 | c6f07a3c | Miltiadis Vasilakis | |
52 | 9f3a92de | Miltiadis Vasilakis | [[NSAppleEventManager sharedAppleEventManager] setEventHandler:self |
53 | 9f3a92de | Miltiadis Vasilakis | andSelector:@selector(handleAppleEvent:withReplyEvent:) |
54 | 9f3a92de | Miltiadis Vasilakis | forEventClass:kInternetEventClass |
55 | 9f3a92de | Miltiadis Vasilakis | andEventID:kAEGetURL]; |
56 | 589a14ca | Miltiadis Vasilakis | [self showPithosBrowser:self]; |
57 | 589a14ca | Miltiadis Vasilakis | |
58 | 589a14ca | Miltiadis Vasilakis | [self authenticateWithAuthUser:[[userDefaultsController values] valueForKey:@"authUser"] |
59 | 589a14ca | Miltiadis Vasilakis | authToken:[[userDefaultsController values] valueForKey:@"authToken"]]; |
60 | 589a14ca | Miltiadis Vasilakis | } |
61 | 589a14ca | Miltiadis Vasilakis | |
62 | 589a14ca | Miltiadis Vasilakis | // Based on: http://cocoatutorial.grapewave.com/2010/01/creating-a-status-bar-application/ |
63 | 589a14ca | Miltiadis Vasilakis | // and: http://www.cocoadev.com/index.pl?ThumbnailImages |
64 | 589a14ca | Miltiadis Vasilakis | - (void)awakeFromNib { |
65 | 589a14ca | Miltiadis Vasilakis | NSImage *sourceImage = [NSImage imageNamed:NSImageNameFolder]; |
66 | 589a14ca | Miltiadis Vasilakis | |
67 | 589a14ca | Miltiadis Vasilakis | NSImage *smallImage = [[[NSImage alloc] initWithSize:NSMakeSize(18, 18)] autorelease]; |
68 | 589a14ca | Miltiadis Vasilakis | [smallImage lockFocus]; |
69 | 589a14ca | Miltiadis Vasilakis | [[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationHigh]; |
70 | 589a14ca | Miltiadis Vasilakis | [sourceImage setSize:NSMakeSize(18, 18)]; |
71 | 589a14ca | Miltiadis Vasilakis | [sourceImage compositeToPoint:NSZeroPoint operation:NSCompositeCopy]; |
72 | 589a14ca | Miltiadis Vasilakis | [smallImage unlockFocus]; |
73 | 589a14ca | Miltiadis Vasilakis | |
74 | 589a14ca | Miltiadis Vasilakis | statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength] retain]; |
75 | 589a14ca | Miltiadis Vasilakis | [statusItem setMenu:statusMenu]; |
76 | 589a14ca | Miltiadis Vasilakis | [statusItem setImage:sourceImage]; |
77 | 589a14ca | Miltiadis Vasilakis | [statusItem setHighlightMode:YES]; |
78 | d8d08dc1 | Miltiadis Vasilakis | } |
79 | d8d08dc1 | Miltiadis Vasilakis | |
80 | 9f3a92de | Miltiadis Vasilakis | - (void)handleAppleEvent:(NSAppleEventDescriptor *)event withReplyEvent: (NSAppleEventDescriptor *)replyEvent { |
81 | 9f3a92de | Miltiadis Vasilakis | NSURL *url = [NSURL URLWithString:[[event paramDescriptorForKeyword:keyDirectObject] stringValue]]; |
82 | 9f3a92de | Miltiadis Vasilakis | NSString *host = [url host]; |
83 | 9f3a92de | Miltiadis Vasilakis | NSString *query = [url query]; |
84 | 9f3a92de | Miltiadis Vasilakis | NSLog(@"host : '%@', query: '%@'", host, query); |
85 | 9f3a92de | Miltiadis Vasilakis | NSProcessInfo *processInfo = [NSProcessInfo processInfo]; |
86 | 9f3a92de | Miltiadis Vasilakis | if ([host isEqualToString:[NSString stringWithFormat:@"%@_%d", [processInfo processName], [processInfo processIdentifier]]] && query) { |
87 | 9f3a92de | Miltiadis Vasilakis | // user= |
88 | 9f3a92de | Miltiadis Vasilakis | NSString *authUser; |
89 | 9f3a92de | Miltiadis Vasilakis | NSRange userRange = [query rangeOfString:@"user=" options:NSCaseInsensitiveSearch]; |
90 | 9f3a92de | Miltiadis Vasilakis | if (userRange.length == 0) |
91 | 9f3a92de | Miltiadis Vasilakis | // XXX maybe show an error message? |
92 | 9f3a92de | Miltiadis Vasilakis | return; |
93 | 9f3a92de | Miltiadis Vasilakis | NSUInteger authUserStartLocation = userRange.location + userRange.length; |
94 | 9f3a92de | Miltiadis Vasilakis | NSRange userEndRange = [query rangeOfString:@"&" options:NSCaseInsensitiveSearch |
95 | 9f3a92de | Miltiadis Vasilakis | range:NSMakeRange(authUserStartLocation, [query length] - authUserStartLocation)]; |
96 | 9f3a92de | Miltiadis Vasilakis | if (userEndRange.length) { |
97 | 155f0dfd | Miltiadis Vasilakis | authUser = [[query substringWithRange:NSMakeRange(authUserStartLocation, userEndRange.location - authUserStartLocation)] |
98 | 155f0dfd | Miltiadis Vasilakis | stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; |
99 | 9f3a92de | Miltiadis Vasilakis | } else { |
100 | 155f0dfd | Miltiadis Vasilakis | authUser = [[query substringFromIndex:authUserStartLocation] |
101 | 155f0dfd | Miltiadis Vasilakis | stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; |
102 | 9f3a92de | Miltiadis Vasilakis | } |
103 | 9f3a92de | Miltiadis Vasilakis | // token= |
104 | 9f3a92de | Miltiadis Vasilakis | NSString *authToken; |
105 | 9f3a92de | Miltiadis Vasilakis | NSRange tokenRange = [query rangeOfString:@"token=" options:NSCaseInsensitiveSearch]; |
106 | 9f3a92de | Miltiadis Vasilakis | if (tokenRange.length == 0) |
107 | 9f3a92de | Miltiadis Vasilakis | // XXX maybe show an error message? |
108 | 9f3a92de | Miltiadis Vasilakis | return; |
109 | 9f3a92de | Miltiadis Vasilakis | NSUInteger authTokenStartLocation = tokenRange.location + tokenRange.length; |
110 | 9f3a92de | Miltiadis Vasilakis | NSRange tokenEndRange = [query rangeOfString:@"&" options:NSCaseInsensitiveSearch |
111 | 9f3a92de | Miltiadis Vasilakis | range:NSMakeRange(authTokenStartLocation, [query length] - authTokenStartLocation)]; |
112 | 9f3a92de | Miltiadis Vasilakis | if (tokenEndRange.length) { |
113 | 155f0dfd | Miltiadis Vasilakis | authToken = [[query substringWithRange:NSMakeRange(authTokenStartLocation, tokenEndRange.location - authTokenStartLocation)] |
114 | 155f0dfd | Miltiadis Vasilakis | stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; |
115 | 9f3a92de | Miltiadis Vasilakis | } else { |
116 | 155f0dfd | Miltiadis Vasilakis | authToken = [[query substringFromIndex:authTokenStartLocation] |
117 | 155f0dfd | Miltiadis Vasilakis | stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; |
118 | 9f3a92de | Miltiadis Vasilakis | } |
119 | 589a14ca | Miltiadis Vasilakis | |
120 | 9f3a92de | Miltiadis Vasilakis | NSLog(@"query authUser: '%@', authToken: '%@'", authUser, authToken); |
121 | 589a14ca | Miltiadis Vasilakis | if ([authUser length] && [authToken length]) { |
122 | 589a14ca | Miltiadis Vasilakis | [[userDefaultsController values] setValue:authUser forKey:@"authUser"]; |
123 | 589a14ca | Miltiadis Vasilakis | [[userDefaultsController values] setValue:authToken forKey:@"authToken"]; |
124 | 589a14ca | Miltiadis Vasilakis | |
125 | 589a14ca | Miltiadis Vasilakis | [self authenticateWithAuthUser:authUser authToken:authToken]; |
126 | 589a14ca | Miltiadis Vasilakis | } |
127 | 589a14ca | Miltiadis Vasilakis | // XXX else maybe show an error message? |
128 | 9f3a92de | Miltiadis Vasilakis | } |
129 | 9f3a92de | Miltiadis Vasilakis | // XXX else maybe show an error message? |
130 | 9f3a92de | Miltiadis Vasilakis | } |
131 | 9f3a92de | Miltiadis Vasilakis | |
132 | 589a14ca | Miltiadis Vasilakis | #pragma mark - |
133 | 589a14ca | Miltiadis Vasilakis | #pragma Actions |
134 | 589a14ca | Miltiadis Vasilakis | |
135 | 589a14ca | Miltiadis Vasilakis | - (IBAction)showPithosBrowser:(id)sender { |
136 | 589a14ca | Miltiadis Vasilakis | [pithosBrowserController showWindow:sender]; |
137 | 589a14ca | Miltiadis Vasilakis | [[pithosBrowserController window] makeKeyAndOrderFront:sender]; |
138 | 589a14ca | Miltiadis Vasilakis | [NSApp activateIgnoringOtherApps:YES]; |
139 | 589a14ca | Miltiadis Vasilakis | } |
140 | 589a14ca | Miltiadis Vasilakis | |
141 | 589a14ca | Miltiadis Vasilakis | - (IBAction)showPithosPreferences:(id)sender { |
142 | 589a14ca | Miltiadis Vasilakis | [pithosPreferencesController showWindow:sender]; |
143 | 589a14ca | Miltiadis Vasilakis | [[pithosPreferencesController window] makeKeyAndOrderFront:sender]; |
144 | 589a14ca | Miltiadis Vasilakis | [NSApp activateIgnoringOtherApps:YES]; |
145 | 589a14ca | Miltiadis Vasilakis | } |
146 | 589a14ca | Miltiadis Vasilakis | |
147 | 589a14ca | Miltiadis Vasilakis | - (IBAction)aboutPithos:(id)sender { |
148 | 589a14ca | Miltiadis Vasilakis | [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"https://pithos.dev.grnet.gr/docs"]]; |
149 | 589a14ca | Miltiadis Vasilakis | } |
150 | 589a14ca | Miltiadis Vasilakis | |
151 | 589a14ca | Miltiadis Vasilakis | #pragma mark - |
152 | 589a14ca | Miltiadis Vasilakis | #pragma Authentication |
153 | 589a14ca | Miltiadis Vasilakis | |
154 | 589a14ca | Miltiadis Vasilakis | - (void)authenticateWithAuthUser:(NSString *)authUser authToken:(NSString *)authToken { |
155 | 589a14ca | Miltiadis Vasilakis | NSLog(@"Authentication - storageURLPrefix:%@, authUser:%@, authToken:%@", storageURLPrefix, authUser, authToken); |
156 | 589a14ca | Miltiadis Vasilakis | if ([authUser length] && [authToken length]) { |
157 | af3b9f06 | Miltiadis Vasilakis | [[ASIDownloadCache sharedCache] clearCachedResponsesForStoragePolicy:ASICacheForSessionDurationCacheStoragePolicy]; |
158 | af3b9f06 | Miltiadis Vasilakis | [ASIPithosRequest setAuthURL:storageURLPrefix]; |
159 | e5096d8a | Miltiadis Vasilakis | [ASIPithosRequest setStorageURLPrefix:storageURLPrefix]; |
160 | e5096d8a | Miltiadis Vasilakis | [ASIPithosRequest setAuthUser:authUser]; |
161 | 589a14ca | Miltiadis Vasilakis | [ASIPithosRequest setAuthToken:authToken]; |
162 | e5096d8a | Miltiadis Vasilakis | [ASIPithosRequest setPublicURLPrefix:publicURLPrefix]; |
163 | 589a14ca | Miltiadis Vasilakis | |
164 | 589a14ca | Miltiadis Vasilakis | [[NSNotificationCenter defaultCenter] postNotificationName:@"PithosAuthenticationCredentialsUpdated" object:self]; |
165 | 589a14ca | Miltiadis Vasilakis | } |
166 | 589a14ca | Miltiadis Vasilakis | } |
167 | 589a14ca | Miltiadis Vasilakis | |
168 | d8d08dc1 | Miltiadis Vasilakis | @end |