CarotDav_decompile/CarotDAV/FsManager.cs

193 lines
7.6 KiB
C#

// Decompiled with JetBrains decompiler
// Type: CarotDAV.FsManager
// Assembly: CarotDAV, Version=1.13.2.18337, Culture=neutral, PublicKeyToken=null
// MVID: C31F2651-A4A8-4D09-916A-8C6106F5E7C8
// Assembly location: F:\Eigene Dateien\Dropbox\portable Collection\Progs\CarotDAV\CarotDAV.exe
using Microsoft.VisualBasic.CompilerServices;
using Rei.Fs;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Reflection;
using System.Windows.Forms;
namespace CarotDAV
{
public class FsManager
{
private static List<System.Type> pFsTypeList = new List<System.Type>();
private static List<FsManager.TypeNamePair> pFsNameTypeList = new List<FsManager.TypeNamePair>();
private static Dictionary<System.Type, string> pFsTypeDllNameDic = new Dictionary<System.Type, string>();
private static List<MethodInfo> pTryCreateMethodInfos = new List<MethodInfo>();
private static Dictionary<System.Type, MethodInfo> pGetDefaultFaviconMethodInfos = new Dictionary<System.Type, MethodInfo>();
private static string pFsBaseDllPath;
public static System.Type[] FsTypes
{
get
{
return FsManager.pFsTypeList.ToArray();
}
}
public static void LoadFs()
{
string[] files = Directory.GetFiles(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "*.dll");
System.Type c = typeof (ConnectionSettingBase);
List<string> stringList = new List<string>();
Assembly executingAssembly = Assembly.GetExecutingAssembly();
System.Type[] types1 = new System.Type[0];
System.Type[] types2 = new System.Type[2]
{
typeof (Uri),
typeof (ConnectionSettingBase).MakeByRefType()
};
System.Type[] types3 = new System.Type[0];
FsManager.pFsBaseDllPath = Assembly.GetAssembly(typeof (FsBase)).Location;
AssemblyName[] referencedAssemblies = executingAssembly.GetReferencedAssemblies();
int index1 = 0;
FsManager.TypeNamePair typeNamePair;
while (index1 < referencedAssemblies.Length)
{
AssemblyName assemblyRef = referencedAssemblies[index1];
try
{
if (assemblyRef.FullName.StartsWith("Rei.Fs."))
{
Assembly assembly = Assembly.Load(assemblyRef);
System.Type[] types4 = assembly.GetTypes();
int index2 = 0;
while (index2 < types4.Length)
{
System.Type key = types4[index2];
if (key.IsClass && key.IsPublic && (!key.IsAbstract && key.IsSubclassOf(c)))
{
PropertyInfo property = key.GetProperty("TypeName", BindingFlags.Static | BindingFlags.Public, (Binder) null, typeof (string), types1, (ParameterModifier[]) null);
if (property != null)
{
string str = (string) property.GetValue((object) null, (object[]) null);
if (str != null && !FsManager.pFsTypeList.Contains(key))
{
FsManager.pFsTypeList.Add(key);
FsManager.pFsTypeDllNameDic.Add(key, assembly.Location);
typeNamePair.Type = key;
typeNamePair.Name = str;
FsManager.pFsNameTypeList.Add(typeNamePair);
MethodInfo method1 = key.GetMethod("TryCreate", BindingFlags.Static | BindingFlags.Public, (Binder) null, types2, (ParameterModifier[]) null);
if (method1 != null && method1.ReturnType == typeof (bool))
FsManager.pTryCreateMethodInfos.Add(method1);
MethodInfo method2 = key.GetMethod("GetDefaultFavicon", BindingFlags.Static | BindingFlags.Public, (Binder) null, types3, (ParameterModifier[]) null);
if (method2 != null && method2.ReturnType == typeof (Icon))
FsManager.pGetDefaultFaviconMethodInfos.Add(key, method2);
}
}
}
checked { ++index2; }
}
}
}
catch (Exception ex)
{
ProjectData.SetProjectError(ex);
ProjectData.ClearProjectError();
}
checked { ++index1; }
}
string[] strArray = files;
int index3 = 0;
while (index3 < strArray.Length)
{
string assemblyFile = strArray[index3];
try
{
Assembly assembly = Assembly.LoadFrom(assemblyFile);
System.Type[] types4 = assembly.GetTypes();
int index2 = 0;
while (index2 < types4.Length)
{
System.Type key = types4[index2];
if (key.IsClass && key.IsPublic && (!key.IsAbstract && key.IsSubclassOf(c)))
{
PropertyInfo property = key.GetProperty("TypeName", BindingFlags.Static | BindingFlags.Public, (Binder) null, typeof (string), types1, (ParameterModifier[]) null);
if (property != null)
{
string str = (string) property.GetValue((object) null, (object[]) null);
if (str != null && !FsManager.pFsTypeList.Contains(key))
{
FsManager.pFsTypeList.Add(key);
FsManager.pFsTypeDllNameDic.Add(key, assembly.Location);
typeNamePair.Type = key;
typeNamePair.Name = str;
FsManager.pFsNameTypeList.Add(typeNamePair);
MethodInfo method1 = key.GetMethod("TryCreate", BindingFlags.Static | BindingFlags.Public, (Binder) null, types2, (ParameterModifier[]) null);
if (method1 != null && method1.ReturnType == typeof (bool))
FsManager.pTryCreateMethodInfos.Add(method1);
MethodInfo method2 = key.GetMethod("GetDefaultFavicon", BindingFlags.Static | BindingFlags.Public, (Binder) null, types3, (ParameterModifier[]) null);
if (method2 != null && method2.ReturnType == typeof (Icon))
FsManager.pGetDefaultFaviconMethodInfos.Add(key, method2);
}
}
}
checked { ++index2; }
}
}
catch (Exception ex)
{
ProjectData.SetProjectError(ex);
ProjectData.ClearProjectError();
}
checked { ++index3; }
}
}
public static FsManager.TypeNamePair[] GetFsNameAndType()
{
return FsManager.pFsNameTypeList.ToArray();
}
public static bool TryCreate(Uri target, ref ConnectionSettingBase c)
{
int num1 = 0;
int num2 = checked (FsManager.pTryCreateMethodInfos.Count - 1);
int index = num1;
while (index <= num2)
{
object[] parameters = new object[2]
{
(object) target,
(object) null
};
if ((bool) FsManager.pTryCreateMethodInfos[index].Invoke((object) null, parameters))
{
c = (ConnectionSettingBase) parameters[1];
return true;
}
checked { ++index; }
}
return false;
}
public static Icon GetDefaultFavicon(System.Type type)
{
if (FsManager.pGetDefaultFaviconMethodInfos.ContainsKey(type))
return (Icon) FsManager.pGetDefaultFaviconMethodInfos[type].Invoke((object) null, (object[]) null);
return ConnectionSettingBase.GetDefaultFavicon();
}
public static string GetDefaultFaviconPath(System.Type type)
{
if (FsManager.pGetDefaultFaviconMethodInfos.ContainsKey(type))
return Path.Combine(Application.StartupPath, FsManager.pFsTypeDllNameDic[type]);
return FsManager.pFsBaseDllPath;
}
public struct TypeNamePair
{
public System.Type Type;
public string Name;
}
}
}