http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/bc5de981/wp7/template/CordovaWP7AppProj.csproj ---------------------------------------------------------------------- diff --git a/wp7/template/CordovaWP7AppProj.csproj b/wp7/template/CordovaWP7AppProj.csproj index 13b1192..882c2da 100644 --- a/wp7/template/CordovaWP7AppProj.csproj +++ b/wp7/template/CordovaWP7AppProj.csproj @@ -102,10 +102,11 @@ <Compile Include="cordovalib\PluginResult.cs" /> <Compile Include="cordovalib\ScriptCallback.cs" /> <Compile Include="cordovalib\XHRHelper.cs" /> + <Compile Include="cordovalib\MimeTypeMapper.cs" /> + <Compile Include="Plugins\DebugConsole.cs" /> <Compile Include="MainPage.xaml.cs"> <DependentUpon>MainPage.xaml</DependentUpon> </Compile> - <Compile Include="Plugins\Capture.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> </ItemGroup> <ItemGroup> @@ -170,56 +171,6 @@ <ItemGroup> <Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" /> </ItemGroup> - <ItemGroup> - <Compile Include="Plugins\Accelerometer.cs" /> - <Compile Include="Plugins\AudioPlayer.cs" /> - <Compile Include="Plugins\Battery.cs" /> - <Compile Include="Plugins\Camera.cs" /> - <Compile Include="Plugins\Compass.cs" /> - <Compile Include="Plugins\Contacts.cs" /> - <Compile Include="Plugins\Device.cs" /> - <Compile Include="Plugins\File.cs" /> - <Compile Include="Plugins\FileTransfer.cs" /> - <Compile Include="Plugins\GeoLocation.cs" /> - <Compile Include="Plugins\Globalization.cs" /> - <Compile Include="Plugins\InAppBrowser.cs" /> - <Compile Include="Plugins\Media.cs" /> - <Compile Include="Plugins\MimeTypeMapper.cs" /> - <Compile Include="Plugins\NetworkStatus.cs" /> - <Compile Include="Plugins\Notification.cs" /> - <Compile Include="Plugins\UI\AudioCaptureTask.cs" /> - <Compile Include="Plugins\UI\AudioRecorder.xaml.cs"> - <DependentUpon>AudioRecorder.xaml</DependentUpon> - </Compile> - <Compile Include="Plugins\UI\ImageCapture.xaml.cs"> - <DependentUpon>ImageCapture.xaml</DependentUpon> - </Compile> - <Compile Include="Plugins\UI\NotificationBox.xaml.cs"> - <DependentUpon>NotificationBox.xaml</DependentUpon> - </Compile> - <Compile Include="Plugins\UI\VideoCaptureTask.cs" /> - <Compile Include="Plugins\UI\VideoRecorder.xaml.cs"> - <DependentUpon>VideoRecorder.xaml</DependentUpon> - </Compile> - </ItemGroup> - <ItemGroup> - <Page Include="Plugins\UI\AudioRecorder.xaml"> - <Generator>MSBuild:Compile</Generator> - <SubType>Designer</SubType> - </Page> - <Page Include="Plugins\UI\ImageCapture.xaml"> - <Generator>MSBuild:Compile</Generator> - <SubType>Designer</SubType> - </Page> - <Page Include="Plugins\UI\NotificationBox.xaml"> - <Generator>MSBuild:Compile</Generator> - <SubType>Designer</SubType> - </Page> - <Page Include="Plugins\UI\VideoRecorder.xaml"> - <Generator>MSBuild:Compile</Generator> - <SubType>Designer</SubType> - </Page> - </ItemGroup> <Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight for Phone\$(TargetFrameworkVersion)\Microsoft.Silverlight.$(TargetFrameworkProfile).Overrides.targets" /> <Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight for Phone\$(TargetFrameworkVersion)\Microsoft.Silverlight.CSharp.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/bc5de981/wp7/template/MainPage.xaml ---------------------------------------------------------------------- diff --git a/wp7/template/MainPage.xaml b/wp7/template/MainPage.xaml index 8b1e84b..e066fa6 100644 --- a/wp7/template/MainPage.xaml +++ b/wp7/template/MainPage.xaml @@ -22,14 +22,6 @@ Margin="0,0,0,0" x:Name="CordovaView" VerticalAlignment="Stretch" /> - <Image Source="SplashScreenImage.jpg" - x:Name="SplashImage" - VerticalAlignment="Center" - HorizontalAlignment="Stretch"> - <Image.Projection> - <PlaneProjection x:Name="SplashProjector" CenterOfRotationX="0"/> - </Image.Projection> - </Image> </Grid> </phone:PhoneApplicationPage> http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/bc5de981/wp7/template/MainPage.xaml.cs ---------------------------------------------------------------------- diff --git a/wp7/template/MainPage.xaml.cs b/wp7/template/MainPage.xaml.cs index b9ec7e1..187228c 100644 --- a/wp7/template/MainPage.xaml.cs +++ b/wp7/template/MainPage.xaml.cs @@ -48,25 +48,6 @@ namespace $safeprojectname$ private void CordovaView_Loaded(object sender, RoutedEventArgs e) { this.CordovaView.Loaded -= CordovaView_Loaded; - // first time load will have an animation - Storyboard _storyBoard = new Storyboard(); - DoubleAnimation animation = new DoubleAnimation() - { - From = 0, - Duration = TimeSpan.FromSeconds(0.6), - To = 90 - }; - Storyboard.SetTarget(animation, SplashProjector); - Storyboard.SetTargetProperty(animation, new PropertyPath("RotationY")); - _storyBoard.Children.Add(animation); - _storyBoard.Begin(); - _storyBoard.Completed += Splash_Completed; - } - - void Splash_Completed(object sender, EventArgs e) - { - (sender as Storyboard).Completed -= Splash_Completed; - LayoutRoot.Children.Remove(SplashImage); } } } http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/bc5de981/wp7/template/Properties/WMAppManifest.xml ---------------------------------------------------------------------- diff --git a/wp7/template/Properties/WMAppManifest.xml b/wp7/template/Properties/WMAppManifest.xml index 96332e1..bea7076 100644 --- a/wp7/template/Properties/WMAppManifest.xml +++ b/wp7/template/Properties/WMAppManifest.xml @@ -9,20 +9,7 @@ <IconPath IsRelative="true" IsResource="false">ApplicationIcon.png</IconPath> <Capabilities> - <Capability Name="ID_CAP_IDENTITY_DEVICE" /> - <Capability Name="ID_CAP_IDENTITY_USER" /> - <Capability Name="ID_CAP_LOCATION" /> - <Capability Name="ID_CAP_NETWORKING" /> - <Capability Name="ID_CAP_WEBBROWSERCOMPONENT" /> - <Capability Name="ID_CAP_APPOINTMENTS"/> - <Capability Name="ID_CAP_CONTACTS"/> - <Capability Name="ID_CAP_ISV_CAMERA"/> - <Capability Name="ID_CAP_MEDIALIB"/> - <Capability Name="ID_CAP_MICROPHONE"/> - <Capability Name="ID_CAP_PHONEDIALER"/> - <Capability Name="ID_CAP_PUSH_NOTIFICATION"/> - <Capability Name="ID_CAP_SENSORS"/> - <Capability Name="ID_HW_FRONTCAMERA"/> + <Capability Name="ID_CAP_WEBBROWSERCOMPONENT" /> </Capabilities> <Tasks> http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/bc5de981/wp7/template/config.xml ---------------------------------------------------------------------- diff --git a/wp7/template/config.xml b/wp7/template/config.xml index 054d26f..616d7cc 100644 --- a/wp7/template/config.xml +++ b/wp7/template/config.xml @@ -20,68 +20,8 @@ # --> <widget> - - <features> - <feature name="Device"> - <param name="wp-package" value="Device" onload="false"/> - </feature> + <access origin="*"/> <feature name="Logger"> <param name="wp-package" value="Logger"/> </feature> - <feature name="Compass"> - <param name="wp-package" value="Compass" /> - </feature> - <feature name="Accelerometer"> - <param name="wp-package" value="Accelerometer"/> - </feature> - <feature name="Camera"> - <param name="wp-package" value="Camera"/> - </feature> - <feature name="NetworkStatus"> - <param name="wp-package" value="NetworkStatus"/> - </feature> - <feature name="Contacts"> - <param name="wp-package" value="Contacts"/> - </feature> - <feature name="Echo"> - <param name="wp-package" value="Echo"/> - </feature> - <feature name="File"> - <param name="wp-package" value="File"/> - </feature> - <feature name="FileTransfer"> - <param name="wp-package" value="FileTransfer"/> - </feature> - <feature name="Geolocation"> - <param name="wp-package" value="Geolocation"/> - </feature> - <feature name="Geolocation"> - <param name="wp-package" value="Geolocation"/> - </feature> - <feature name="Media"> - <param name="wp-package" value="Media"/> - </feature> - <feature name="Capture"> - <param name="wp-package" value="Capture"/> - </feature> - <feature name="SplashScreen"> - <param name="wp-package" value="SplashScreen"/> - </feature> - <feature name="Battery"> - <param name="wp-package" value="Battery"/> - </feature> - <feature name="Globalization"> - <param name="wp-package" value="Globalization"/> - </feature> - <feature name="InAppBrowser"> - <param name="wp-package" value="InAppBrowser"/> - </feature> - <feature name="Notification"> - <param name="wp-package" value="Notification"/> - </feature> - </features> - - - <access origin="*"/> - </widget> http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/bc5de981/wp7/template/cordovalib/CordovaCommandCall.cs ---------------------------------------------------------------------- diff --git a/wp7/template/cordovalib/CordovaCommandCall.cs b/wp7/template/cordovalib/CordovaCommandCall.cs index 810f5e2..facc991 100644 --- a/wp7/template/cordovalib/CordovaCommandCall.cs +++ b/wp7/template/cordovalib/CordovaCommandCall.cs @@ -44,6 +44,7 @@ namespace WPCordovaClassLib.Cordova /// <returns>New class instance or null of string does not represent Cordova command</returns> public static CordovaCommandCall Parse(string commandStr) { + System.Diagnostics.Debug.WriteLine("CommandString : " + commandStr); if (string.IsNullOrEmpty(commandStr)) { return null; http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/bc5de981/wp7/template/cordovalib/MimeTypeMapper.cs ---------------------------------------------------------------------- diff --git a/wp7/template/cordovalib/MimeTypeMapper.cs b/wp7/template/cordovalib/MimeTypeMapper.cs new file mode 100644 index 0000000..a2794f5 --- /dev/null +++ b/wp7/template/cordovalib/MimeTypeMapper.cs @@ -0,0 +1,101 @@ +/* + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +using System.Collections.Generic; +using System.IO; + +namespace WPCordovaClassLib.Cordova.Commands +{ + /// <summary> + /// Represents file extension to mime type mapper. + /// </summary> + public static class MimeTypeMapper + { + /// <summary> + /// For unknown type it is recommended to use 'application/octet-stream' + /// http://stackoverflow.com/questions/1176022/unknown-file-type-mime + /// </summary> + private static string DefaultMimeType = "application/octet-stream"; + + /// <summary> + /// Stores mime type for all necessary extension + /// </summary> + private static readonly Dictionary<string, string> MIMETypesDictionary = new Dictionary<string, string> + { + {"avi", "video/x-msvideo"}, + {"bmp", "image/bmp"}, + {"gif", "image/gif"}, + {"html","text/html"}, + {"jpe", "image/jpeg"}, + {"jpeg", "image/jpeg"}, + {"jpg", "image/jpeg"}, + {"js","text/javascript"}, + {"mov", "video/quicktime"}, + {"mp2", "audio/mpeg"}, + {"mp3", "audio/mpeg"}, + {"mp4", "video/mp4"}, + {"mpe", "video/mpeg"}, + {"mpeg", "video/mpeg"}, + {"mpg", "video/mpeg"}, + {"mpga", "audio/mpeg"}, + {"pbm", "image/x-portable-bitmap"}, + {"pcm", "audio/x-pcm"}, + {"pct", "image/pict"}, + {"pgm", "image/x-portable-graymap"}, + {"pic", "image/pict"}, + {"pict", "image/pict"}, + {"png", "image/png"}, + {"pnm", "image/x-portable-anymap"}, + {"pnt", "image/x-macpaint"}, + {"pntg", "image/x-macpaint"}, + {"ppm", "image/x-portable-pixmap"}, + {"qt", "video/quicktime"}, + {"ra", "audio/x-pn-realaudio"}, + {"ram", "audio/x-pn-realaudio"}, + {"ras", "image/x-cmu-raster"}, + {"rgb", "image/x-rgb"}, + {"snd", "audio/basic"}, + {"txt", "text/plain"}, + {"tif", "image/tiff"}, + {"tiff", "image/tiff"}, + {"wav", "audio/x-wav"}, + {"wbmp", "image/vnd.wap.wbmp"}, + + }; + /// <summary> + /// Gets mime type by file extension + /// </summary> + /// <param name="fileName">file name to extract extension</param> + /// <returns>mime type</returns> + public static string GetMimeType(string fileName) + { + string ext = Path.GetExtension(fileName); + + // invalid extension + if (string.IsNullOrEmpty(ext) || !ext.StartsWith(".")) + { + return DefaultMimeType; + } + + ext = ext.Remove(0, 1); + + if (MIMETypesDictionary.ContainsKey(ext)) + { + return MIMETypesDictionary[ext]; + } + + return DefaultMimeType; + } + } +} http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/bc5de981/wp8/template/CordovaWP8AppProj.csproj ---------------------------------------------------------------------- diff --git a/wp8/template/CordovaWP8AppProj.csproj b/wp8/template/CordovaWP8AppProj.csproj index 097d9a9..72aa388 100644 --- a/wp8/template/CordovaWP8AppProj.csproj +++ b/wp8/template/CordovaWP8AppProj.csproj @@ -133,12 +133,15 @@ <DependentUpon>CordovaView.xaml</DependentUpon> </Compile> <Compile Include="cordovalib\IBrowserDecorator.cs" /> + <Compile Include="cordovalib\ImageExifHelper.cs" /> <Compile Include="cordovalib\JSON\JsonHelper.cs" /> <Compile Include="cordovalib\NativeExecution.cs" /> <Compile Include="cordovalib\OrientationHelper.cs" /> <Compile Include="cordovalib\PluginResult.cs" /> <Compile Include="cordovalib\ScriptCallback.cs" /> <Compile Include="cordovalib\XHRHelper.cs" /> + <Compile Include="cordovalib\MimeTypeMapper.cs" /> + <Compile Include="Plugins\DebugConsole.cs" /> <Compile Include="MainPage.xaml.cs"> <DependentUpon>MainPage.xaml</DependentUpon> </Compile> @@ -159,13 +162,7 @@ </Page> </ItemGroup> <ItemGroup> - <Content Include="www\cordova.js" /> - <Content Include="www\css\index.css" /> - <Content Include="www\img\logo.png" /> - <Content Include="www\index.html"> - <SubType>Designer</SubType> - </Content> - <Content Include="www\js\index.js" /> + <Content Include="www\**" /> <None Include="cordova\lib\build.js" /> <None Include="cordova\lib\clean.js" /> <None Include="cordova\lib\deploy.js" /> @@ -208,58 +205,6 @@ <ItemGroup> <Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" /> </ItemGroup> - <ItemGroup> - <Compile Include="Plugins\Accelerometer.cs" /> - <Compile Include="Plugins\AudioPlayer.cs" /> - <Compile Include="Plugins\Battery.cs" /> - <Compile Include="Plugins\Camera.cs" /> - <Compile Include="Plugins\Capture.cs" /> - <Compile Include="Plugins\Compass.cs" /> - <Compile Include="Plugins\Contacts.cs" /> - <Compile Include="Plugins\Device.cs" /> - <Compile Include="Plugins\File.cs" /> - <Compile Include="Plugins\FileTransfer.cs" /> - <Compile Include="Plugins\GeoLocation.cs" /> - <Compile Include="Plugins\Globalization.cs" /> - <Compile Include="Plugins\ImageExifHelper.cs" /> - <Compile Include="Plugins\InAppBrowser.cs" /> - <Compile Include="Plugins\Media.cs" /> - <Compile Include="Plugins\MimeTypeMapper.cs" /> - <Compile Include="Plugins\NetworkStatus.cs" /> - <Compile Include="Plugins\Notification.cs" /> - <Compile Include="Plugins\UI\AudioCaptureTask.cs" /> - <Compile Include="Plugins\UI\AudioRecorder.xaml.cs"> - <DependentUpon>AudioRecorder.xaml</DependentUpon> - </Compile> - <Compile Include="Plugins\UI\ImageCapture.xaml.cs"> - <DependentUpon>ImageCapture.xaml</DependentUpon> - </Compile> - <Compile Include="Plugins\UI\NotificationBox.xaml.cs"> - <DependentUpon>NotificationBox.xaml</DependentUpon> - </Compile> - <Compile Include="Plugins\UI\VideoCaptureTask.cs" /> - <Compile Include="Plugins\UI\VideoRecorder.xaml.cs"> - <DependentUpon>VideoRecorder.xaml</DependentUpon> - </Compile> - </ItemGroup> - <ItemGroup> - <Page Include="Plugins\UI\AudioRecorder.xaml"> - <Generator>MSBuild:Compile</Generator> - <SubType>Designer</SubType> - </Page> - <Page Include="Plugins\UI\ImageCapture.xaml"> - <Generator>MSBuild:Compile</Generator> - <SubType>Designer</SubType> - </Page> - <Page Include="Plugins\UI\NotificationBox.xaml"> - <Generator>MSBuild:Compile</Generator> - <SubType>Designer</SubType> - </Page> - <Page Include="Plugins\UI\VideoRecorder.xaml"> - <Generator>MSBuild:Compile</Generator> - <SubType>Designer</SubType> - </Page> - </ItemGroup> <Import Project="$(MSBuildExtensionsPath)\Microsoft\$(TargetFrameworkIdentifier)\$(TargetFrameworkVersion)\Microsoft.$(TargetFrameworkIdentifier).$(TargetFrameworkVersion).Overrides.targets" /> <Import Project="$(MSBuildExtensionsPath)\Microsoft\$(TargetFrameworkIdentifier)\$(TargetFrameworkVersion)\Microsoft.$(TargetFrameworkIdentifier).CSharp.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/bc5de981/wp8/template/MainPage.xaml ---------------------------------------------------------------------- diff --git a/wp8/template/MainPage.xaml b/wp8/template/MainPage.xaml index db0d8e6..8b85fb6 100644 --- a/wp8/template/MainPage.xaml +++ b/wp8/template/MainPage.xaml @@ -39,14 +39,6 @@ Margin="0,0,0,0" x:Name="CordovaView" VerticalAlignment="Stretch" /> - <Image Source="SplashScreenImage.jpg" - x:Name="SplashImage" - VerticalAlignment="Center" - HorizontalAlignment="Stretch"> - <Image.Projection> - <PlaneProjection x:Name="SplashProjector" CenterOfRotationX="0"/> - </Image.Projection> - </Image> </Grid> </phone:PhoneApplicationPage> http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/bc5de981/wp8/template/MainPage.xaml.cs ---------------------------------------------------------------------- diff --git a/wp8/template/MainPage.xaml.cs b/wp8/template/MainPage.xaml.cs index b9ec7e1..187228c 100644 --- a/wp8/template/MainPage.xaml.cs +++ b/wp8/template/MainPage.xaml.cs @@ -48,25 +48,6 @@ namespace $safeprojectname$ private void CordovaView_Loaded(object sender, RoutedEventArgs e) { this.CordovaView.Loaded -= CordovaView_Loaded; - // first time load will have an animation - Storyboard _storyBoard = new Storyboard(); - DoubleAnimation animation = new DoubleAnimation() - { - From = 0, - Duration = TimeSpan.FromSeconds(0.6), - To = 90 - }; - Storyboard.SetTarget(animation, SplashProjector); - Storyboard.SetTargetProperty(animation, new PropertyPath("RotationY")); - _storyBoard.Children.Add(animation); - _storyBoard.Begin(); - _storyBoard.Completed += Splash_Completed; - } - - void Splash_Completed(object sender, EventArgs e) - { - (sender as Storyboard).Completed -= Splash_Completed; - LayoutRoot.Children.Remove(SplashImage); } } } http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/bc5de981/wp8/template/Properties/WMAppManifest.xml ---------------------------------------------------------------------- diff --git a/wp8/template/Properties/WMAppManifest.xml b/wp8/template/Properties/WMAppManifest.xml index 36f2330..9b724a1 100644 --- a/wp8/template/Properties/WMAppManifest.xml +++ b/wp8/template/Properties/WMAppManifest.xml @@ -7,21 +7,7 @@ <App xmlns="" ProductID="{$guid1$}" Title="$safeprojectname$" RuntimeType="Silverlight" Version="1.0.0.0" Genre="apps.normal" Author="$safeprojectname$ author" BitsPerPixel="32" Description="Apache Cordova for Windows Phone" Publisher="$safeprojectname$" PublisherID="{db093ed5-53b1-45f7-af72-751e8f36ab80}"> <IconPath IsRelative="true" IsResource="false">ApplicationIcon.png</IconPath> <Capabilities> - <Capability Name="ID_CAP_IDENTITY_DEVICE" /> - <Capability Name="ID_CAP_IDENTITY_USER" /> - <Capability Name="ID_CAP_LOCATION" /> - <Capability Name="ID_CAP_NETWORKING" /> <Capability Name="ID_CAP_WEBBROWSERCOMPONENT" /> - <Capability Name="ID_CAP_APPOINTMENTS" /> - <Capability Name="ID_CAP_CONTACTS" /> - <Capability Name="ID_CAP_ISV_CAMERA" /> - <Capability Name="ID_CAP_MICROPHONE" /> - <Capability Name="ID_CAP_PHONEDIALER" /> - <Capability Name="ID_CAP_PUSH_NOTIFICATION" /> - <Capability Name="ID_CAP_SENSORS" /> - <Capability Name="ID_CAP_MEDIALIB_AUDIO" /> - <Capability Name="ID_CAP_MEDIALIB_PHOTO" /> - <Capability Name="ID_CAP_MEDIALIB_PLAYBACK" /> </Capabilities> <Tasks> <DefaultTask Name="_default" NavigationPage="MainPage.xaml" /> http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/bc5de981/wp8/template/config.xml ---------------------------------------------------------------------- diff --git a/wp8/template/config.xml b/wp8/template/config.xml index 054d26f..616d7cc 100644 --- a/wp8/template/config.xml +++ b/wp8/template/config.xml @@ -20,68 +20,8 @@ # --> <widget> - - <features> - <feature name="Device"> - <param name="wp-package" value="Device" onload="false"/> - </feature> + <access origin="*"/> <feature name="Logger"> <param name="wp-package" value="Logger"/> </feature> - <feature name="Compass"> - <param name="wp-package" value="Compass" /> - </feature> - <feature name="Accelerometer"> - <param name="wp-package" value="Accelerometer"/> - </feature> - <feature name="Camera"> - <param name="wp-package" value="Camera"/> - </feature> - <feature name="NetworkStatus"> - <param name="wp-package" value="NetworkStatus"/> - </feature> - <feature name="Contacts"> - <param name="wp-package" value="Contacts"/> - </feature> - <feature name="Echo"> - <param name="wp-package" value="Echo"/> - </feature> - <feature name="File"> - <param name="wp-package" value="File"/> - </feature> - <feature name="FileTransfer"> - <param name="wp-package" value="FileTransfer"/> - </feature> - <feature name="Geolocation"> - <param name="wp-package" value="Geolocation"/> - </feature> - <feature name="Geolocation"> - <param name="wp-package" value="Geolocation"/> - </feature> - <feature name="Media"> - <param name="wp-package" value="Media"/> - </feature> - <feature name="Capture"> - <param name="wp-package" value="Capture"/> - </feature> - <feature name="SplashScreen"> - <param name="wp-package" value="SplashScreen"/> - </feature> - <feature name="Battery"> - <param name="wp-package" value="Battery"/> - </feature> - <feature name="Globalization"> - <param name="wp-package" value="Globalization"/> - </feature> - <feature name="InAppBrowser"> - <param name="wp-package" value="InAppBrowser"/> - </feature> - <feature name="Notification"> - <param name="wp-package" value="Notification"/> - </feature> - </features> - - - <access origin="*"/> - </widget> http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/bc5de981/wp8/template/cordovalib/CordovaCommandCall.cs ---------------------------------------------------------------------- diff --git a/wp8/template/cordovalib/CordovaCommandCall.cs b/wp8/template/cordovalib/CordovaCommandCall.cs index a8851fd..facc991 100644 --- a/wp8/template/cordovalib/CordovaCommandCall.cs +++ b/wp8/template/cordovalib/CordovaCommandCall.cs @@ -44,7 +44,7 @@ namespace WPCordovaClassLib.Cordova /// <returns>New class instance or null of string does not represent Cordova command</returns> public static CordovaCommandCall Parse(string commandStr) { - //System.Diagnostics.Debug.WriteLine("CommandString : " + commandStr); + System.Diagnostics.Debug.WriteLine("CommandString : " + commandStr); if (string.IsNullOrEmpty(commandStr)) { return null; http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/bc5de981/wp8/template/cordovalib/ImageExifHelper.cs ---------------------------------------------------------------------- diff --git a/wp8/template/cordovalib/ImageExifHelper.cs b/wp8/template/cordovalib/ImageExifHelper.cs new file mode 100644 index 0000000..62b6462 --- /dev/null +++ b/wp8/template/cordovalib/ImageExifHelper.cs @@ -0,0 +1,209 @@ +/* + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + +using System; +using System.Diagnostics; +using System.IO; +using System.Windows.Media.Imaging; + +namespace WPCordovaClassLib.Cordova.Commands +{ + public class ImageExifOrientation + { + public const int Portrait = 1; + public const int PortraitUpsideDown = 3; + public const int LandscapeLeft = 6; + public const int LandscapeRight = 8; + } + + public class ImageExifHelper + { + + public static Stream RotateStream(Stream stream, int angle) + { + stream.Position = 0; + if (angle % 90 != 0 || angle < 0) + { + throw new ArgumentException(); + } + if (angle % 360 == 0) + { + return stream; + } + + angle = angle % 360; + + BitmapImage bitmap = new BitmapImage(); + bitmap.SetSource(stream); + WriteableBitmap wbSource = new WriteableBitmap(bitmap); + + WriteableBitmap wbTarget = null; + + int srcPixelWidth = wbSource.PixelWidth; + int srcPixelHeight = wbSource.PixelHeight; + + if (angle % 180 == 0) + { + wbTarget = new WriteableBitmap(srcPixelWidth, srcPixelHeight); + } + else + { + wbTarget = new WriteableBitmap(srcPixelHeight, srcPixelWidth); + } + + int destPixelWidth = wbTarget.PixelWidth; + int[] srcPxls = wbSource.Pixels; + int[] destPxls = wbTarget.Pixels; + + // this ugly if/else is to avoid a conditional check for every pixel + if (angle == 90) + { + for (int x = 0; x < srcPixelWidth; x++) + { + for (int y = 0; y < srcPixelHeight; y++) + { + destPxls[(srcPixelHeight - y - 1) + (x * destPixelWidth)] = srcPxls[x + y * srcPixelWidth]; + } + } + } + else if (angle == 180) + { + for (int x = 0; x < srcPixelWidth; x++) + { + for (int y = 0; y < srcPixelHeight; y++) + { + destPxls[(srcPixelWidth - x - 1) + (srcPixelHeight - y - 1) * srcPixelWidth] = srcPxls[x + y * srcPixelWidth]; + } + } + } + else if (angle == 270) + { + for (int x = 0; x < srcPixelWidth; x++) + { + for (int y = 0; y < srcPixelHeight; y++) + { + destPxls[y + (srcPixelWidth - x - 1) * destPixelWidth] = srcPxls[x + y * srcPixelWidth]; + } + } + } + + MemoryStream targetStream = new MemoryStream(); + wbTarget.SaveJpeg(targetStream, destPixelWidth, wbTarget.PixelHeight, 0, 100); + return targetStream; + } + + public static int getImageOrientationFromStream(Stream imgStream) + { + + // 0xFFD8 : jpgHeader + // 0xFFE1 : + // 0x???? : length of exif data + // 0x????, 0x???? : Chars 'E','x','i','f' + // 0x0000 : 2 empty bytes + // <== mark beginning of tags SIZE:ID:VALUE + // 0x???? : 'II' or 'MM' for Intel or Motorola ( always getting II on my WP7 devices ), determines littleEndian-ness + // 0x002A : marker value + // 0x???? : offset to the Image File Data + + // XXXX possible space before actual tag data ... we skip to mark + offset + + // 0x???? number of exif tags present + + // make sure we are at the beginning + imgStream.Seek(0, SeekOrigin.Begin); + BinaryReader reader = new BinaryReader(imgStream); + + byte[] jpgHdr = reader.ReadBytes(2); // always (0xFFD8) + + byte start = reader.ReadByte(); // 0xFF + byte index = reader.ReadByte(); // 0xE1 + + while (start == 0xFF && index != 0xE1) // This never seems to happen, todo: optimize + { + // Get the data length + ushort dLen = BitConverter.ToUInt16(reader.ReadBytes(2), 0); + // skip along + reader.ReadBytes(dLen - 2); + start = reader.ReadByte(); + index = reader.ReadByte(); + } + + // It's only success if we found the 0xFFE1 marker + if (start != 0xFF || index != 0xE1) + { + // throw new Exception("Could not find Exif data block"); + Debug.WriteLine("Did not find EXIF data"); + return 0; + } + + // read 2 byte length of EXIF data + ushort exifLen = BitConverter.ToUInt16(reader.ReadBytes(2), 0); + String exif = ""; // build the string + for (var n = 0; n < 4; n++) + { + exif += reader.ReadChar(); + } + if (exif != "Exif") + { + // did not find exif data ... + Debug.WriteLine("Did not find EXIF data"); + return 0; + } + + // read 2 empty bytes + //ushort emptyBytes = BitConverter.ToUInt16(reader.ReadBytes(2), 0); + reader.ReadBytes(2); + + long headerMark = reader.BaseStream.Position; // where are we now <== + + //bool isLEndian = (reader.ReadChar() + "" + reader.ReadChar()) == "II"; + reader.ReadBytes(2); // 'II' or 'MM', but we don't care + + if (0x002A != BitConverter.ToUInt16(reader.ReadBytes(2), 0)) + { + Debug.WriteLine("Error in data != 0x002A"); + return 0; + } + + // Get the offset to the IFD (image file directory) + ushort imgOffset = BitConverter.ToUInt16(reader.ReadBytes(2), 0); + + imgStream.Position = headerMark + imgOffset; + ushort tagCount = BitConverter.ToUInt16(reader.ReadBytes(2), 0); + for (ushort x = 0; x < tagCount; x++) + { + // Orientation = 0x112, aka 274 + if (0x112 == BitConverter.ToUInt16(reader.ReadBytes(2), 0)) + { + ushort dType = BitConverter.ToUInt16(reader.ReadBytes(2), 0); + // don't care .. + uint comps = reader.ReadUInt32(); + byte[] tagData = reader.ReadBytes(4); + int orientation = (int)tagData[0]; + Debug.WriteLine("orientation = " + orientation.ToString()); + return orientation; + // 6 means rotate clockwise 90 deg + // 8 means rotate counter-clockwise 90 deg + // 1 means all is good + // 3 means flip vertical + } + // skip to the next item, 12 bytes each + reader.BaseStream.Seek(10, SeekOrigin.Current); + } + return 0; + } + + } +} http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/bc5de981/wp8/template/cordovalib/MimeTypeMapper.cs ---------------------------------------------------------------------- diff --git a/wp8/template/cordovalib/MimeTypeMapper.cs b/wp8/template/cordovalib/MimeTypeMapper.cs new file mode 100644 index 0000000..a2794f5 --- /dev/null +++ b/wp8/template/cordovalib/MimeTypeMapper.cs @@ -0,0 +1,101 @@ +/* + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +using System.Collections.Generic; +using System.IO; + +namespace WPCordovaClassLib.Cordova.Commands +{ + /// <summary> + /// Represents file extension to mime type mapper. + /// </summary> + public static class MimeTypeMapper + { + /// <summary> + /// For unknown type it is recommended to use 'application/octet-stream' + /// http://stackoverflow.com/questions/1176022/unknown-file-type-mime + /// </summary> + private static string DefaultMimeType = "application/octet-stream"; + + /// <summary> + /// Stores mime type for all necessary extension + /// </summary> + private static readonly Dictionary<string, string> MIMETypesDictionary = new Dictionary<string, string> + { + {"avi", "video/x-msvideo"}, + {"bmp", "image/bmp"}, + {"gif", "image/gif"}, + {"html","text/html"}, + {"jpe", "image/jpeg"}, + {"jpeg", "image/jpeg"}, + {"jpg", "image/jpeg"}, + {"js","text/javascript"}, + {"mov", "video/quicktime"}, + {"mp2", "audio/mpeg"}, + {"mp3", "audio/mpeg"}, + {"mp4", "video/mp4"}, + {"mpe", "video/mpeg"}, + {"mpeg", "video/mpeg"}, + {"mpg", "video/mpeg"}, + {"mpga", "audio/mpeg"}, + {"pbm", "image/x-portable-bitmap"}, + {"pcm", "audio/x-pcm"}, + {"pct", "image/pict"}, + {"pgm", "image/x-portable-graymap"}, + {"pic", "image/pict"}, + {"pict", "image/pict"}, + {"png", "image/png"}, + {"pnm", "image/x-portable-anymap"}, + {"pnt", "image/x-macpaint"}, + {"pntg", "image/x-macpaint"}, + {"ppm", "image/x-portable-pixmap"}, + {"qt", "video/quicktime"}, + {"ra", "audio/x-pn-realaudio"}, + {"ram", "audio/x-pn-realaudio"}, + {"ras", "image/x-cmu-raster"}, + {"rgb", "image/x-rgb"}, + {"snd", "audio/basic"}, + {"txt", "text/plain"}, + {"tif", "image/tiff"}, + {"tiff", "image/tiff"}, + {"wav", "audio/x-wav"}, + {"wbmp", "image/vnd.wap.wbmp"}, + + }; + /// <summary> + /// Gets mime type by file extension + /// </summary> + /// <param name="fileName">file name to extract extension</param> + /// <returns>mime type</returns> + public static string GetMimeType(string fileName) + { + string ext = Path.GetExtension(fileName); + + // invalid extension + if (string.IsNullOrEmpty(ext) || !ext.StartsWith(".")) + { + return DefaultMimeType; + } + + ext = ext.Remove(0, 1); + + if (MIMETypesDictionary.ContainsKey(ext)) + { + return MIMETypesDictionary[ext]; + } + + return DefaultMimeType; + } + } +} http://git-wip-us.apache.org/repos/asf/cordova-wp8/blob/bc5de981/wp8/template/cordovalib/NativeExecution.cs ---------------------------------------------------------------------- diff --git a/wp8/template/cordovalib/NativeExecution.cs b/wp8/template/cordovalib/NativeExecution.cs index 4eb7c33..45ed7aa 100644 --- a/wp8/template/cordovalib/NativeExecution.cs +++ b/wp8/template/cordovalib/NativeExecution.cs @@ -146,7 +146,6 @@ namespace WPCordovaClassLib.Cordova // new Thread(methodInvokation).Start(); //} - } catch (Exception ex) {
