/// <summary> /// Initializes the Plugin System. /// </summary> /// <param name="internalConfigPath">The Path that is used by internal config files by the Plugin System</param> /// <param name="pluginDirectory">The Path used as "Install Directory" for Plugins/Packages</param> public static void Initialize( string internalConfigPath, string pluginDirectory, Func <string, string, bool> updateDialog, Action <string, int, int> setStatus, string staticDataConfig = null, bool checkUpdates = true) { if (IsInitialized) { throw new Exception("Can not Initialize the Plugin System Twice"); } SendLog("Initializing Plugin System"); //TODO: Process Things like updates before the plugin system loads the libraries. PluginPaths.InternalSystemConfigPath = Path.GetFullPath(internalConfigPath); PluginPaths.PluginDirectory = Path.GetFullPath(pluginDirectory); PluginPaths.EnsureInternalDirectoriesExist(); PluginPaths.CreateInternalFilesIfMissing(); ErrorHandler.Initialize(); LoadOrder.Initialize(); if (staticDataConfig != null && File.Exists(staticDataConfig)) { StaticData.SetState(File.ReadAllText(staticDataConfig)); } IsInitialized = true; SendLog("Updating.."); PluginHost = new PluginSystemHost(); HelperClass.ReloadDefaultPlugins(); OnInitialized?.Invoke(); if (File.Exists(PluginPaths.InternalStartupInstructionPath)) { SendLog("Running Start Actions.."); ActionRunner.RunActions(); } if (checkUpdates) { ListHelper.LoadList(PluginPaths.PluginListFile).Select(x => new BasePluginPointer(x)).ToList() .ForEach(x => UpdateManager.CheckAndUpdate(x, updateDialog, setStatus)); } SendLog("Registering System Host.."); LoadPlugins(PluginHost); SendLog("Registered System Host.."); SendLogDivider(); //Everything Finished SendLog("Initialization Complete."); SendLogDivider(); }