Revision baaf1397 pithos-macos/pithos_macosAppDelegate.m

b/pithos-macos/pithos_macosAppDelegate.m
42 42
#import "PithosSyncDaemon.h"
43 43
#import "ASIPithosRequest.h"
44 44
#import "ASIPithos.h"
45
#import "PithosUtilities.h"
45 46
#import "LastCompletedSyncTransformer.h"
46 47

  
47 48
@implementation pithos_macosAppDelegate
......
96 97
    pithosAccountsDictionary = [[NSMutableDictionary alloc] initWithCapacity:[pithosAccounts count]];
97 98
    for (PithosAccount *pithosAccount in pithosAccounts) {
98 99
        [pithosAccountsDictionary setObject:pithosAccount forKey:pithosAccount.name];
99
        if (!currentPithosAccount && pithosAccount.active)
100
            self.currentPithosAccount = pithosAccount;
100
        if (pithosAccount.active) {
101
            if (!pithosAccount.manual) {
102
                ASIPithosRequest *serviceCatalogRequest = [ASIPithosRequest serviceCatalogRequestWithPithos:pithosAccount.pithos];
103
                [PithosUtilities startAndWaitForRequest:serviceCatalogRequest];
104
                [pithosAccount updateServicesFromServiceCatalogRequest:serviceCatalogRequest];
105
            }
106
            if (!currentPithosAccount)
107
                self.currentPithosAccount = pithosAccount;
108
        }
101 109
    }
102 110
    if (!currentPithosAccount)
103 111
        self.currentPithosAccount = [pithosAccounts objectAtIndex:0];
......
153 161
    NSProcessInfo *processInfo = [NSProcessInfo processInfo];
154 162
    if ([host isEqualToString:[NSString stringWithFormat:@"%d", [processInfo processIdentifier]]] && pithosAccount && query) {
155 163
        // user=
156
        NSString *authUser;
164
        // optional
165
        NSString *authUser = nil;
157 166
        NSRange userRange = [query rangeOfString:@"user=" options:NSCaseInsensitiveSearch];
158
        if (userRange.length == 0)
159
            // XXX maybe show an error message?
160
            return;
161
        NSUInteger authUserStartLocation = userRange.location + userRange.length;
162
        NSRange userEndRange = [query rangeOfString:@"&" options:NSCaseInsensitiveSearch 
163
                                              range:NSMakeRange(authUserStartLocation, [query length] - authUserStartLocation)];
164
        if (userEndRange.length) {
165
            authUser = [[query substringWithRange:NSMakeRange(authUserStartLocation, userEndRange.location - authUserStartLocation)]
166
                        stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
167
        } else {
168
            authUser = [[query substringFromIndex:authUserStartLocation]
169
                        stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
167
        if (userRange.length) {
168
            NSUInteger authUserStartLocation = userRange.location + userRange.length;
169
            NSRange userEndRange = [query rangeOfString:@"&" options:NSCaseInsensitiveSearch
170
                                                  range:NSMakeRange(authUserStartLocation, [query length] - authUserStartLocation)];
171
            if (userEndRange.length) {
172
                authUser = [[query substringWithRange:NSMakeRange(authUserStartLocation, userEndRange.location - authUserStartLocation)]
173
                            stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
174
            } else {
175
                authUser = [[query substringFromIndex:authUserStartLocation]
176
                            stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
177
            }
170 178
        }
171 179
        // token=
172
        NSString *authToken;
180
        // required
181
        NSString *authToken = nil;
173 182
        NSRange tokenRange = [query rangeOfString:@"token=" options:NSCaseInsensitiveSearch];
174 183
        if (tokenRange.length == 0)
175 184
            // XXX maybe show an error message?
176 185
            return;
177 186
        NSUInteger authTokenStartLocation = tokenRange.location + tokenRange.length;
178
        NSRange tokenEndRange = [query rangeOfString:@"&" options:NSCaseInsensitiveSearch 
179
                                              range:NSMakeRange(authTokenStartLocation, [query length] - authTokenStartLocation)];
187
        NSRange tokenEndRange = [query rangeOfString:@"&" options:NSCaseInsensitiveSearch
188
                                               range:NSMakeRange(authTokenStartLocation, [query length] - authTokenStartLocation)];
180 189
        if (tokenEndRange.length) {
181 190
            authToken = [[query substringWithRange:NSMakeRange(authTokenStartLocation, tokenEndRange.location - authTokenStartLocation)]
182 191
                         stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
......
186 195
        }
187 196
        
188 197
        DLog(@"query authUser: '%@', authToken: '%@'", authUser, authToken);
189
        if ([authUser length] && [authToken length]) {
190
            [pithosAccount authenticateWithServerURL:nil authUser:authUser authToken:authToken];
191
            [self savePithosAccounts:self];
198
        if (authToken || authUser) {
192 199
            if (self.pithosPreferencesController && [self.pithosPreferencesController.selectedPithosAccount isEqualTo:pithosAccount]) {
193
                self.pithosPreferencesController.authUser = pithosAccount.authUser;
194
                self.pithosPreferencesController.authToken = pithosAccount.authToken;
195
            }
196
            self.activated = YES;
197
            if ([pithosAccount isEqualTo:currentPithosAccount]) {
198
                [self showPithosBrowser:self];
199
                self.pithosBrowserController.pithos = pithosAccount.pithos;
200
                self.pithosPreferencesController.authToken = authToken;
201
                self.pithosPreferencesController.authUser = authUser;
202
                [self showPithosPreferences:self];
200 203
            }
201 204
        }
202 205
        // XXX else maybe show an error message?

Also available in: Unified diff