Ejemplo n.º 1
0
        /// <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();
        }