예제 #1
0
        internal static void DoStep(PipMod.Step step, Assembly assembly)
        {
            var methods = GetStepHandlersFor(assembly, step);

            if (methods.Count > 0)
            {
                Logger.Verbose("{0}: {1}", step.ToString().ToUpper(), assembly.FullName);
                foreach (var method in methods)
                {
                    try
                    {
                        Logger.Debug("Invoking step handler in: {0}", method.DeclaringType.FullName);
                        var args = method.GetParameters();
                        if (args.Length == 1 && typeof(IPipMod).IsAssignableFrom(args[0].ParameterType))
                        {
                            method.Invoke(null, new object[] { GetModForAssembly(assembly) });
                        }
                        else if (args.Length == 1 && typeof(Assembly).IsAssignableFrom(args[0].ParameterType))
                        {
                            method.Invoke(null, new object[] { assembly });
                        }
                        else
                        {
                            method.Invoke(null, new object[0]);
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Error("Failed running {0} for '{1}' at {2}.{3}:", step.ToString().ToUpper(), assembly.FullName, method.DeclaringType.FullName, method.Name);
                        Logger.Log(ex);
                        // ModHadError(mod, step);
                    }
                }
            }
        }
예제 #2
0
 internal static void DoStep(PipMod.Step step)
 {
     foreach (var(isPipMod, assembly) in assemblies)
     {
         DoStep(step, assembly);
     }
 }
예제 #3
0
        private static List <MethodInfo> GetStepHandlersFor(Assembly assembly, PipMod.Step step)
        {
            var handlersForAssembly = GetStepHandlersFor(assembly);

            if (!handlersForAssembly.TryGetValue(step, out var methods))
            {
                methods = new List <MethodInfo>();
                handlersForAssembly.Add(step, methods);
            }
            return(methods);
        }
예제 #4
0
 internal static void ModHadError(IPipMod mod, PipMod.Step step)
 {
     /* var kmod = GetKMod(mod);
      * if (kmod.label.distribution_platform != KMod.Label.DistributionPlatform.Dev && kmod.label.distribution_platform != KMod.Label.DistributionPlatform.Local)
      * {
      *  kmod.status = KMod.Mod.Status.ReinstallPending;
      * }
      * Logger.Debug(kmod.status.ToString());
      * KMod.Manager.Dialog(
      *  title: STRINGS.UI.FRONTEND.MOD_DIALOGS.STEP_FAILURE.TITLE,
      *  text: string.Format(STRINGS.UI.FRONTEND.MOD_DIALOGS.STEP_FAILURE.MESSAGE, step.ToString().ToUpper(), mod.Name),
      *  confirm_text: global::STRINGS.UI.FRONTEND.MOD_DIALOGS.RESTART.OK,
      *  on_confirm: App.instance.Restart,
      *  cancel_text: global::STRINGS.UI.FRONTEND.MOD_DIALOGS.RESTART.CANCEL,
      *  on_cancel: PLUtil.NOOP,
      *  activateBlackBackground: true
      * ); */
 }
예제 #5
0
 private static List <MethodInfo> GetStepHandlersFor(IPipMod mod, PipMod.Step step)
 {
     return(GetStepHandlersFor(mod.GetType().Assembly, step));
 }
예제 #6
0
 internal static void DoStep(PipMod.Step step, IPipMod mod)
 {
     DoStep(step, mod.GetType().Assembly);
 }