// // PithosPreferencesController.m // pithos-macos // // Copyright 2011 GRNET S.A. All rights reserved. // // Redistribution and use in source and binary forms, with or // without modification, are permitted provided that the following // conditions are met: // // 1. Redistributions of source code must retain the above // copyright notice, this list of conditions and the following // disclaimer. // // 2. Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following // disclaimer in the documentation and/or other materials // provided with the distribution. // // THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS // OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF // USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED // AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. // // The views and conclusions contained in the software and // documentation are those of the authors and should not be // interpreted as representing official policies, either expressed // or implied, of GRNET S.A. #import "PithosPreferencesController.h" #import "pithos_macosAppDelegate.h" @implementation PithosPreferencesController @synthesize userDefaultsController; @synthesize authenticationUserTextField, authenticationTokenTextField, authenticationRenewCheckBox; - (id)init { return [super initWithWindowNibName:@"PithosPreferencesController"]; } - (void)windowDidLoad { [super windowDidLoad]; NSWindow *window = [self window]; [window setHidesOnDeactivate:NO]; [window setExcludedFromWindowsMenu:YES]; // Select the first tab when the window is loaded for the first time. [[window valueForKeyPath:@"toolbar"] setSelectedItemIdentifier:@"0"]; // // Monitor changes. // [userDefaultsController addObserver:self // forKeyPath:@"values.authUser" // options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) // context:NULL]; // [userDefaultsController addObserver:self // forKeyPath:@"values.authToken" // options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) // context:NULL]; [window setDelegate:self]; } // We do this to catch the case where the user enters a value into one of // the text fields but closes the window without hitting enter or tab. // TODO: Does not seem to work. - (BOOL)windowShouldClose:(NSWindow *)window { return [window makeFirstResponder:nil]; } - (IBAction)toolbarItemSelected:(id)sender { } //- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { // NSLog(@"observeValueForKeyPath: %@ %@", keyPath, [userDefaultsController valueForKeyPath:keyPath]); //} #pragma mark - #pragma Authentication - (IBAction)authenticationLogin:(id)sender { // XXX hardcoded for now NSProcessInfo *processInfo = [NSProcessInfo processInfo]; NSString *loginURL = [NSString stringWithFormat:@"https://pithos.dev.grnet.gr/login?next=pithos://%@_%d", [processInfo processName], [processInfo processIdentifier]]; if ([authenticationRenewCheckBox state] == NSOnState) loginURL = [loginURL stringByAppendingString:@"&renew="]; NSLog(@"loginURL: %@", loginURL); [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:loginURL]]; // XXX Should we wait for results or do something else? // XXX check the case where this happens for the first time } - (IBAction)authenticationManual:(id)sender { [userDefaultsController save:sender]; // Because of delayed saves of the userDefaultsController, we use the TextField values directly, instead of //NSString *authUser = [[userDefaultsController values] valueForKey:@"authUser"]; //NSString *authToken = [[userDefaultsController values] valueForKey:@"authToken"]; [(pithos_macosAppDelegate *)[[NSApplication sharedApplication] delegate] authenticateWithAuthUser:[authenticationUserTextField stringValue] authToken:[authenticationTokenTextField stringValue]]; } @end