public static void LoadWindowPlugin(string strFile) { if (!IsPlugInEnabled(strFile)) { return; } Log.Info(" Load plugins from : {0}", strFile); try { Assembly assem = Assembly.LoadFrom(strFile); if (assem != null) { Log.Info(" File Version : {0}", FileVersionInfo.GetVersionInfo(strFile).ProductVersion); Type[] types = assem.GetExportedTypes(); if (types.Any(t => t.IsClass && !t.IsAbstract && t.IsSubclassOf(typeof(GUIWindow))) && !CompatibilityManager.IsPluginCompatible(assem)) { Log.Error( "PluginManager: {0} is tagged as incompatible with the current MediaPortal version and won't be loaded!", assem.FullName); _incompatibilities.Add(assem); } else { //MarkPluginAsCompatible(assem); Type[] foundInterfaces = null; foreach (Type t in types) { try { if (t.IsClass) { if (t.IsAbstract) { continue; } Object newObj = null; if (t.IsSubclassOf(typeof(GUIWindow))) { try { if (!CompatibilityManager.IsPluginCompatible(t)) { Log.Error( "PluginManager: {0} is tagged as incompatible with the current MediaPortal version and won't be loaded!", t.FullName); _incompatibilities.Add(t); continue; } newObj = (object)Activator.CreateInstance(t); GUIWindow win = (GUIWindow)newObj; if (win.GetID >= 0 && IsWindowPlugInEnabled(win.GetType().ToString())) { try { win.Init(); _guiPlugins.Add(win); } catch (Exception ex) { Log.Error("Error initializing window:{0} {1} {2} {3}", win.ToString(), ex.Message, ex.Source, ex.StackTrace); } GUIWindowManager.Add(ref win); } //else Log.Info(" plugin:{0} not enabled",win.GetType().ToString()); } catch (Exception guiWindowsException) { Log.Error("Exception while loading GUIWindows instances: {0}", t.FullName); Log.Error(guiWindowsException.Message); Log.Error(guiWindowsException.StackTrace); } } // If we get to this point, the plugin has loaded successfully // Mark it as compatible. //MarkPluginAsCompatible(t); TypeFilter myFilter2 = new TypeFilter(MyInterfaceFilter); try { foundInterfaces = t.FindInterfaces(myFilter2, "MediaPortal.GUI.Library.ISetupForm"); if (foundInterfaces.Length > 0) { if (newObj == null) { newObj = (object)Activator.CreateInstance(t); } ISetupForm setup = (ISetupForm)newObj; if (!PluginEntryExists(setup.PluginName())) { Log.Info("PluginManager: {0} {1} not found in Mediaportal.xml so adding it now", setup.PluginName(), t.Assembly.ManifestModule.Name); AddPluginEntry(setup.PluginName(), t.Assembly.ManifestModule.Name); } if (IsPluginNameEnabled(setup.PluginName())) { _setupForms.Add(setup); } } } catch (Exception iSetupFormException) { Log.Error("Exception while loading ISetupForm instances: {0}", t.FullName); Log.Error(iSetupFormException.Message); Log.Error(iSetupFormException.StackTrace); } try { foundInterfaces = t.FindInterfaces(myFilter2, "MediaPortal.GUI.Library.IWakeable"); if (foundInterfaces.Length > 0) { if (newObj == null) { newObj = (object)Activator.CreateInstance(t); } IWakeable setup = (IWakeable)newObj; if (PluginEntryExists(setup.PluginName()) && IsPluginNameEnabled(setup.PluginName())) { _wakeables.Add(setup); } } } catch (Exception iWakeableException) { Log.Error("Exception while loading IWakeable instances: {0}", t.FullName); Log.Error(iWakeableException.Message); Log.Error(iWakeableException.StackTrace); } } } catch (NullReferenceException) {} } } } } catch (BadImageFormatException) { } catch (Exception ex) { Log.Info( "PluginManager: Plugin file {0} is broken or incompatible with the current MediaPortal version and won't be loaded!", strFile.Substring(strFile.LastIndexOf(@"\") + 1)); Log.Info("PluginManager: Exception: {0}", ex); } }