public override bool Init() { QSizeF oldSize = Applet().Size; QFileInfo program = new QFileInfo(MainScript()); KMimeType mime = KMimeType.FindByFileContent(program.AbsoluteFilePath()); try { if (mime.Name().StartsWith("text/")) { Compiler c = new Compiler(program); appletAssembly = c.GetAssembly(); } else { appletAssembly = Assembly.LoadFile(program.AbsoluteFilePath()); } } catch (Exception e) { Console.WriteLine(e); Object[] parameters = new Object[2]; parameters[0] = true; parameters[1] = e.ToString(); MethodInfo method = Applet().GetType().GetMethod("SetFailedToLaunch", BindingFlags.Instance | BindingFlags.NonPublic, null, new Type[] { typeof(System.Boolean), typeof(System.String) }, null); method.Invoke(Applet(), parameters); return false; } // the newly loaded assembly might reference other bindings that need to be initialized foreach (AssemblyName an in appletAssembly.GetReferencedAssemblies()) { Assembly a = null; try { a = Assembly.Load(an); } catch (FileNotFoundException e) { a = Assembly.LoadFile(Path.Combine(Path.GetDirectoryName(appletAssembly.Location), an.Name + ".dll")); } // if the binding has already been initialized (e.g. in SmokeInvocation.InitRuntime()), continue. if (SmokeInvocation.InitializedAssemblies.Contains(a)) continue; AssemblySmokeInitializer attr = (AssemblySmokeInitializer) Attribute.GetCustomAttribute(a, typeof(AssemblySmokeInitializer)); if (attr != null) attr.CallInitSmoke(); SmokeInvocation.InitializedAssemblies.Add(a); } string typeName = Camelize(Package().Metadata().PluginName()) + "."; // namespace typeName += Camelize(program.CompleteBaseName()); appletType = appletAssembly.GetType(typeName); if (appletType == null) { foreach (Type t in appletAssembly.GetTypes()) { for (Type tmp = t.BaseType; tmp != null; tmp = tmp.BaseType) { if (tmp == typeof(PlasmaScripting.Applet)) { appletType = t; break; } } if (appletType != null) break; } } applet = (PlasmaScripting.Applet) Activator.CreateInstance(appletType, new object[] { this }); applet.Init(); if (oldSize.Width() > 10 && oldSize.Height() > 10) Applet().Size = oldSize; SetUpEventHandlers(); return true; }
public override bool Init() { QFileInfo program = new QFileInfo(MainScript()); KMimeType mime = KMimeType.FindByFileContent(program.AbsoluteFilePath()); try { if (mime.Name().StartsWith("text/")) { Compiler c = new Compiler(program); dataEngineAssembly = c.GetAssembly(); } else { dataEngineAssembly = Assembly.LoadFile(program.AbsoluteFilePath()); } } catch (Exception e) { Console.WriteLine(e); return false; } // the newly loaded assembly might reference other bindings that need to be initialized foreach (AssemblyName an in dataEngineAssembly.GetReferencedAssemblies()) { Assembly a = null; try { a = Assembly.Load(an); } catch (FileNotFoundException e) { a = Assembly.LoadFile(Path.Combine(Path.GetDirectoryName(dataEngineAssembly.Location), an.Name + ".dll")); } // if the binding has already been initialized (e.g. in SmokeInvocation.InitRuntime()), continue. if (SmokeInvocation.InitializedAssemblies.Contains(a)) continue; AssemblySmokeInitializer attr = (AssemblySmokeInitializer) Attribute.GetCustomAttribute(a, typeof(AssemblySmokeInitializer)); if (attr != null) attr.CallInitSmoke(); SmokeInvocation.InitializedAssemblies.Add(a); } string typeName = Camelize(Package().Metadata().PluginName()) + "."; // namespace typeName += Camelize(program.CompleteBaseName()); dataEngineType = dataEngineAssembly.GetType(typeName); if (dataEngineType == null) { foreach (Type t in dataEngineAssembly.GetTypes()) { for (Type tmp = t.BaseType; tmp != null; tmp = tmp.BaseType) { if (tmp == typeof(PlasmaScripting.DataEngine)) { dataEngineType = t; break; } } if (dataEngineType != null) break; } } dataEngine = (PlasmaScripting.DataEngine) Activator.CreateInstance(dataEngineType, new object[] { this }); dataEngine.Init(); return true; }