コード例 #1
0
        private static void LoadPlugin(PluginInfo pi, IForwardDestinationHandler ifdh)
        {
            try
            {
                // load if not already loaded
                if (ifdh == null)
                {
                    PluginFinder pf = new PluginFinder();
                    ifdh = pf.Load <IForwardDestinationHandler>(pi, ignoreList);
                }

                if (ifdh != null)
                {
                    // for the 'path' value, we still want to use the userprofile directory no matter where the plugin was loaded from
                    // the reason is that the 'path' is where plugin settings will be saved, so it needs to be user writable and user-specific
                    string path = Path.Combine(userForwarderDirectory, Growl.CoreLibrary.PathUtility.GetSafeFolderName(ifdh.Name));

                    // check to make sure this plugin was not loaded from another directory already
                    if (!loadedPlugins.ContainsKey(path))
                    {
                        loadedPlugins.Add(pi.FolderPath, pi);
                        if (!loadedPlugins.ContainsKey(path))
                        {
                            loadedPlugins.Add(path, pi);                                   // link by the settings path as well so we can detect duplicate plugins in other folders
                        }
                        loadedPluginsList.Add(pi);

                        LoadInternal(ifdh, pi.FolderPath, path);
                    }
                    else
                    {
                        // plugin was not valid
                        Utility.WriteDebugInfo(String.Format("Forwarder not loaded: '{0}' - Duplicate plugin was already loaded from another folder", pi.FolderPath));
                    }
                }
                else
                {
                    // plugin was not valid
                    Utility.WriteDebugInfo(String.Format("Forwarder not loaded: '{0}' - Does not implement IForwardDestinationHandler interface", pi.FolderPath));
                }
            }
            catch (Exception ex)
            {
                // suppress any per-plugin loading exceptions
                Utility.WriteDebugInfo(String.Format("Forwarder failed to load: '{0}' - {1} - {2}", pi.FolderPath, ex.Message, ex.StackTrace));
            }
        }
コード例 #2
0
        private static void LoadFolder(string folder)
        {
            try
            {
                if (!loadedPlugins.ContainsKey(folder))
                {
                    PluginFinder pf = new PluginFinder();
                    IForwardDestinationHandler plugin = pf.Search <IForwardDestinationHandler>(folder, CheckType, ignoreList);
                    if (plugin != null)
                    {
                        Type       type = plugin.GetType();
                        PluginInfo pi   = new PluginInfo(folder, type);

                        LoadPlugin(pi, plugin);
                    }
                }
            }
            catch (Exception ex)
            {
                // suppress any per-plugin loading exceptions
                Utility.WriteDebugInfo(String.Format("Plugin failed to load: '{0}' - {1} - {2}", folder, ex.Message, ex.StackTrace));
            }
        }