Пример #1
0
        public List <PossiblyPluginFileInfo> GetAllPluginFiles()
        {
            var arAllPlugins = new List <PossiblyPluginFileInfo>();
            var pluginnames  = new HashSet <string>();

            // Discover plugin files, skip disabled
            foreach (PluginFolder folder in PluginFolders)
            {
                foreach (PossiblyPluginFileInfo file in folder.GetPluginFiles())
                {
                    // Higher priority goes first, ignore subsequent duplicates (applies to plugins only)
                    // Non-plugins are always added
                    if ((!file.IsPlugin) || (pluginnames.Add(Path.GetFileNameWithoutExtension(file.File.FullName))))
                    {
                        arAllPlugins.Add(file);
                    }
                    else
                    {
                        // Duplicate
                        PossiblyPluginFileInfo fileNot = PossiblyPluginFileInfo.CreateNo(file.Folder, file.File, "There was another plugin with the same assembly name in the same or a higher-priority folder.");
                        arAllPlugins.Add(fileNot);
                        Trace.WriteLine(fileNot.ToString(), "Plugin.Loader");
                    }
                }
            }
            return(arAllPlugins);
        }
Пример #2
0
            public IEnumerable <PossiblyPluginFileInfo> GetPluginFiles()
            {
                if (!Directory.Exists)
                {
                    return new PossiblyPluginFileInfo[] {}
                }
                ;

                // List of folders to check
                var directories = new List <DirectoryInfo> {
                    Directory
                };

                // In non-primary folders, also check subfolders: complex plugins might not want to mix their files up with others
                if (!IsPrimary)
                {
                    foreach (DirectoryInfo directory in Directory.GetDirectories())
                    {
                        if ((directory.Attributes & FileAttributes.Hidden) == 0)
                        {
                            directories.Add(directory);
                        }
                    }
                }

                var files = new List <PossiblyPluginFileInfo>();
                PossiblyPluginFileInfo pluginfileinfo;

                // Look for the regex-matching files
                foreach (DirectoryInfo directory in directories)
                {
                    foreach (FileInfo file in directory.GetFiles())
                    {
                        if (!_arPluginAssemblyExtensions.Contains(file.Extension.Trim('.')))
                        {
                            // Note: do not report such items at all, to avoid noise
                            Trace.WriteLine(PossiblyPluginFileInfo.CreateNo(this, file, "File extension mismatch, assembly expected."), "Plugin.Loader");
                            continue;
                        }
                        if ((file.Attributes & FileAttributes.Hidden) != 0)                        // Skip hidden files
                        {
                            pluginfileinfo = PossiblyPluginFileInfo.CreateNo(this, file, "The file is hidden.");
                        }
                        else if (!RegexOmeaPluginFile.IsMatch(file.Name))                        // Apply file name filter
                        {
                            pluginfileinfo = PossiblyPluginFileInfo.CreateNo(this, file, "The file name does not include “OmeaPlugin”.");
                        }
                        else
                        {
                            pluginfileinfo = PossiblyPluginFileInfo.CreateYes(this, file);
                        }

                        // Note: here we do not check for IPlugin types and such, as it will cause loading the DLLs without the progress (we don't know the total count yet)

                        // Pick
                        files.Add(pluginfileinfo);
                        Trace.WriteLine(pluginfileinfo.ToString(), "Plugin.Loader");
                    }
                }

                return(files);
            }