Updated Branches: refs/heads/master 327e47fea -> e87a25834
Fixed threading issue in audio, + Defect [CB-602], added more info to log statements, INFO/ERROR Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-wp7/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cordova-wp7/commit/e87a2583 Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-wp7/tree/e87a2583 Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-wp7/diff/e87a2583 Branch: refs/heads/master Commit: e87a2583465e0f2d242c918db8491f9ee799a787 Parents: 327e47f Author: Jesse MacFadyen <purplecabb...@gmail.com> Authored: Sat May 19 01:52:05 2012 -0700 Committer: Jesse MacFadyen <purplecabb...@gmail.com> Committed: Sat May 19 01:52:05 2012 -0700 ---------------------------------------------------------------------- framework/Cordova/Commands/AudioPlayer.cs | 18 ++++++++++++------ framework/Cordova/Commands/BaseCommand.cs | 4 +++- framework/Cordova/Commands/Media.cs | 16 +++++++++++++++- framework/Cordova/NativeExecution.cs | 21 +++++++++++---------- framework/Cordova/ScriptCallback.cs | 1 + framework/CordovaView.xaml.cs | 20 ++++++++++---------- 6 files changed, 52 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cordova-wp7/blob/e87a2583/framework/Cordova/Commands/AudioPlayer.cs ---------------------------------------------------------------------- diff --git a/framework/Cordova/Commands/AudioPlayer.cs b/framework/Cordova/Commands/AudioPlayer.cs index bbf28d4..d1fcb52 100644 --- a/framework/Cordova/Commands/AudioPlayer.cs +++ b/framework/Cordova/Commands/AudioPlayer.cs @@ -29,7 +29,7 @@ namespace WP7CordovaClassLib.Cordova.Commands /// <summary> /// Implements audio record and play back functionality. /// </summary> - internal class AudioPlayer: IDisposable + internal class AudioPlayer : IDisposable { #region Constants @@ -56,6 +56,7 @@ namespace WP7CordovaClassLib.Cordova.Commands private const int MediaErrorPauseState = 7; private const int MediaErrorStopState = 8; + //TODO: get rid of this callback, it should be universal private const string CallbackFunction = "CordovaMediaonStatus"; #endregion @@ -131,6 +132,7 @@ namespace WP7CordovaClassLib.Cordova.Commands /// </summary> public void Dispose() { + Debug.WriteLine("Dispose :: " + this.audioFile); if (this.player != null) { this.stopPlaying(); @@ -225,7 +227,7 @@ namespace WP7CordovaClassLib.Cordova.Commands } - if ((this.player == null) || (this.state == MediaStopped)) + if (this.player == null) { try { @@ -241,7 +243,9 @@ namespace WP7CordovaClassLib.Cordova.Commands Grid grid = page.FindName("LayoutRoot") as Grid; if (grid != null) { + this.player = new MediaElement(); + this.player.Name = "playerMediaElement"; grid.Children.Add(this.player); this.player.Visibility = Visibility.Collapsed; this.player.MediaOpened += MediaOpened; @@ -281,13 +285,13 @@ namespace WP7CordovaClassLib.Cordova.Commands } catch (Exception e) { - string s = e.Message; + Debug.WriteLine("Error: " + e.Message); this.handler.InvokeCustomScript(new ScriptCallback(CallbackFunction, this.id, MediaError, MediaErrorStartingPlayback)); } } else { - if ((this.state == MediaPaused) || (this.state == MediaStarting)) + if (this.state != MediaRunning) { this.player.Play(); this.SetState(MediaRunning); @@ -340,8 +344,8 @@ namespace WP7CordovaClassLib.Cordova.Commands { if (this.player != null) { - TimeSpan timeSpen = new TimeSpan(0, 0, 0, 0, milliseconds); - this.player.Position = timeSpen; + TimeSpan tsPos = new TimeSpan(0, 0, 0, 0, milliseconds); + this.player.Position = tsPos; this.handler.InvokeCustomScript(new ScriptCallback(CallbackFunction, this.id, MediaPosition, milliseconds / 1000.0f)); } } @@ -370,6 +374,8 @@ namespace WP7CordovaClassLib.Cordova.Commands if ((this.state == MediaRunning) || (this.state == MediaPaused)) { this.player.Stop(); + + this.player.Position = new TimeSpan(0L); this.SetState(MediaStopped); } else { http://git-wip-us.apache.org/repos/asf/incubator-cordova-wp7/blob/e87a2583/framework/Cordova/Commands/BaseCommand.cs ---------------------------------------------------------------------- diff --git a/framework/Cordova/Commands/BaseCommand.cs b/framework/Cordova/Commands/BaseCommand.cs index 575d141..c2af744 100644 --- a/framework/Cordova/Commands/BaseCommand.cs +++ b/framework/Cordova/Commands/BaseCommand.cs @@ -15,6 +15,7 @@ using System; using System.Reflection; using Microsoft.Phone.Shell; +using System.Diagnostics; namespace WP7CordovaClassLib.Cordova.Commands { @@ -75,7 +76,8 @@ namespace WP7CordovaClassLib.Cordova.Commands { if (this.OnCustomScript != null) { - this.OnCustomScript(this, script); + this.OnCustomScript(this, script); + this.OnCustomScript = null; } } http://git-wip-us.apache.org/repos/asf/incubator-cordova-wp7/blob/e87a2583/framework/Cordova/Commands/Media.cs ---------------------------------------------------------------------- diff --git a/framework/Cordova/Commands/Media.cs b/framework/Cordova/Commands/Media.cs index 36b04f4..7b8de51 100644 --- a/framework/Cordova/Commands/Media.cs +++ b/framework/Cordova/Commands/Media.cs @@ -16,6 +16,7 @@ using System; using System.Collections.Generic; using System.Runtime.Serialization; using System.Windows; +using System.Diagnostics; namespace WP7CordovaClassLib.Cordova.Commands { @@ -244,6 +245,7 @@ namespace WP7CordovaClassLib.Cordova.Commands } else { + Debug.WriteLine("INFO: startPlayingAudio could not find mediaPlayer for " + mediaOptions.Id); audio = Media.players[mediaOptions.Id]; } @@ -296,6 +298,10 @@ namespace WP7CordovaClassLib.Cordova.Commands AudioPlayer audio = Media.players[mediaOptions.Id]; audio.seekToPlaying(mediaOptions.Milliseconds); } + else + { + Debug.WriteLine("ERROR: seekToAudio could not find mediaPlayer for " + mediaOptions.Id); + } DispatchCommandResult(new PluginResult(PluginResult.Status.OK)); } @@ -338,6 +344,10 @@ namespace WP7CordovaClassLib.Cordova.Commands AudioPlayer audio = Media.players[mediaOptions.Id]; audio.pausePlaying(); } + else + { + Debug.WriteLine("ERROR: pausePlayingAudio could not find mediaPlayer for " + mediaOptions.Id); + } DispatchCommandResult(new PluginResult(PluginResult.Status.OK)); } @@ -377,6 +387,10 @@ namespace WP7CordovaClassLib.Cordova.Commands AudioPlayer audio = Media.players[mediaOptions.Id]; audio.stopPlaying(); } + else + { + Debug.WriteLine("stopPlaying could not find mediaPlayer for " + mediaOptions.Id); + } DispatchCommandResult(new PluginResult(PluginResult.Status.OK)); } @@ -415,7 +429,6 @@ namespace WP7CordovaClassLib.Cordova.Commands if (Media.players.ContainsKey(mediaOptions.Id)) { AudioPlayer audio = Media.players[mediaOptions.Id]; - Deployment.Current.Dispatcher.BeginInvoke(() => { DispatchCommandResult(new PluginResult(PluginResult.Status.OK, audio.getCurrentPosition())); @@ -460,6 +473,7 @@ namespace WP7CordovaClassLib.Cordova.Commands } else { + Debug.WriteLine("ERROR: getDurationAudio could not find mediaPlayer for " + mediaOptions.Id); audio = new AudioPlayer(this, mediaOptions.Id); Media.players.Add(mediaOptions.Id, audio); } http://git-wip-us.apache.org/repos/asf/incubator-cordova-wp7/blob/e87a2583/framework/Cordova/NativeExecution.cs ---------------------------------------------------------------------- diff --git a/framework/Cordova/NativeExecution.cs b/framework/Cordova/NativeExecution.cs index 466c1d9..afc9381 100644 --- a/framework/Cordova/NativeExecution.cs +++ b/framework/Cordova/NativeExecution.cs @@ -18,6 +18,7 @@ using System.Threading; using Microsoft.Devices; using Microsoft.Phone.Controls; using WP7CordovaClassLib.Cordova.Commands; +using System.Windows; namespace WP7CordovaClassLib.Cordova { @@ -69,7 +70,6 @@ namespace WP7CordovaClassLib.Cordova try { - BaseCommand bc = CommandFactory.CreateByServiceName(commandCallParams.Service); if (bc == null) @@ -96,21 +96,19 @@ namespace WP7CordovaClassLib.Cordova // TODO: alternative way is using thread pool (ThreadPool.QueueUserWorkItem) instead of // new thread for every command call; but num threads are not sufficient - 2 threads per CPU core - Thread thread = new Thread(func => { - try { bc.InvokeMethodNamed(commandCallParams.Action, commandCallParams.Args); } catch (Exception ex) { - Debug.WriteLine("Exception in ProcessCommand :: " + ex.Message); + Debug.WriteLine("ERROR: Exception in ProcessCommand :: " + ex.Message); bc.OnCommandResult -= OnCommandResultHandler; bc.OnCustomScript -= OnCustomScriptHandler; - Debug.WriteLine("failed to InvokeMethodNamed :: " + commandCallParams.Action + " on Object :: " + commandCallParams.Service); + Debug.WriteLine("ERROR: failed to InvokeMethodNamed :: " + commandCallParams.Action + " on Object :: " + commandCallParams.Service); this.OnCommandResult(commandCallParams.CallbackId, new PluginResult(PluginResult.Status.INVALID_ACTION)); @@ -123,7 +121,7 @@ namespace WP7CordovaClassLib.Cordova catch (Exception ex) { // ERROR - Debug.WriteLine(String.Format("Unable to execute command :: {0}:{1}:{3} ", + Debug.WriteLine(String.Format("ERROR: Unable to execute command :: {0}:{1}:{3} ", commandCallParams.Service, commandCallParams.Action, ex.Message)); this.OnCommandResult(commandCallParams.CallbackId, new PluginResult(PluginResult.Status.ERROR)); @@ -142,13 +140,13 @@ namespace WP7CordovaClassLib.Cordova if (result == null) { - Debug.WriteLine("OnCommandResult missing result argument"); + Debug.WriteLine("ERROR: OnCommandResult missing result argument"); return; } if (String.IsNullOrEmpty(callbackId)) { - Debug.WriteLine("OnCommandResult missing callbackId argument"); + Debug.WriteLine("ERROR: OnCommandResult missing callbackId argument"); return; } @@ -188,17 +186,20 @@ namespace WP7CordovaClassLib.Cordova throw new ArgumentNullException("ScriptName"); } + //Debug.WriteLine("INFO:: About to invoke ::" + script.ScriptName + " with args ::" + script.Args[0]); this.webBrowser.Dispatcher.BeginInvoke((ThreadStart)delegate() { + try { - //Debug.WriteLine("InvokingScript::" + script.ScriptName + " with args ::" + script.Args[0] + ", " + script.Args[1] + ", " + script.Args[2]); + //Debug.WriteLine("INFO:: InvokingScript::" + script.ScriptName + " with args ::" + script.Args[0]); this.webBrowser.InvokeScript(script.ScriptName, script.Args); } catch (Exception ex) { - Debug.WriteLine("Exception in InvokeScriptCallback :: " + ex.Message); + Debug.WriteLine("ERROR: Exception in InvokeScriptCallback :: " + ex.Message); } + }); } http://git-wip-us.apache.org/repos/asf/incubator-cordova-wp7/blob/e87a2583/framework/Cordova/ScriptCallback.cs ---------------------------------------------------------------------- diff --git a/framework/Cordova/ScriptCallback.cs b/framework/Cordova/ScriptCallback.cs index 7178a77..5c50c26 100644 --- a/framework/Cordova/ScriptCallback.cs +++ b/framework/Cordova/ScriptCallback.cs @@ -17,6 +17,7 @@ using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using WP7CordovaClassLib.Cordova.JSON; +using System.Diagnostics; namespace WP7CordovaClassLib.Cordova { http://git-wip-us.apache.org/repos/asf/incubator-cordova-wp7/blob/e87a2583/framework/CordovaView.xaml.cs ---------------------------------------------------------------------- diff --git a/framework/CordovaView.xaml.cs b/framework/CordovaView.xaml.cs index afd09d0..f9a6e0b 100644 --- a/framework/CordovaView.xaml.cs +++ b/framework/CordovaView.xaml.cs @@ -159,7 +159,7 @@ namespace WP7CordovaClassLib void AppDeactivated(object sender, DeactivatedEventArgs e) { - Debug.WriteLine("AppDeactivated"); + Debug.WriteLine("INFO: AppDeactivated"); try { @@ -167,25 +167,25 @@ namespace WP7CordovaClassLib } catch (Exception) { - Debug.WriteLine("Pause event error"); + Debug.WriteLine("ERROR: Pause event error"); } } void AppLaunching(object sender, LaunchingEventArgs e) { - Debug.WriteLine("AppLaunching"); + Debug.WriteLine("INFO: AppLaunching"); } void AppActivated(object sender, Microsoft.Phone.Shell.ActivatedEventArgs e) { - Debug.WriteLine("AppActivated"); + Debug.WriteLine("INFO: AppActivated"); try { CordovaBrowser.InvokeScript("CordovaCommandResult", new string[] { "resume" }); } catch (Exception) { - Debug.WriteLine("Resume event error"); + Debug.WriteLine("ERROR: Resume event error"); } } @@ -268,14 +268,14 @@ namespace WP7CordovaClassLib if(!appStorage.DirectoryExists(strBaseDir)) { - //Debug.WriteLine("Creating Directory :: " + strBaseDir); + Debug.WriteLine("INFO: Creating Directory :: " + strBaseDir); appStorage.CreateDirectory(strBaseDir); } // This will truncate/overwrite an existing file, or using (IsolatedStorageFileStream outFile = appStorage.OpenFile(AppRoot + file.path, FileMode.Create)) { - Debug.WriteLine("Writing data for " + AppRoot + file.path + " and length = " + data.Length); + Debug.WriteLine("INFO: Writing data for " + AppRoot + file.path + " and length = " + data.Length); using (var writer = new BinaryWriter(outFile)) { writer.Write(data); @@ -285,7 +285,7 @@ namespace WP7CordovaClassLib } else { - Debug.WriteLine("Failed to write file :: " + file.path + " did you forget to add it to the project?"); + Debug.WriteLine("ERROR: Failed to write file :: " + file.path + " did you forget to add it to the project?"); } } } @@ -297,7 +297,7 @@ namespace WP7CordovaClassLib } catch (Exception ex) { - Debug.WriteLine("Exception in GapBrowser_Loaded :: {0}", ex.Message); + Debug.WriteLine("ERROR: Exception in GapBrowser_Loaded :: {0}", ex.Message); } } @@ -373,7 +373,7 @@ namespace WP7CordovaClassLib void GapBrowser_Navigating(object sender, NavigatingEventArgs e) { this.PageDidChange = true; - Debug.WriteLine("GapBrowser_Navigating to :: " + e.Uri.ToString()); + // Debug.WriteLine("GapBrowser_Navigating to :: " + e.Uri.ToString()); // TODO: tell any running plugins to stop doing what they are doing. // TODO: check whitelist / blacklist // NOTE: Navigation can be cancelled by setting : e.Cancel = true;