2011-02-01 09:51:02 -06:00
//
// MGMWebDavPlugIn . m
// CocoaShare
//
2011-02-02 14:58:24 -06:00
// Created by Mr . Gecko on 1 / 28 / 11.
2011-02-01 09:51:02 -06:00
// Copyright ( c ) 2011 Mr . Gecko ' s Media ( James Coleman ) . All rights reserved . http : // mrgeckosmedia . com /
//
# import "MGMWebDavPlugIn.h"
# import "MGMController.h"
# import "MGMWebDav.h"
NSString * const MGMCopyright = @ "Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/" ;
NSString * const MGMWebDavURL = @ "MGMWebDavURL" ;
NSString * const MGMWebDavUser = @ "MGMWebDavUser" ;
@ implementation MGMWebDavPlugIn
- ( void ) dealloc {
[ self releaseView ] ;
[ webDav release ] ;
[ filePath release ] ;
[ super dealloc ] ;
}
- ( BOOL ) isAccountPlugIn {
return YES ;
}
- ( NSString * ) plugInName {
return @ "WebDav" ;
}
- ( NSView * ) plugInView {
if ( view = = nil ) {
if ( ! [ NSBundle loadNibNamed : @ "WebDavAccountPane" owner : self ] ) {
NSLog ( @ "Unable to load WebDav Account Pane" ) ;
} else {
NSUserDefaults * defaults = [ NSUserDefaults standardUserDefaults ] ;
NSString * url = [ defaults objectForKey : MGMWebDavURL ] ;
if ( url ! = nil )
[ urlField setStringValue : url ] ;
NSString * user = [ defaults objectForKey : MGMWebDavUser ] ;
if ( user ! = nil )
[ userField setStringValue : user ] ;
NSString * password = [ [ MGMController sharedController ] password ] ;
if ( password ! = nil )
[ passwordField setStringValue : password ] ;
}
}
return view ;
}
- ( void ) releaseView {
[ view release ] ;
view = nil ;
urlField = nil ;
userField = nil ;
passwordField = nil ;
loginButton = nil ;
}
- ( void ) setCurrentPlugIn : ( BOOL ) isCurrent {
NSUserDefaults * defaults = [ NSUserDefaults standardUserDefaults ] ;
if ( isCurrent ) {
webDav = [ [ MGMWebDav webDavWithDelegate : self ] retain ] ;
userLoggingIn = YES ;
[ self login ] ;
} else {
[ webDav release ] ;
webDav = nil ;
[ defaults removeObjectForKey : MGMWebDavURL ] ;
[ defaults removeObjectForKey : MGMWebDavUser ] ;
}
}
- ( void ) lockLogin {
[ urlField setEnabled : NO ] ;
[ userField setEnabled : NO ] ;
[ passwordField setEnabled : NO ] ;
[ loginButton setEnabled : NO ] ;
2011-02-02 14:58:24 -06:00
[ loginButton setTitle : [ @ "Logging In" localizedFor : self ] ] ;
2011-02-01 09:51:02 -06:00
}
- ( void ) unlockLogin {
[ urlField setEnabled : YES ] ;
[ userField setEnabled : YES ] ;
[ passwordField setEnabled : YES ] ;
[ loginButton setEnabled : YES ] ;
2011-02-02 14:58:24 -06:00
[ loginButton setTitle : [ @ "Login" localizedFor : self ] ] ;
2011-02-01 09:51:02 -06:00
}
- ( void ) login {
NSUserDefaults * defaults = [ NSUserDefaults standardUserDefaults ] ;
if ( [ defaults objectForKey : MGMWebDavURL ] ! = nil ) {
NSString * user = [ defaults objectForKey : MGMWebDavUser ] ;
NSString * password = [ [ MGMController sharedController ] password ] ;
[ webDav setRootURL : [ NSURL URLWithString : [ defaults objectForKey : MGMWebDavURL ] ] ] ;
if ( user ! = nil )
[ webDav setUser : user password : password ] ;
MGMWebDavOptions * options = [ MGMWebDavOptions optionsAtURI : nil ] ;
[ webDav addHandler : options ] ;
}
}
- ( IBAction ) login : ( id ) sender {
if ( [ urlField isEqual : @ "" ] ) {
NSAlert * alert = [ [ NSAlert new ] autorelease ] ;
2011-02-02 14:58:24 -06:00
[ alert setMessageText : [ @ "URL Required" localizedFor : self ] ] ;
[ alert setInformativeText : [ @ "Please enter the WebDav URL." localizedFor : self ] ] ;
2011-02-01 09:51:02 -06:00
[ alert runModal ] ;
} else {
NSUserDefaults * defaults = [ NSUserDefaults standardUserDefaults ] ;
[ defaults setObject : [ urlField stringValue ] forKey : MGMWebDavURL ] ;
[ [ MGMController sharedController ] setPassword : [ passwordField stringValue ] ] ;
[ defaults setObject : [ userField stringValue ] forKey : MGMWebDavUser ] ;
[ self lockLogin ] ;
userLoggingIn = NO ;
[ self login ] ;
}
}
- ( void ) webDav : ( MGMWebDav * ) theSender error : ( NSError * ) theError recevingOptions : ( MGMWebDavOptions * ) theOptions {
NSLog ( @ "WebDav Error: %@" , theError ) ;
NSAlert * alert = [ [ NSAlert new ] autorelease ] ;
2011-02-02 14:58:24 -06:00
[ alert setMessageText : [ @ "Account Error" localizedFor : self ] ] ;
2011-02-01 09:51:02 -06:00
[ alert setInformativeText : [ theError localizedDescription ] ] ;
[ alert runModal ] ;
[ self unlockLogin ] ;
}
- ( void ) webDav : ( MGMWebDav * ) theSender receivedOptions : ( MGMWebDavOptions * ) theOptions {
MGMWebDavPropFind * propFind = [ MGMWebDavPropFind propfindAtURI : nil ] ;
[ propFind addProperty : MGMWebDavPResourceType ] ;
[ webDav addHandler : propFind ] ;
}
- ( void ) webDav : ( MGMWebDav * ) theSender error : ( NSError * ) theError recevingProperties : ( MGMWebDavPropFind * ) thePropFind {
NSLog ( @ "WebDav Error: %@" , theError ) ;
NSAlert * alert = [ [ NSAlert new ] autorelease ] ;
2011-02-02 14:58:24 -06:00
[ alert setMessageText : [ @ "Account Error" localizedFor : self ] ] ;
2011-02-01 09:51:02 -06:00
[ alert setInformativeText : [ theError localizedDescription ] ] ;
[ alert runModal ] ;
[ self unlockLogin ] ;
}
- ( void ) webDav : ( MGMWebDav * ) theSender receivedProperties : ( MGMWebDavPropFind * ) thePropFind {
NSArray * contents = [ thePropFind contents ] ;
if ( [ contents count ] > 0 ) {
if ( [ [ [ contents objectAtIndex : 0 ] objectForKey : MGMWebDavPResourceType ] isEqual : MGMWebDavPRCollection ] ) {
if ( ! userLoggingIn ) {
NSAlert * alert = [ [ NSAlert new ] autorelease ] ;
2011-02-02 14:58:24 -06:00
[ alert setMessageText : [ @ "Login Successful" localizedFor : self ] ] ;
[ alert setInformativeText : [ @ "You have sucessfully logged into your account." localizedFor : self ] ] ;
2011-02-01 09:51:02 -06:00
[ alert runModal ] ;
[ self unlockLogin ] ;
}
return ;
}
}
NSAlert * alert = [ [ NSAlert new ] autorelease ] ;
2011-02-02 14:58:24 -06:00
[ alert setMessageText : [ @ "Account Error" localizedFor : self ] ] ;
[ alert setInformativeText : [ @ "The URL you have entered does not appear to be a directory." localizedFor : self ] ] ;
2011-02-01 09:51:02 -06:00
[ alert runModal ] ;
[ self unlockLogin ] ;
}
- ( void ) sendFileAtPath : ( NSString * ) thePath withName : ( NSString * ) theName {
NSUserDefaults * defaults = [ NSUserDefaults standardUserDefaults ] ;
if ( [ defaults objectForKey : MGMWebDavURL ] = = nil ) {
2011-02-02 14:58:24 -06:00
NSError * error = [ NSError errorWithDomain : [ [ NSBundle bundleForClass : [ self class ] ] bundleIdentifier ] code : 5 userInfo : [ NSDictionary dictionaryWithObject : [ @ "Account is not logged in." localizedFor : self ] forKey : NSLocalizedDescriptionKey ] ] ;
2011-02-01 09:51:02 -06:00
[ [ MGMController sharedController ] upload : thePath receivedError : error ] ;
return ;
}
[ filePath release ] ;
filePath = [ thePath retain ] ;
MGMWebDavPut * put = [ MGMWebDavPut putAtURI : theName ] ;
[ put setData : [ NSData dataWithContentsOfFile : thePath ] ] ;
[ webDav addHandler : put ] ;
}
- ( void ) webDav : ( MGMWebDav * ) theSender error : ( NSError * ) theError putting : ( MGMWebDavPut * ) thePut {
NSString * finishPath = [ [ filePath retain ] autorelease ] ;
[ filePath release ] ;
filePath = nil ;
[ [ MGMController sharedController ] upload : finishPath receivedError : theError ] ;
}
- ( void ) webDav : ( MGMWebDav * ) theSender successfullyPut : ( MGMWebDavPut * ) thePut {
NSString * finishPath = [ [ filePath retain ] autorelease ] ;
[ filePath release ] ;
filePath = nil ;
[ [ MGMController sharedController ] uploadFinished : finishPath url : [ [ webDav rootURL ] appendPathComponent : [ thePut URI ] ] ] ;
}
@ end