Statistics
| Branch: | Tag: | Revision:

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