From 8863e8b820930c6d850c227e708d4d801df87779 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Tue, 4 Oct 2011 22:17:14 +0200 Subject: [PATCH] Move MIME detection into separate class --- .../Project/ICSharpCode.SharpDevelop.csproj | 1 + .../AutoDetectDisplayBinding.cs | 28 +------------- .../Project/Src/Services/MimeTypeDetection.cs | 37 +++++++++++++++++++ 3 files changed, 39 insertions(+), 27 deletions(-) create mode 100644 src/Main/Base/Project/Src/Services/MimeTypeDetection.cs diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj index 83c49a1687..6c59e4ed85 100644 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj @@ -341,6 +341,7 @@ + diff --git a/src/Main/Base/Project/Src/Services/DisplayBinding/AutoDetectDisplayBinding.cs b/src/Main/Base/Project/Src/Services/DisplayBinding/AutoDetectDisplayBinding.cs index 26b0434dc7..21b39235fa 100644 --- a/src/Main/Base/Project/Src/Services/DisplayBinding/AutoDetectDisplayBinding.cs +++ b/src/Main/Base/Project/Src/Services/DisplayBinding/AutoDetectDisplayBinding.cs @@ -14,17 +14,6 @@ namespace ICSharpCode.SharpDevelop /// public sealed class AutoDetectDisplayBinding : IDisplayBinding { - [DllImport("urlmon.dll", CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = false)] - static extern unsafe int FindMimeFromData( - IntPtr pBC, - [MarshalAs(UnmanagedType.LPWStr)] string pwzUrl, - byte* pBuffer, - int cbSize, - [MarshalAs(UnmanagedType.LPWStr)] string pwzMimeProposed, - int dwMimeFlags, - out IntPtr ppwzMimeOut, - int dwReserved); - public bool IsPreferredBindingForFile(string fileName) { return false; @@ -51,7 +40,7 @@ namespace ICSharpCode.SharpDevelop string mime = "text/plain"; if (stream.Length > 0) { stream.Position = 0; - mime = FindMimeType(new BinaryReader(stream).ReadBytes(BUFFER_LENGTH)); + mime = MimeTypeDetection.FindMimeType(new BinaryReader(stream).ReadBytes(BUFFER_LENGTH)); } foreach (var codon in codons) { stream.Position = 0; @@ -68,20 +57,5 @@ namespace ICSharpCode.SharpDevelop return bestMatch.Binding.CreateContentForFile(file); } - - unsafe string FindMimeType(byte[] buffer) - { - fixed (byte *b = buffer) { - const int FMFD_ENABLEMIMESNIFFING = 0x00000002; - IntPtr mimeout; - int result = FindMimeFromData(IntPtr.Zero, null, b, buffer.Length, null, FMFD_ENABLEMIMESNIFFING, out mimeout, 0); - - if (result != 0) - throw Marshal.GetExceptionForHR(result); - string mime = Marshal.PtrToStringUni(mimeout); - Marshal.FreeCoTaskMem(mimeout); - return mime; - } - } } } diff --git a/src/Main/Base/Project/Src/Services/MimeTypeDetection.cs b/src/Main/Base/Project/Src/Services/MimeTypeDetection.cs new file mode 100644 index 0000000000..36413253f6 --- /dev/null +++ b/src/Main/Base/Project/Src/Services/MimeTypeDetection.cs @@ -0,0 +1,37 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using System.Runtime.InteropServices; + +namespace ICSharpCode.SharpDevelop +{ + public static class MimeTypeDetection + { + [DllImport("urlmon.dll", CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = false)] + static extern unsafe int FindMimeFromData( + IntPtr pBC, + [MarshalAs(UnmanagedType.LPWStr)] string pwzUrl, + byte* pBuffer, + int cbSize, + [MarshalAs(UnmanagedType.LPWStr)] string pwzMimeProposed, + int dwMimeFlags, + out IntPtr ppwzMimeOut, + int dwReserved); + + public static unsafe string FindMimeType(byte[] buffer) + { + fixed (byte *b = buffer) { + const int FMFD_ENABLEMIMESNIFFING = 0x00000002; + IntPtr mimeout; + int result = FindMimeFromData(IntPtr.Zero, null, b, buffer.Length, null, FMFD_ENABLEMIMESNIFFING, out mimeout, 0); + + if (result != 0) + throw Marshal.GetExceptionForHR(result); + string mime = Marshal.PtrToStringUni(mimeout); + Marshal.FreeCoTaskMem(mimeout); + return mime; + } + } + } +}