166 lines
5.2 KiB
C#
166 lines
5.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Reflection;
|
|
using System.Text.RegularExpressions;
|
|
|
|
namespace Gaia
|
|
{
|
|
public class GaiaExtensionManager
|
|
{
|
|
private Dictionary<string, GaiaCompatiblePublisher> m_extensions = new Dictionary<string, GaiaCompatiblePublisher>();
|
|
|
|
public void ScanForExtensions()
|
|
{
|
|
m_extensions.Clear();
|
|
string text = "";
|
|
string text2 = "";
|
|
string packageImageName = "";
|
|
string packageDescription = "";
|
|
string packageURL = "";
|
|
List<Type> typesInNamespace = GetTypesInNamespace("Gaia.GX.");
|
|
for (int i = 0; i < typesInNamespace.Count; i++)
|
|
{
|
|
string[] array = typesInNamespace[i].FullName.Split('.');
|
|
text = Regex.Replace(array[2], "(\\B[A-Z])", " $1");
|
|
text2 = Regex.Replace(array[3], "(\\B[A-Z])", " $1");
|
|
MethodInfo[] methods = typesInNamespace[i].GetMethods(BindingFlags.Static | BindingFlags.Public);
|
|
List<MethodInfo> list = new List<MethodInfo>();
|
|
foreach (MethodInfo methodInfo in methods)
|
|
{
|
|
if (methodInfo.Name.StartsWith("GX_"))
|
|
{
|
|
list.Add(methodInfo);
|
|
}
|
|
else if (methodInfo.Name == "GetPublisherName")
|
|
{
|
|
text = (string)methodInfo.Invoke(null, null);
|
|
}
|
|
else if (methodInfo.Name == "GetPackageName")
|
|
{
|
|
text2 = (string)methodInfo.Invoke(null, null);
|
|
}
|
|
}
|
|
GaiaCompatiblePublisher value = null;
|
|
if (!m_extensions.TryGetValue(text, out value))
|
|
{
|
|
value = new GaiaCompatiblePublisher();
|
|
value.m_publisherName = text;
|
|
value.m_compatibleFoldedOut = false;
|
|
value.m_installedFoldedOut = false;
|
|
m_extensions.Add(text, value);
|
|
}
|
|
GaiaCompatiblePackage gaiaCompatiblePackage = value.GetPackage(text2);
|
|
if (gaiaCompatiblePackage == null)
|
|
{
|
|
gaiaCompatiblePackage = new GaiaCompatiblePackage();
|
|
gaiaCompatiblePackage.m_compatibleFoldedOut = false;
|
|
gaiaCompatiblePackage.m_installedFoldedOut = false;
|
|
gaiaCompatiblePackage.m_packageName = text2;
|
|
value.AddPackage(gaiaCompatiblePackage);
|
|
}
|
|
if (list.Count > 0)
|
|
{
|
|
gaiaCompatiblePackage.m_isInstalled = true;
|
|
}
|
|
else
|
|
{
|
|
gaiaCompatiblePackage.m_isInstalled = false;
|
|
}
|
|
gaiaCompatiblePackage.m_methods = new List<MethodInfo>(list);
|
|
}
|
|
typesInNamespace = GetTypesInNamespace("Gaia.GXC.");
|
|
for (int k = 0; k < typesInNamespace.Count; k++)
|
|
{
|
|
string[] array2 = typesInNamespace[k].FullName.Split('.');
|
|
text = Regex.Replace(array2[2], "(\\B[A-Z])", " $1");
|
|
text2 = Regex.Replace(array2[3], "(\\B[A-Z])", " $1");
|
|
MethodInfo[] methods = typesInNamespace[k].GetMethods(BindingFlags.Static | BindingFlags.Public);
|
|
foreach (MethodInfo methodInfo in methods)
|
|
{
|
|
if (methodInfo.Name == "GetPublisherName")
|
|
{
|
|
text = (string)methodInfo.Invoke(null, null);
|
|
}
|
|
else if (methodInfo.Name == "GetPackageName")
|
|
{
|
|
text2 = (string)methodInfo.Invoke(null, null);
|
|
}
|
|
else if (methodInfo.Name == "GetPackageImage")
|
|
{
|
|
packageImageName = (string)methodInfo.Invoke(null, null);
|
|
}
|
|
else if (methodInfo.Name == "GetPackageDescription")
|
|
{
|
|
packageDescription = (string)methodInfo.Invoke(null, null);
|
|
}
|
|
else if (methodInfo.Name == "GetPackageURL")
|
|
{
|
|
packageURL = (string)methodInfo.Invoke(null, null);
|
|
}
|
|
}
|
|
GaiaCompatiblePublisher value2 = null;
|
|
if (!m_extensions.TryGetValue(text, out value2))
|
|
{
|
|
value2 = new GaiaCompatiblePublisher();
|
|
value2.m_publisherName = text;
|
|
value2.m_compatibleFoldedOut = false;
|
|
value2.m_installedFoldedOut = false;
|
|
m_extensions.Add(text, value2);
|
|
}
|
|
GaiaCompatiblePackage gaiaCompatiblePackage2 = value2.GetPackage(text2);
|
|
if (gaiaCompatiblePackage2 == null)
|
|
{
|
|
gaiaCompatiblePackage2 = new GaiaCompatiblePackage();
|
|
gaiaCompatiblePackage2.m_compatibleFoldedOut = false;
|
|
gaiaCompatiblePackage2.m_installedFoldedOut = false;
|
|
gaiaCompatiblePackage2.m_packageName = text2;
|
|
value2.AddPackage(gaiaCompatiblePackage2);
|
|
}
|
|
gaiaCompatiblePackage2.m_isCompatible = true;
|
|
gaiaCompatiblePackage2.m_packageDescription = packageDescription;
|
|
gaiaCompatiblePackage2.m_packageImageName = packageImageName;
|
|
gaiaCompatiblePackage2.m_packageURL = packageURL;
|
|
}
|
|
}
|
|
|
|
public int GetInstalledExtensionCount()
|
|
{
|
|
int num = 0;
|
|
foreach (GaiaCompatiblePublisher value in m_extensions.Values)
|
|
{
|
|
num += value.InstalledPackages();
|
|
}
|
|
return num;
|
|
}
|
|
|
|
public List<GaiaCompatiblePublisher> GetPublishers()
|
|
{
|
|
List<GaiaCompatiblePublisher> list = new List<GaiaCompatiblePublisher>(m_extensions.Values);
|
|
list.Sort((GaiaCompatiblePublisher a, GaiaCompatiblePublisher b) => a.m_publisherName.CompareTo(b.m_publisherName));
|
|
return list;
|
|
}
|
|
|
|
public List<Type> GetTypesInNamespace(string nameSpace)
|
|
{
|
|
List<Type> list = new List<Type>();
|
|
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
|
|
for (int i = 0; i < assemblies.Length; i++)
|
|
{
|
|
if (!assemblies[i].FullName.StartsWith("Assembly"))
|
|
{
|
|
continue;
|
|
}
|
|
Type[] types = assemblies[i].GetTypes();
|
|
for (int j = 0; j < types.Length; j++)
|
|
{
|
|
if (!string.IsNullOrEmpty(types[j].Namespace) && types[j].Namespace.StartsWith(nameSpace))
|
|
{
|
|
list.Add(types[j]);
|
|
}
|
|
}
|
|
}
|
|
return list;
|
|
}
|
|
}
|
|
}
|