diff options
Diffstat (limited to 'libdino/src/plugin.vala')
-rw-r--r-- | libdino/src/plugin.vala | 64 |
1 files changed, 0 insertions, 64 deletions
diff --git a/libdino/src/plugin.vala b/libdino/src/plugin.vala deleted file mode 100644 index 60a99bc2..00000000 --- a/libdino/src/plugin.vala +++ /dev/null @@ -1,64 +0,0 @@ -namespace Dino { - -public errordomain PluginError { - NOT_SUPPORTED, - UNEXPECTED_TYPE, - NO_REGISTRATION_FUNCTION, - FAILED -} - -public interface PluginIface : Object { - public abstract void registered(Dino.Ui.Application app); -} - -private class PluginInfo : Object { - public Module module; - public Type gtype; - - public PluginInfo(Type type, owned Module module) { - this.module = (owned) module; - this.gtype = type; - } -} - -public class PluginLoader : Object { - [CCode (has_target = false)] - private delegate Type RegisterPluginFunction (Module module); - - private PluginIface[] plugins = new PluginIface[0]; - private PluginInfo[] infos = new PluginInfo[0]; - - public PluginIface load(string name, Dino.Ui.Application app) throws PluginError { - if (Module.supported () == false) { - throw new PluginError.NOT_SUPPORTED ("Plugins are not supported"); - } - - Module module = Module.open ("plugins/" + name, ModuleFlags.BIND_LAZY); - if (module == null) { - throw new PluginError.FAILED (Module.error ()); - } - - void* function; - module.symbol ("register_plugin", out function); - if (function == null) { - throw new PluginError.NO_REGISTRATION_FUNCTION ("register_plugin () not found"); - } - - RegisterPluginFunction register_plugin = (RegisterPluginFunction) function; - Type type = register_plugin (module); - if (type.is_a (typeof (PluginIface)) == false) { - throw new PluginError.UNEXPECTED_TYPE ("Unexpected type"); - } - - PluginInfo info = new PluginInfo (type, (owned) module); - infos += info; - - PluginIface plugin = (PluginIface) Object.new (type); - plugins += plugin; - plugin.registered (app); - - return plugin; - } -} - -}
\ No newline at end of file |