Search in sources :

Example 1 with Plugin

use of com.biglybt.pif.Plugin in project BiglyBT by BiglySoftware.

the class PluginLauncherImpl method findLaunchablePlugins.

private static LaunchablePlugin[] findLaunchablePlugins(LoggerChannelListener listener) {
    // CAREFUL - this is called BEFORE any AZ initialisation has been performed and must
    // therefore NOT use anything that relies on this (such as logging, debug....)
    List res = new ArrayList();
    File app_dir = getApplicationFile("plugins");
    if (!(app_dir.exists()) && app_dir.isDirectory()) {
        listener.messageLogged(LoggerChannel.LT_ERROR, "Application dir '" + app_dir + "' not found");
        return (new LaunchablePlugin[0]);
    }
    File[] plugins = app_dir.listFiles();
    if (plugins == null || plugins.length == 0) {
        listener.messageLogged(LoggerChannel.LT_ERROR, "Application dir '" + app_dir + "' empty");
        return (new LaunchablePlugin[0]);
    }
    for (int i = 0; i < plugins.length; i++) {
        File plugin_dir = plugins[i];
        if (!plugin_dir.isDirectory()) {
            continue;
        }
        try {
            ClassLoader classLoader = PluginLauncherImpl.class.getClassLoader();
            ClassLoader root_cl = classLoader;
            File[] contents = plugin_dir.listFiles();
            if (contents == null || contents.length == 0) {
                continue;
            }
            // take only the highest version numbers of jars that look versioned
            String[] plugin_version = { null };
            String[] plugin_id = { null };
            contents = getHighestJarVersions(contents, plugin_version, plugin_id, true);
            for (int j = 0; j < contents.length; j++) {
                classLoader = addFileToClassPath(root_cl, classLoader, contents[j]);
            }
            Properties props = new Properties();
            File properties_file = FileUtil.newFile(plugin_dir, "plugin.properties");
            if (properties_file.exists()) {
                FileInputStream fis = null;
                try {
                    fis = FileUtil.newFileInputStream(properties_file);
                    props.load(fis);
                } finally {
                    if (fis != null) {
                        fis.close();
                    }
                }
            } else {
                if (classLoader instanceof URLClassLoader) {
                    URLClassLoader current = (URLClassLoader) classLoader;
                    URL url = current.findResource("plugin.properties");
                    if (url != null) {
                        props.load(url.openStream());
                    }
                }
            }
            String plugin_class = (String) props.get("plugin.class");
            if (plugin_class == null || plugin_class.indexOf(';') != -1) {
                continue;
            }
            Class c = classLoader.loadClass(plugin_class);
            Plugin plugin = (Plugin) c.newInstance();
            if (plugin instanceof LaunchablePlugin) {
                preloaded_plugins.put(plugin_class, plugin);
                res.add(plugin);
            }
        } catch (Throwable e) {
            listener.messageLogged("Load of plugin in '" + plugin_dir + "' fails", e);
        }
    }
    LaunchablePlugin[] x = new LaunchablePlugin[res.size()];
    res.toArray(x);
    return (x);
}
Also used : SystemProperties(com.biglybt.core.util.SystemProperties) URL(java.net.URL) URLClassLoader(java.net.URLClassLoader) URLClassLoader(java.net.URLClassLoader) LaunchablePlugin(com.biglybt.pif.LaunchablePlugin) Plugin(com.biglybt.pif.Plugin) LaunchablePlugin(com.biglybt.pif.LaunchablePlugin)

Example 2 with Plugin

use of com.biglybt.pif.Plugin in project BiglyBT by BiglySoftware.

the class PlatformManagerPluginDelegate method initialize.

// @see com.biglybt.pif.Plugin#initialize(com.biglybt.pif.PluginInterface)
@Override
public void initialize(PluginInterface pluginInterface) throws PluginException {
    try {
        PlatformManager platform = PlatformManagerFactory.getPlatformManager();
        int platformType = platform.getPlatformType();
        if (platformType == PlatformManager.PT_WINDOWS) {
            Plugin plugin = (Plugin) Class.forName("com.biglybt.platform.win32.PlatformManagerUpdateChecker").newInstance();
            plugin.initialize(pluginInterface);
        } else if (platformType == PlatformManager.PT_MACOSX) {
            Plugin plugin = (Plugin) Class.forName("com.biglybt.platform.macosx.PlatformManagerUpdateChecker").newInstance();
            plugin.initialize(pluginInterface);
        } else if (platformType == PlatformManager.PT_UNIX) {
            Plugin plugin = (Plugin) Class.forName("com.biglybt.platform.unix.PlatformManagerUnixPlugin").newInstance();
            plugin.initialize(pluginInterface);
        } else {
            Properties pluginProperties = pluginInterface.getPluginProperties();
            pluginProperties.setProperty("plugin.name", "Platform-Specific Support");
            pluginProperties.setProperty("plugin.version", "1.0");
            pluginProperties.setProperty("plugin.version.info", "Not required for this platform");
        }
    } catch (PluginException t) {
        throw t;
    } catch (Throwable t) {
        throw new PluginException(t);
    }
}
Also used : PluginException(com.biglybt.pif.PluginException) Properties(java.util.Properties) Plugin(com.biglybt.pif.Plugin)

Aggregations

Plugin (com.biglybt.pif.Plugin)2 SystemProperties (com.biglybt.core.util.SystemProperties)1 LaunchablePlugin (com.biglybt.pif.LaunchablePlugin)1 PluginException (com.biglybt.pif.PluginException)1 URL (java.net.URL)1 URLClassLoader (java.net.URLClassLoader)1 Properties (java.util.Properties)1