Updated Branches:
  refs/heads/master 701f3cca0 -> 5f2c0b787

More Unified JS bug fixes and code cleanup

*fix warnings in CDVCamera - bad use of || changed to a tertiary statement
*capture - remove references to cast functions and updated to properly find 
"File" class
*Location - updated returnLocationError to include message
*Updated sound to return MediaError to onStatus when msg is MEDIA_ERROR. Added 
back support for playing audio multiple times via numberOfLoops option.


Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/commit/5f2c0b78
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/tree/5f2c0b78
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/diff/5f2c0b78

Branch: refs/heads/master
Commit: 5f2c0b78730a2a01940b58d7f0669797edc2250b
Parents: 701f3cc
Author: Becky Gibson <becka...@apache.org>
Authored: Wed Mar 21 16:47:38 2012 -0400
Committer: Becky Gibson <becka...@apache.org>
Committed: Wed Mar 21 16:55:01 2012 -0400

----------------------------------------------------------------------
 CordovaLib/Classes/CDVCamera.m         |    4 +-
 CordovaLib/Classes/CDVCapture.m        |   10 ++++----
 CordovaLib/Classes/CDVLocation.h       |    1 +
 CordovaLib/Classes/CDVLocation.m       |   32 ++++++++++++++++----------
 CordovaLib/Classes/CDVSound.m          |   30 +++++++++++-------------
 CordovaLib/Classes/CDVViewController.h |    2 +
 6 files changed, 44 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/5f2c0b78/CordovaLib/Classes/CDVCamera.m
----------------------------------------------------------------------
diff --git a/CordovaLib/Classes/CDVCamera.m b/CordovaLib/Classes/CDVCamera.m
index 7fa7e60..2d48f0e 100644
--- a/CordovaLib/Classes/CDVCamera.m
+++ b/CordovaLib/Classes/CDVCamera.m
@@ -77,9 +77,9 @@
         self.pickerController.correctOrientation = [[options 
valueForKey:@"correctOrientation"] boolValue];
         self.pickerController.saveToPhotoAlbum = [[options 
valueForKey:@"saveToPhotoAlbum"] boolValue];
         
-        self.pickerController.encodingType = [[arguments objectAtIndex:6] 
intValue] || EncodingTypeJPEG;
+        self.pickerController.encodingType = ([arguments objectAtIndex:6]) ? 
[[arguments objectAtIndex:6] intValue] : EncodingTypeJPEG;
         
-        self.pickerController.quality = [[arguments objectAtIndex:1] intValue] 
|| 50;
+        self.pickerController.quality = ([arguments objectAtIndex:1]) ? 
[[arguments objectAtIndex:1] intValue] : 50;
         self.pickerController.returnType = (CDVDestinationType)[[arguments 
objectAtIndex:2] intValue] || DestinationTypeFileUri;
        
         if (sourceType == UIImagePickerControllerSourceTypeCamera) {

http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/5f2c0b78/CordovaLib/Classes/CDVCapture.m
----------------------------------------------------------------------
diff --git a/CordovaLib/Classes/CDVCapture.m b/CordovaLib/Classes/CDVCapture.m
index bc17462..05d1444 100644
--- a/CordovaLib/Classes/CDVCapture.m
+++ b/CordovaLib/Classes/CDVCapture.m
@@ -199,7 +199,7 @@
         NSDictionary* fileDict = [self getMediaDictionaryFromPath:filePath 
ofType: mimeType];
         NSArray* fileArray = [NSArray arrayWithObject:fileDict];
         
-        result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK 
messageAsArray: fileArray cast:@"navigator.device.capture._castMediaFile"];
+        result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK 
messageAsArray: fileArray];
         jsString = [result toSuccessCallbackString:callbackId];
         
     }
@@ -288,7 +288,7 @@
     NSDictionary* fileDict = [self getMediaDictionaryFromPath:moviePath 
ofType:nil];
     NSArray* fileArray = [NSArray arrayWithObject:fileDict];
     
-    result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK 
messageAsArray: fileArray cast:@"navigator.device.capture._castMediaFile"];
+    result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK 
messageAsArray: fileArray];
     jsString = [result toSuccessCallbackString:callbackId];
     
     // 
@@ -361,7 +361,7 @@
     
     if (!mimeType){
         // try to determine mime type if not provided
-        id command = [self.commandDelegate getCommandInstance: 
@"org.apache.cordova.file"];
+        id command = [self.commandDelegate getCommandInstance: @"File"];
         bError = !([command isKindOfClass:[CDVFile class]]);
         if (!bError) {
             CDVFile* pgFile = (CDVFile*)command;
@@ -448,7 +448,7 @@
     [fileDict setObject: fullPath forKey:@"fullPath"];
     // determine type
     if(!type) {
-        id command = [self.commandDelegate getCommandInstance: 
@"org.apache.cordova.file"];
+        id command = [self.commandDelegate getCommandInstance: @"File"];
         if([command isKindOfClass:[CDVFile class]]) {
             CDVFile* pgFile = (CDVFile*)command;
             NSString* mimeType = [pgFile getMimeTypeFromPath:fullPath];
@@ -843,7 +843,7 @@
         NSDictionary* fileDict = [captureCommand 
getMediaDictionaryFromPath:filePath ofType: @"audio/wav"];
         NSArray* fileArray = [NSArray arrayWithObject:fileDict];
         
-        CDVPluginResult* result = [CDVPluginResult resultWithStatus: 
CDVCommandStatus_OK messageAsArray: fileArray 
cast:@"navigator.device.capture._castMediaFile"];
+        CDVPluginResult* result = [CDVPluginResult resultWithStatus: 
CDVCommandStatus_OK messageAsArray: fileArray];
         self.resultString = [result toSuccessCallbackString:callbackId];
     } else {
         CDVPluginResult* result = [CDVPluginResult 
resultWithStatus:CDVCommandStatus_OK messageToErrorObject:CAPTURE_INTERNAL_ERR];

http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/5f2c0b78/CordovaLib/Classes/CDVLocation.h
----------------------------------------------------------------------
diff --git a/CordovaLib/Classes/CDVLocation.h b/CordovaLib/Classes/CDVLocation.h
index 6ec0dbc..ae6b4b9 100755
--- a/CordovaLib/Classes/CDVLocation.h
+++ b/CordovaLib/Classes/CDVLocation.h
@@ -82,6 +82,7 @@ typedef NSUInteger CDVLocationStatus;
 - (BOOL) hasHeadingSupport;
 - (void) getLocation:(NSMutableArray*)arguments 
withDict:(NSMutableDictionary*)options;
 - (void) returnLocationInfo: (NSString*) callbackId;
+- (void) returnLocationError: (NSUInteger) errorCode withMessage: (NSString*) 
message;
 - (void) startLocation;
 - (void) stopLocation;
 

http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/5f2c0b78/CordovaLib/Classes/CDVLocation.m
----------------------------------------------------------------------
diff --git a/CordovaLib/Classes/CDVLocation.m b/CordovaLib/Classes/CDVLocation.m
index d85d7d4..665ea07 100755
--- a/CordovaLib/Classes/CDVLocation.m
+++ b/CordovaLib/Classes/CDVLocation.m
@@ -82,7 +82,7 @@
 
 @implementation CDVLocationData
 
-@synthesize locationInfo, locationCallbacks;
+@synthesize locationStatus, locationInfo, locationCallbacks;
 -(CDVLocationData*) init
 {
     self = (CDVLocationData*)[super init];
@@ -184,19 +184,25 @@
         */
                if (!forcePrompt)
                {
-            [self returnLocationError:PERMISSIONDENIED];
+            [self returnLocationError:PERMISSIONDENIED withMessage: nil];
                        return;
                }
     }
     if (![self isAuthorized]) 
     {
-        NSUInteger code = -1;
+        NSString* message = nil;
         BOOL authStatusAvailable = [CLLocationManager 
respondsToSelector:@selector(authorizationStatus)]; // iOS 4.2+
         if (authStatusAvailable) {
-            code = [CLLocationManager authorizationStatus];
+            NSUInteger code = [CLLocationManager authorizationStatus];
+            if (code == kCLAuthorizationStatusNotDetermined) {
+                // could return POSITION_UNAVAILABLE but need to coordinate 
with other platforms
+                message = @"User undecided on application's use of location 
services";
+            } else if (code == kCLAuthorizationStatusRestricted) {
+                message = @"application use of location services is 
restricted";
+            }
         }
-        
-        [self returnLocationError:code];
+        //PERMISSIONDENIED is only PositionError that makes sense when 
authorization denied
+        [self returnLocationError:PERMISSIONDENIED withMessage: message];
         
         return;
     }
@@ -303,7 +309,7 @@
     
     if (lData && !lData.locationInfo) {
         // return error
-        result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR 
messageAsInt:POSITIONUNAVAILABLE];
+        result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR 
messageToErrorObject:POSITIONUNAVAILABLE];
         jsString = [result toErrorCallbackString:callbackId];
     } else if (lData && lData.locationInfo) {
         CLLocation* lInfo = lData.locationInfo;
@@ -327,10 +333,13 @@
         [super writeJavascript:jsString];
     }
 }
-- (void)returnLocationError: (NSInteger*) errorCode
+- (void)returnLocationError: (NSUInteger) errorCode withMessage: (NSString*) 
message
 {
+    NSMutableDictionary* posError = [NSMutableDictionary 
dictionaryWithCapacity:2];
+    [posError setObject: [NSNumber numberWithInt: errorCode] forKey:@"code"];
+    [posError setObject: message ? message : @"" forKey: @"message"];
+    CDVPluginResult* result = [CDVPluginResult 
resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:posError];
     for (NSString *callbackId in self.locationData.locationCallbacks) {
-        CDVPluginResult* result = [CDVPluginResult 
resultWithStatus:CDVCommandStatus_ERROR messageAsInt:*errorCode];
         [super writeJavascript:[result toErrorCallbackString:callbackId]];
     }
     [self.locationData.locationCallbacks removeAllObjects];
@@ -507,7 +516,6 @@
 - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError 
*)error
 {
     NSLog(@"locationManager::didFailWithError %@", [error 
localizedFailureReason]);
-       NSString* jsCallback = @"";
        
     // Compass Error
        if ([error code] == kCLErrorHeadingFailure)
@@ -538,11 +546,11 @@
             // PositionError.PERMISSION_DENIED = 1;
             // PositionError.POSITION_UNAVAILABLE = 2;
             // PositionError.TIMEOUT = 3;
-            NSInteger positionError = POSITIONUNAVAILABLE;
+            NSUInteger positionError = POSITIONUNAVAILABLE;
             if (error.code == kCLErrorDenied) {
                 positionError = PERMISSIONDENIED;
             }
-            [self returnLocationError:positionError];
+            [self returnLocationError:positionError withMessage: [error 
localizedDescription]];
 
         }
        }

http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/5f2c0b78/CordovaLib/Classes/CDVSound.m
----------------------------------------------------------------------
diff --git a/CordovaLib/Classes/CDVSound.m b/CordovaLib/Classes/CDVSound.m
index 0a5f756..03e9ed4 100644
--- a/CordovaLib/Classes/CDVSound.m
+++ b/CordovaLib/Classes/CDVSound.m
@@ -105,8 +105,8 @@
                        errMsg = [NSString stringWithFormat: @"Cannot use audio 
file from resource '%@'", resourcePath];
                }
                if (bError) {
-                       jsString = [NSString stringWithFormat: 
@"%@(\"%@\",%d,%d);", @"cordova.require('cordova/plugin/Media').onStatus", 
mediaId, MEDIA_ERROR, errcode];
-            //jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", 
@"require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR,[self 
createMediaErrorWithCode: errcode message: errMsg]];
+                       //jsString = [NSString stringWithFormat: 
@"%@(\"%@\",%d,%d);", @"cordova.require('cordova/plugin/Media').onStatus", 
mediaId, MEDIA_ERROR, errcode];
+            jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", 
@"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR,[self 
createMediaErrorWithCode: errcode message: errMsg]];
                        [super writeJavascript:jsString];
                } else {
                        audioFile = [[[CDVAudioFile alloc] init] autorelease];
@@ -179,14 +179,12 @@
             }
             if (!bError) {
                 NSLog(@"Playing audio sample '%@'", audioFile.resourcePath);
-                /* TODO:  do we want to keep numberOfLoops option for iOS only?
                 NSNumber* loopOption = [options objectForKey:@"numberOfLoops"];
                 NSInteger numberOfLoops = 0;
                 if (loopOption != nil) { 
                     numberOfLoops = [loopOption intValue] - 1;
                 }
                 audioFile.player.numberOfLoops = numberOfLoops;
-                */
                 if(audioFile.player.isPlaying){
                     [audioFile.player stop];
                     audioFile.player.currentTime = 0;
@@ -212,8 +210,8 @@
                                [audioFile.player play];
                        } */
                        // error creating the session or player
-                       jsString = [NSString stringWithFormat: 
@"%@(\"%@\",%d,%d);", @"cordova.require('cordova/plugin/Media').onStatus", 
mediaId, MEDIA_ERROR,  MEDIA_ERR_NONE_SUPPORTED];
-            //jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", 
@"require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, [self 
createMediaErrorWithCode: MEDIA_ERR_NONE_SUPPORTED message: nil]];
+                       //jsString = [NSString stringWithFormat: 
@"%@(\"%@\",%d,%d);", @"cordova.require('cordova/plugin/Media').onStatus", 
mediaId, MEDIA_ERROR,  MEDIA_ERR_NONE_SUPPORTED];
+            jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", 
@"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, 
[self createMediaErrorWithCode: MEDIA_ERR_NONE_SUPPORTED message: nil]];
                        [super writeJavascript:jsString];
                }
        }
@@ -301,10 +299,10 @@
         
         // NSLog(@"Prepared audio sample '%@' for playback.", 
audioFile.resourcePath);
         CDVPluginResult* result = [CDVPluginResult 
resultWithStatus:CDVCommandStatus_OK];
-        jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);\n%@", 
@"Cordova.Media.onStatus", mediaId, MEDIA_STATE, state, [result 
toSuccessCallbackString:callbackId]];
+        jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);\n%@", 
@"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_STATE, 
state, [result toSuccessCallbackString:callbackId]];
         
        } else {
-        jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", 
@"Cordova.Media.onStatus", mediaId, MEDIA_ERROR, [self 
createMediaErrorWithCode: MEDIA_ERR_NONE_SUPPORTED message: nil]];   
+        jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", 
@"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, 
[self createMediaErrorWithCode: MEDIA_ERR_NONE_SUPPORTED message: nil]];   
     }
     if (jsString) {
         [super writeJavascript:jsString];
@@ -478,8 +476,8 @@
             if (![self.avSession  setActive: YES error: &error]){
                 // other audio with higher priority that does not allow mixing 
could cause this to fail
                 errorMsg = [NSString stringWithFormat: @"Unable to record 
audio: %@", [error localizedFailureReason]];
-                jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);", 
@"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, 
MEDIA_ERR_ABORTED];
-               // jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", 
@"require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, [self 
createMediaErrorWithCode: MEDIA_ERR_ABORTED message: errorMsg] ];
+                //jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);", 
@"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, 
MEDIA_ERR_ABORTED];
+                jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", 
@"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, 
[self createMediaErrorWithCode: MEDIA_ERR_ABORTED message: errorMsg] ];
                 [super writeJavascript:jsString];
                 return;
             }
@@ -494,8 +492,8 @@
             if (self.avSession) {
                 [self.avSession setActive:NO error:nil];
             }
-                       jsString = [NSString stringWithFormat: 
@"%@(\"%@\",%d,%d);", @"cordova.require('cordova/plugin/Media').onStatus", 
mediaId, MEDIA_ERROR, MEDIA_ERR_ABORTED];
-                       //jsString = [NSString stringWithFormat: 
@"%@(\"%@\",%d,%@);", @"require('cordova/plugin/Media').onStatus", mediaId, 
MEDIA_ERROR, [self createMediaErrorWithCode: MEDIA_ERR_ABORTED message: 
errorMsg]];
+                       //jsString = [NSString stringWithFormat: 
@"%@(\"%@\",%d,%d);", @"cordova.require('cordova/plugin/Media').onStatus", 
mediaId, MEDIA_ERROR, MEDIA_ERR_ABORTED];
+                       jsString = [NSString stringWithFormat: 
@"%@(\"%@\",%d,%@);", @"cordova.require('cordova/plugin/Media').onStatus", 
mediaId, MEDIA_ERROR, [self createMediaErrorWithCode: MEDIA_ERR_ABORTED 
message: errorMsg]];
                        
                } else {
                        audioFile.recorder.delegate = self;
@@ -551,8 +549,8 @@
     if (flag){
         jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);", 
@"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_STATE, 
MEDIA_STOPPED];
     } else {
-        jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);", 
@"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, 
MEDIA_ERR_DECODE];
-        //jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", 
@"require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, [self 
createMediaErrorWithCode: MEDIA_ERR_DECODE message:nil]];
+        //jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);", 
@"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, 
MEDIA_ERR_DECODE];
+        jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", 
@"cordova.require('cordova/plugin/Media').onStatuss", mediaId, MEDIA_ERROR, 
[self createMediaErrorWithCode: MEDIA_ERR_DECODE message:nil]];
     }
     if (self.avSession) {
         [self.avSession setActive:NO error:nil];
@@ -575,8 +573,8 @@
         jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);", 
@"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_STATE, 
MEDIA_STOPPED];
         
     } else {
-        jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);", 
@"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, 
MEDIA_ERR_DECODE];
-        //jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", 
@"require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, [self 
createMediaErrorWithCode: MEDIA_ERR_DECODE message:nil]];
+        //jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);", 
@"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, 
MEDIA_ERR_DECODE];
+        jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", 
@"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, 
[self createMediaErrorWithCode: MEDIA_ERR_DECODE message:nil]];
         
     }
     if (self.avSession) {

http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/5f2c0b78/CordovaLib/Classes/CDVViewController.h
----------------------------------------------------------------------
diff --git a/CordovaLib/Classes/CDVViewController.h 
b/CordovaLib/Classes/CDVViewController.h
index 41f4d1b..11a15e1 100644
--- a/CordovaLib/Classes/CDVViewController.h
+++ b/CordovaLib/Classes/CDVViewController.h
@@ -51,12 +51,14 @@
 + (NSString*) cordovaVersion;
 + (NSString*) applicationDocumentsDirectory;
 
+- (void) printMultitaskingInfo;
 - (void) createGapView;
 
 - (int) executeQueuedCommands;
 - (void) flushCommandQueue;
 
 - (void) javascriptAlert:(NSString*)text;
+//- (NSString*) pathForResource:(NSString*)resourcepath;
 - (NSString*) appURLScheme;
 - (NSDictionary*) deviceProperties;
 

Reply via email to