Esempio n. 1
0
 public void OnSceneChanged(Scene prev, Scene next)
 {
     foreach (var plugin in plugins)
     {
         try
         {
             plugin.OnSceneChanged(prev, next);
         }
         catch (Exception e)
         {
             logger.Error($"{e}", plugin.Name);
         }
     }
 }
Esempio n. 2
0
        private static IEnumerable <IPlugin> LoadPluginsFromFile(string file, string exeName, Logging.IPALogger logger)
        {
            List <IPlugin> plugins = new List <IPlugin>();

            if (!File.Exists(file) || !file.EndsWith(".dll", true, null))
            {
                return(plugins);
            }

            try
            {
                Assembly assembly = Assembly.LoadFrom(file);

                foreach (Type t in assembly.GetTypes())
                {
                    if (t.GetInterface("IPlugin") != null)
                    {
                        try
                        {
                            IPlugin  pluginInstance = Activator.CreateInstance(t) as IPlugin;
                            string[] filter         = null;

                            if (pluginInstance is IEnhancedPlugin)
                            {
                                filter = ((IEnhancedPlugin)pluginInstance).Filter;
                            }

                            if (filter == null || Enumerable.Contains(filter, exeName, StringComparer.OrdinalIgnoreCase))
                            {
                                plugins.Add(pluginInstance);
                            }
                        }
                        catch (Exception e)
                        {
                            logger.Warning($"Could not load plugin {t.FullName} in {Path.GetFileName(file)}. {e}", "IPA");
                        }
                    }
                }
            }
            catch (Exception e)
            {
                logger.Error($"Could not load {Path.GetFileName(file)}. {e}", "IPA");
            }

            return(plugins);
        }