Example #1
0
        /// <summary>
        /// Find and instanciate types implementing the CameraManager base class.
        /// </summary>
        public static void LoadCameraManagersPlugins()
        {
            // A camera plugin is a directory under Plugins/Camera with an XML manifest file and an assembly
            // implementing the CameraManager abstract class.
            // To install and uninstall a plugin we add/delete the corresponding folder.
            // This discovery mechanism is duplicated for each instance.
            // This adds only a few milliseconds so we don't keep a cache in preferences.
            string pluginsDirectory = Software.CameraPluginsDirectory;
            List <CameraManagerPluginInfo> plugins = new List <CameraManagerPluginInfo>();
            List <string> directories = Directory.GetDirectories(pluginsDirectory).ToList();

            foreach (string directory in directories)
            {
                string manifest = Path.Combine(directory, "manifest.xml");
                CameraManagerPluginInfo pluginInfo = CameraManagerPluginInfo.Load(manifest);
                if (pluginInfo == null)
                {
                    continue;
                }

                plugins.Add(pluginInfo);
            }

            log.DebugFormat("Loaded camera plugins manifests.");

            // Load all compatible plugins.
            foreach (CameraManagerPluginInfo info in plugins)
            {
                LoadCameraManagerPlugin(pluginsDirectory, info);
            }
        }