CarotDav_decompile/Rei.Com/DataObjectHelper.cs

284 lines
13 KiB
C#

// Decompiled with JetBrains decompiler
// Type: Rei.Com.DataObjectHelper
// Assembly: Rei.Com, Version=1.13.2.9255, Culture=neutral, PublicKeyToken=null
// MVID: 608BC623-FF3D-4118-BA82-AC691A688790
// Assembly location: F:\Eigene Dateien\Dropbox\portable Collection\Progs\CarotDAV\Rei.Com.dll
using Microsoft.VisualBasic.CompilerServices;
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using System.Text;
using System.Windows.Forms;
namespace Rei.Com
{
public class DataObjectHelper
{
public static VirtualFileInfo[] GetVirtualFileInfo(System.Windows.Forms.IDataObject dobj)
{
IntPtr zero = IntPtr.Zero;
List<VirtualFileInfo> virtualFileInfoList = new List<VirtualFileInfo>();
using (MemoryStream data = (MemoryStream) dobj.GetData("FileGroupDescriptorW"))
{
if (data == null)
return new VirtualFileInfo[0];
byte[] numArray1 = new byte[checked ((int) (data.Length - 1L) + 1)];
data.Read(numArray1, 0, numArray1.Length);
int int32 = BitConverter.ToInt32(numArray1, 0);
IntPtr num1 = Marshal.AllocHGlobal(numArray1.Length);
try
{
Marshal.Copy(numArray1, 0, num1, numArray1.Length);
IntPtr ptr = new IntPtr(checked (num1.ToInt64() + (long) Marshal.SizeOf((object) int32)));
int num2 = 0;
int num3 = checked (int32 - 1);
int num4 = num2;
while (num4 <= num3)
{
object structure = Marshal.PtrToStructure(ptr, typeof (FileDescriptor));
FileDescriptor fileDescriptor1;
FileDescriptor fileDescriptor2 = structure != null ? (FileDescriptor) structure : fileDescriptor1;
VirtualFileInfo virtualFileInfo = new VirtualFileInfo();
virtualFileInfo.FileName = fileDescriptor2.cFileName;
virtualFileInfo.Flags = fileDescriptor2.dwFlags;
if ((fileDescriptor2.dwFlags & FDFlags.FD_CLSID) == (FDFlags) 0)
;
if ((fileDescriptor2.dwFlags & FDFlags.FD_SIZEPOINT) == (FDFlags) 0)
;
if ((fileDescriptor2.dwFlags & FDFlags.FD_ATTRIBUTES) != (FDFlags) 0)
virtualFileInfo.FileAttributes = fileDescriptor2.dwFileAttributes;
if ((fileDescriptor2.dwFlags & FDFlags.FD_CREATETIME) != (FDFlags) 0)
virtualFileInfo.CreationTime = DateTime.FromFileTime(fileDescriptor2.ftCreationTime);
if ((fileDescriptor2.dwFlags & FDFlags.FD_ACCESSTIME) != (FDFlags) 0)
virtualFileInfo.LastAccessTime = DateTime.FromFileTime(fileDescriptor2.ftLastAccessTime);
if ((fileDescriptor2.dwFlags & FDFlags.FD_WRITESTIME) != (FDFlags) 0)
virtualFileInfo.LastWriteTime = DateTime.FromFileTime(fileDescriptor2.ftLastWriteTime);
if ((fileDescriptor2.dwFlags & FDFlags.FD_FILESIZE) != (FDFlags) 0)
virtualFileInfo.FileSize = fileDescriptor2.FileSize;
FORMATETC format = new FORMATETC();
format.cfFormat = BitConverter.ToInt16(BitConverter.GetBytes(DataFormats.GetFormat("FileContents").Id), 0);
format.dwAspect = DVASPECT.DVASPECT_CONTENT;
format.lindex = num4;
format.ptd = IntPtr.Zero;
format.tymed = TYMED.TYMED_HGLOBAL | TYMED.TYMED_ISTREAM;
STGMEDIUM medium = new STGMEDIUM();
try
{
((System.Runtime.InteropServices.ComTypes.IDataObject) dobj).GetData(ref format, out medium);
}
catch (Exception ex)
{
ProjectData.SetProjectError(ex);
virtualFileInfo.FileAttributes = virtualFileInfo.FileAttributes | FileAttributes.System;
ProjectData.ClearProjectError();
}
if (medium.tymed == TYMED.TYMED_HGLOBAL)
{
IntPtr unionmember = medium.unionmember;
if (unionmember == IntPtr.Zero)
return (VirtualFileInfo[]) null;
int length = DataObject.GlobalSize(unionmember);
byte[] numArray2 = new byte[checked (length - 1 + 1)];
Marshal.Copy(unionmember, numArray2, 0, length);
virtualFileInfo.ManageStream = (Stream) new MemoryStream(numArray2);
}
else
{
if (medium.tymed == TYMED.TYMED_ISTORAGE)
throw new Exception("doesn't support IStorage");
if (medium.tymed == TYMED.TYMED_ISTREAM)
{
System.Runtime.InteropServices.ComTypes.IStream objectForIunknown = (System.Runtime.InteropServices.ComTypes.IStream) Marshal.GetObjectForIUnknown(medium.unionmember);
Marshal.Release(medium.unionmember);
virtualFileInfo.ManageStream = (Stream) new ComStreamAdapterStream(objectForIunknown);
}
}
if (virtualFileInfo.ManageStream == null)
virtualFileInfo.ManageStream = (Stream) new MemoryStream();
virtualFileInfoList.Add(virtualFileInfo);
ptr = new IntPtr(checked (ptr.ToInt64() + (long) Marshal.SizeOf((object) fileDescriptor2)));
checked { ++num4; }
}
}
finally
{
Marshal.FreeHGlobal(num1);
}
}
return virtualFileInfoList.ToArray();
}
public static DragDropEffects GetPreferredDragEffect(System.Windows.Forms.IDataObject dataobject)
{
DragDropEffects dragDropEffects = DragDropEffects.None;
if (dataobject.GetDataPresent(ShellClipboardFormats.PreferredDropEffect))
{
MemoryStream data = dataobject.GetData(ShellClipboardFormats.PreferredDropEffect) as MemoryStream;
try
{
if (data != null)
{
byte[] buffer = new byte[4];
data.Read(buffer, 0, 4);
data.Dispose();
dragDropEffects = (DragDropEffects) BitConverter.ToInt32(buffer, 0);
}
}
finally
{
if (data != null)
data.Dispose();
}
}
return dragDropEffects;
}
public static Uri GetUniformResourceLocator(System.Windows.Forms.IDataObject dataobject)
{
Uri result = (Uri) null;
string uriString;
if (dataobject.GetDataPresent(ShellClipboardFormats.UniformResourceLocatorW))
{
MemoryStream data = dataobject.GetData(ShellClipboardFormats.UniformResourceLocatorW) as MemoryStream;
if (data != null)
{
using (StreamReader streamReader = new StreamReader((Stream) data, Encoding.Unicode))
uriString = streamReader.ReadToEnd();
int length = uriString.IndexOf(char.MinValue);
if (length >= 0)
uriString = uriString.Substring(0, length);
if (Uri.TryCreate(uriString, UriKind.Absolute, out result))
return result;
}
}
if (dataobject.GetDataPresent(ShellClipboardFormats.UniformResourceLocator))
{
MemoryStream data = dataobject.GetData(ShellClipboardFormats.UniformResourceLocator) as MemoryStream;
if (data != null)
{
using (StreamReader streamReader = new StreamReader((Stream) data, Encoding.Default))
uriString = streamReader.ReadToEnd();
int length = uriString.IndexOf(char.MinValue);
if (length >= 0)
uriString = uriString.Substring(0, length);
if (Uri.TryCreate(uriString, UriKind.Absolute, out result))
return result;
}
}
return (Uri) null;
}
public static void SetPerformedDragEffect(System.Windows.Forms.IDataObject dataobject, DragDropEffects effect)
{
System.Runtime.InteropServices.ComTypes.IDataObject dataObject = dataobject as System.Runtime.InteropServices.ComTypes.IDataObject;
if (dataObject == null)
return;
FORMATETC formatIn;
formatIn.cfFormat = DataObject.MakecfFormat(ShellClipboardFormats.PerformedDropEffect);
formatIn.dwAspect = DVASPECT.DVASPECT_CONTENT;
formatIn.lindex = -1;
formatIn.ptd = new IntPtr();
formatIn.tymed = TYMED.TYMED_HGLOBAL;
STGMEDIUM medium;
medium.tymed = TYMED.TYMED_HGLOBAL;
medium.pUnkForRelease = (object) null;
medium.unionmember = Marshal.AllocHGlobal(4);
Marshal.WriteInt32(medium.unionmember, 0, (int) effect);
dataObject.SetData(ref formatIn, ref medium, true);
}
public static void SetLogicalPerformedDragEffect(System.Windows.Forms.IDataObject dataobject, DragDropEffects effect)
{
System.Runtime.InteropServices.ComTypes.IDataObject dataObject = dataobject as System.Runtime.InteropServices.ComTypes.IDataObject;
if (dataObject == null)
return;
FORMATETC formatIn;
formatIn.cfFormat = DataObject.MakecfFormat(ShellClipboardFormats.LogicalPerformedDropEffect);
formatIn.dwAspect = DVASPECT.DVASPECT_CONTENT;
formatIn.lindex = -1;
formatIn.ptd = new IntPtr();
formatIn.tymed = TYMED.TYMED_HGLOBAL;
STGMEDIUM medium;
medium.tymed = TYMED.TYMED_HGLOBAL;
medium.pUnkForRelease = (object) null;
medium.unionmember = Marshal.AllocHGlobal(4);
Marshal.WriteInt32(medium.unionmember, 0, (int) effect);
dataObject.SetData(ref formatIn, ref medium, true);
}
public static void SetPasteSucceeded(System.Windows.Forms.IDataObject dataobject, DragDropEffects effect)
{
System.Runtime.InteropServices.ComTypes.IDataObject dataObject = dataobject as System.Runtime.InteropServices.ComTypes.IDataObject;
if (dataObject == null)
return;
FORMATETC formatIn;
formatIn.cfFormat = DataObject.MakecfFormat(ShellClipboardFormats.PasteSucceeded);
formatIn.dwAspect = DVASPECT.DVASPECT_CONTENT;
formatIn.lindex = -1;
formatIn.ptd = new IntPtr();
formatIn.tymed = TYMED.TYMED_HGLOBAL;
STGMEDIUM medium;
medium.tymed = TYMED.TYMED_HGLOBAL;
medium.pUnkForRelease = (object) null;
medium.unionmember = Marshal.AllocHGlobal(4);
Marshal.WriteInt32(medium.unionmember, 0, (int) effect);
dataObject.SetData(ref formatIn, ref medium, true);
}
public static bool CanAsync(System.Windows.Forms.IDataObject dobj)
{
object objectValue1 = RuntimeHelpers.GetObjectValue(typeof (System.Windows.Forms.DataObject).GetField("innerData", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).GetValue((object) dobj));
IAsyncOperation objectValue2 = RuntimeHelpers.GetObjectValue(objectValue1.GetType().GetField("innerData", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).GetValue(RuntimeHelpers.GetObjectValue(objectValue1))) as IAsyncOperation;
if (objectValue2 == null)
return false;
bool pfIsOpAsync;
objectValue2.GetAsyncMode(out pfIsOpAsync);
return pfIsOpAsync;
}
public static void SetAsyncMode(System.Windows.Forms.IDataObject dobj, bool r)
{
object objectValue1 = RuntimeHelpers.GetObjectValue(typeof (System.Windows.Forms.DataObject).GetField("innerData", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).GetValue((object) dobj));
IAsyncOperation objectValue2 = RuntimeHelpers.GetObjectValue(objectValue1.GetType().GetField("innerData", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).GetValue(RuntimeHelpers.GetObjectValue(objectValue1))) as IAsyncOperation;
if (objectValue2 == null)
return;
objectValue2.SetAsyncMode(r);
}
public static bool StartAsyncOperation(System.Windows.Forms.IDataObject dobj)
{
object objectValue1 = RuntimeHelpers.GetObjectValue(typeof (System.Windows.Forms.DataObject).GetField("innerData", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).GetValue((object) dobj));
IAsyncOperation objectValue2 = RuntimeHelpers.GetObjectValue(objectValue1.GetType().GetField("innerData", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).GetValue(RuntimeHelpers.GetObjectValue(objectValue1))) as IAsyncOperation;
if (objectValue2 != null)
{
bool pfIsOpAsync = false;
objectValue2.GetAsyncMode(out pfIsOpAsync);
if (pfIsOpAsync)
{
objectValue2.StartOperation(IntPtr.Zero);
return true;
}
}
return false;
}
public static void EndAsyncOperation(System.Windows.Forms.IDataObject dobj, DragDropEffects dwEffect)
{
object objectValue1 = RuntimeHelpers.GetObjectValue(typeof (System.Windows.Forms.DataObject).GetField("innerData", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).GetValue((object) dobj));
IAsyncOperation objectValue2 = RuntimeHelpers.GetObjectValue(objectValue1.GetType().GetField("innerData", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).GetValue(RuntimeHelpers.GetObjectValue(objectValue1))) as IAsyncOperation;
if (objectValue2 == null)
return;
bool pfIsOpAsync = false;
objectValue2.GetAsyncMode(out pfIsOpAsync);
if (!pfIsOpAsync)
return;
objectValue2.EndOperation(IntPtr.Zero, IntPtr.Zero, (int) dwEffect);
}
}
}