104 lines
3.6 KiB
C#
104 lines
3.6 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
|
|||
|
namespace DynamicLink
|
|||
|
{
|
|||
|
public static class Modules
|
|||
|
{
|
|||
|
private static bool foundSolution = false;
|
|||
|
|
|||
|
private static List<ModuleInternal> items = new List<ModuleInternal>();
|
|||
|
public static List<ModuleInternal> Items
|
|||
|
{
|
|||
|
get { return items; }
|
|||
|
}
|
|||
|
|
|||
|
#region Useful routines
|
|||
|
public static void RegisterModule(string name, string path, string description = null, System.Drawing.Icon icon = null)
|
|||
|
{
|
|||
|
if (!IsRegistered(name))
|
|||
|
items.Add(new ModuleInternal() { Name = name, Description = description, Path = path, Icon = icon });
|
|||
|
|
|||
|
else if (foundSolution == true)
|
|||
|
{
|
|||
|
int index = 0;
|
|||
|
for (int i = 0; i < items.Count; i++)
|
|||
|
if (items[i].Name == name) index = i;
|
|||
|
|
|||
|
// If new file is an object file, don't allow
|
|||
|
if (path.ToLower().Contains("obj")) return;
|
|||
|
|
|||
|
// If it is an object file, it won't work, replace it
|
|||
|
if (items[index].Path.ToLower().Contains("obj"))
|
|||
|
{
|
|||
|
// Replace
|
|||
|
items[index] = new ModuleInternal() { Name = name, Description = description, Path = path, Icon = icon };
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
// If newer, replace
|
|||
|
DateTime neww = System.IO.File.GetCreationTime(path);
|
|||
|
DateTime old = System.IO.File.GetCreationTime(items[index].Path);
|
|||
|
|
|||
|
if (old < neww)
|
|||
|
items[index] = new ModuleInternal() { Name = name, Description = description, Path = path, Icon = icon };
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static bool IsRegistered(string name)
|
|||
|
{
|
|||
|
var list = items.Where(x => x.Name == name);
|
|||
|
return (list.Count() != 0);
|
|||
|
}
|
|||
|
|
|||
|
public static void ExecuteModule(string name, string args = "")
|
|||
|
{
|
|||
|
var list = items.Where(x => x.Name == name);
|
|||
|
if (list.Count() == 0) return;
|
|||
|
|
|||
|
System.Diagnostics.Process.Start(list.First().Path, args);
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
#region Collect data
|
|||
|
private static string[] CollectData_GetFileList()
|
|||
|
{
|
|||
|
List<string> files = new List<string>();
|
|||
|
|
|||
|
// Try to find files in the current solution
|
|||
|
string dir = System.Reflection.Assembly.GetExecutingAssembly().Location;
|
|||
|
int find = dir.IndexOf("TibisMathematicsSuite\\");
|
|||
|
|
|||
|
// Success
|
|||
|
if (find != -1)
|
|||
|
{
|
|||
|
string temp = dir.Remove(find) + "TibisMathematicsSuite\\";
|
|||
|
files.AddRange (System.IO.Directory.GetFiles(temp, "*.exe", System.IO.SearchOption.AllDirectories));
|
|||
|
|
|||
|
foundSolution = true;
|
|||
|
}
|
|||
|
|
|||
|
// Fail, just add current directory
|
|||
|
else files.AddRange(System.IO.Directory.GetFiles(System.IO.Directory.GetCurrentDirectory(), "*.exe", System.IO.SearchOption.AllDirectories));
|
|||
|
|
|||
|
return files.ToArray();
|
|||
|
}
|
|||
|
|
|||
|
public static void CollectData()
|
|||
|
{
|
|||
|
string[] list = CollectData_GetFileList();
|
|||
|
|
|||
|
foreach (var i in list)
|
|||
|
{
|
|||
|
System.Diagnostics.FileVersionInfo info = System.Diagnostics.FileVersionInfo.GetVersionInfo(i);
|
|||
|
if (info.ProductName == "Tibi's Mathematics Suite")
|
|||
|
RegisterModule(info.FileDescription, i, info.Comments, System.Drawing.Icon.ExtractAssociatedIcon(i));
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
}
|
|||
|
}
|