⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plugininitializer.java

📁 java 文件下载器。可自定义
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
				Object x[] = (Object[])(Object[])entry;
				Plugin plugin = (Plugin)x[0];
				cla = plugin.getClass();
				id = (String)x[1];
			}
			try
			{
				Method load_method = cla.getMethod("load", new Class[] {
					org/gudy/azureus2/plugins/PluginInterface
				});
				load_method.invoke(null, new Object[] {
					getDefaultInterfaceSupport()
				});
				continue;
			}
			catch (NoSuchMethodException e)
			{
				continue;
			}
			catch (Throwable e)
			{
				Debug.printStackTrace(e);
				Logger.log(new LogAlert(false, (new StringBuilder()).append("Load of dynamic plugin '").append(id).append("' fails").toString(), e));
				i++;
			}
		}

		return pluginLoaded;
	}

	private void getRootClassLoader()
	{
		File user_dir = FileUtil.getUserFile("shared");
		getRootClassLoader(user_dir);
		File app_dir = FileUtil.getApplicationFile("shared");
		if (!user_dir.equals(app_dir))
			getRootClassLoader(app_dir);
	}

	private void getRootClassLoader(File dir)
	{
		dir = new File(dir, "lib");
		if (dir.exists() && dir.isDirectory())
		{
			File files[] = dir.listFiles();
			if (files != null)
			{
				files = PluginLauncherImpl.getHighestJarVersions(files, new String[] {
					null
				}, new String[] {
					null
				}, false);
				for (int i = 0; i < files.length; i++)
				{
					if (Logger.isEnabled())
						Logger.log(new LogEvent(LOGID, (new StringBuilder()).append("Share class loader extended by ").append(files[i].toString()).toString()));
					root_class_loader = PluginLauncherImpl.addFileToClassPath(org/gudy/azureus2/pluginsimpl/local/PluginInitializer.getClassLoader(), root_class_loader, files[i]);
				}

			}
		}
	}

	private List loadPluginsFromDir(File pluginDirectory, int plugin_offset, int plugin_total, boolean bSkipAlreadyLoaded, boolean loading_for_startup, boolean initialise)
	{
		List dirLoadedPIs = new ArrayList();
		if (Logger.isEnabled())
			Logger.log(new LogEvent(LOGID, (new StringBuilder()).append("Plugin Directory is ").append(pluginDirectory).toString()));
		if (!pluginDirectory.exists())
			FileUtil.mkdirs(pluginDirectory);
		if (pluginDirectory.isDirectory())
		{
			File pluginsDirectory[] = pluginDirectory.listFiles();
			for (int i = 0; i < pluginsDirectory.length; i++)
			{
				if (pluginsDirectory[i].getName().equals("CVS"))
				{
					if (Logger.isEnabled())
						Logger.log(new LogEvent(LOGID, (new StringBuilder()).append("Skipping plugin ").append(pluginsDirectory[i].getName()).toString()));
					continue;
				}
				if (Logger.isEnabled())
					Logger.log(new LogEvent(LOGID, (new StringBuilder()).append("Loading plugin ").append(pluginsDirectory[i].getName()).toString()));
				if (core_operation != null)
					core_operation.reportCurrentTask((new StringBuilder()).append(MessageText.getString("splash.plugin")).append(pluginsDirectory[i].getName()).toString());
				try
				{
					List loaded_pis = loadPluginFromDir(pluginsDirectory[i], bSkipAlreadyLoaded, loading_for_startup, initialise);
					loaded_pi_list.add(loaded_pis);
					dirLoadedPIs.addAll(loaded_pis);
				}
				catch (PluginException e) { }
				if (core_operation != null)
					core_operation.reportPercent((100 * (i + plugin_offset)) / plugin_total);
			}

		}
		return dirLoadedPIs;
	}

	private List loadPluginFromDir(File directory, boolean bSkipAlreadyLoaded, boolean loading_for_startup, boolean initialise)
		throws PluginException
	{
		List loaded_pis;
		ClassLoader plugin_class_loader;
		String pluginName;
		String plugin_version[];
		String plugin_id[];
		String plugin_class_string;
		loaded_pis = new ArrayList();
		plugin_class_loader = root_class_loader;
		if (!directory.isDirectory())
			return loaded_pis;
		pluginName = directory.getName();
		File pluginContents[] = directory.listFiles();
		if (pluginContents == null || pluginContents.length == 0)
			return loaded_pis;
		boolean looks_like_plugin = false;
		int i = 0;
		do
		{
			if (i >= pluginContents.length)
				break;
			String name = pluginContents[i].getName().toLowerCase();
			if (name.endsWith(".jar") || name.equals("plugin.properties"))
			{
				looks_like_plugin = true;
				break;
			}
			i++;
		} while (true);
		if (!looks_like_plugin)
		{
			if (Logger.isEnabled())
				Logger.log(new LogEvent(LOGID, 1, (new StringBuilder()).append("Plugin directory '").append(directory).append("' has no plugin.properties ").append("or .jar files, skipping").toString()));
			return loaded_pis;
		}
		plugin_version = (new String[] {
			null
		});
		plugin_id = (new String[] {
			null
		});
		pluginContents = PluginLauncherImpl.getHighestJarVersions(pluginContents, plugin_version, plugin_id, true);
		for (int i = 0; i < pluginContents.length; i++)
		{
			File jar_file = pluginContents[i];
			if (pluginContents.length > 1)
			{
				String name = jar_file.getName();
				if (name.startsWith("i18nPlugin_"))
				{
					if (Logger.isEnabled())
						Logger.log(new LogEvent(LOGID, (new StringBuilder()).append("renaming '").append(name).append("' to conform with versioning system").toString()));
					jar_file.renameTo(new File(jar_file.getParent(), "i18nAZ_0.1.jar  "));
					continue;
				}
			}
			plugin_class_loader = PluginLauncherImpl.addFileToClassPath(root_class_loader, plugin_class_loader, jar_file);
		}

		plugin_class_string = null;
		Properties props;
		File properties_file;
		props = new Properties();
		properties_file = new File((new StringBuilder()).append(directory.toString()).append(File.separator).append("plugin.properties").toString());
		FileInputStream fis;
		if (!properties_file.exists())
			break MISSING_BLOCK_LABEL_436;
		fis = null;
		fis = new FileInputStream(properties_file);
		props.load(fis);
		if (fis != null)
			fis.close();
		break MISSING_BLOCK_LABEL_583;
		Exception exception;
		exception;
		if (fis != null)
			fis.close();
		throw exception;
		if (plugin_class_loader instanceof URLClassLoader)
		{
			URLClassLoader current = (URLClassLoader)plugin_class_loader;
			URL url = current.findResource("plugin.properties");
			if (url != null)
			{
				URLConnection connection = url.openConnection();
				java.io.InputStream is = connection.getInputStream();
				props.load(is);
			} else
			{
				throw new Exception("failed to load plugin.properties from jars");
			}
		} else
		{
			throw new Exception("failed to load plugin.properties from dir or jars");
		}
		break MISSING_BLOCK_LABEL_583;
		Throwable e;
		e;
		Debug.printStackTrace(e);
		String msg = (new StringBuilder()).append("Can't read 'plugin.properties' for plugin '").append(pluginName).append("': file may be missing").toString();
		Logger.log(new LogAlert(false, 3, msg));
		System.out.println(msg);
		throw new PluginException(msg, e);
		String plugin_name_string;
		int pos1;
		int pos2;
		checkJDKVersion(pluginName, props, true);
		checkAzureusVersion(pluginName, props, true);
		plugin_class_string = (String)props.get("plugin.class");
		if (plugin_class_string == null)
		{
			plugin_class_string = (String)props.get("plugin.classes");
			if (plugin_class_string == null)
				plugin_class_string = "";
		}
		plugin_name_string = (String)props.get("plugin.name");
		if (plugin_name_string == null)
			plugin_name_string = (String)props.get("plugin.names");
		pos1 = 0;
		pos2 = 0;
_L6:
		int p1;
		String plugin_class;
		PluginInterfaceImpl existing_pi;
		p1 = plugin_class_string.indexOf(";", pos1);
		if (p1 == -1)
		{
			plugin_class = plugin_class_string.substring(pos1).trim();
		} else
		{
			plugin_class = plugin_class_string.substring(pos1, p1).trim();
			pos1 = p1 + 1;
		}
		existing_pi = getPluginFromClass(plugin_class);
		if (existing_pi == null) goto _L2; else goto _L1
_L1:
		File this_parent;
		File existing_parent;
		if (bSkipAlreadyLoaded)
			break; /* Loop/switch isn't completed */
		this_parent = directory.getParentFile();
		existing_parent = null;
		if (existing_pi.getInitializerKey() instanceof File)
			existing_parent = ((File)existing_pi.getInitializerKey()).getParentFile();
		if (!this_parent.equals(FileUtil.getApplicationFile("plugins")) || existing_parent == null || !existing_parent.equals(FileUtil.getUserFile("plugins"))) goto _L4; else goto _L3
_L3:
		if (Logger.isEnabled())
			Logger.log(new LogEvent(LOGID, (new StringBuilder()).append("Plugin '").append(plugin_name_string).append("/").append(plugin_class).append(": shared version overridden by user-specific one").toString()));
		return new ArrayList();
_L4:
		Logger.log(new LogAlert(false, 1, (new StringBuilder()).append("Error loading '").append(plugin_name_string).append("', plugin class '").append(plugin_class).append("' is already loaded").toString()));
		continue; /* Loop/switch isn't completed */
_L2:
		String plugin_name = null;
		if (plugin_name_string != null)
		{
			int p2 = plugin_name_string.indexOf(";", pos2);
			if (p2 == -1)
			{
				plugin_name = plugin_name_string.substring(pos2).trim();
			} else
			{
				plugin_name = plugin_name_string.substring(pos2, p2).trim();
				pos2 = p2 + 1;
			}
		}
		Properties new_props = (Properties)props.clone();
		for (int j = 0; j < default_version_details.length; j++)
		{
			if (!plugin_class.equals(default_version_details[j][0]))
				continue;
			if (new_props.get("plugin.id") == null)
				new_props.put("plugin.id", default_version_details[j][1]);
			if (plugin_name == null)
				plugin_name = default_version_details[j][2];
			if (new_props.get("plugin.version") != null)
				continue;
			if (plugin_version[0] != null)
				new_props.put("plugin.version", plugin_version[0]);
			else
				new_props.put("plugin.version", default_version_details[j][3]);
		}

		new_props.put("plugin.class", plugin_class);
		if (plugin_name != null)
			new_props.put("plugin.name", plugin_name);
		Throwable load_failure = null;
		String pid = plugin_id[0] != null ? plugin_id[0] : directory.getName();
		Plugin plugin = PluginLauncherImpl.getPreloadedPlugin(plugin_class);
		if (plugin == null)
			try
			{
				Class c = plugin_class_loader.loadClass(plugin_class);
				plugin = (Plugin)c.newInstance();
			}
			catch (UnsupportedClassVersionError e)
			{
				plugin = new FailedPlugin(plugin_name, directory.getAbsolutePath());
				load_failure = new UnsupportedClassVersionError(e.getMessage());
			}
			catch (Throwable e)
			{
				if (!(e instanceof ClassNotFoundException) || !props.getProperty("plugin.install_if_missing", "no").equalsIgnoreCase("yes"))
					load_failure = e;
				plugin = new FailedPlugin(plugin_name, directory.getAbsolutePath());
			}
		else
			plugin_class_loader = plugin.getClass().getClassLoader();
		MessageText.integratePluginMessages((String)props.get("plugin.langfile"), plugin_class_loader);
		PluginInterfaceImpl plugin_interface = new PluginInterfaceImpl(plugin, this, directory, plugin_class_loader, directory.getName(), new_props, directory.getAbsolutePath(), pid, plugin_version[0]);
		boolean bEnabled = loading_for_startup ? plugin_interface.getPluginState().isLoadedAtStartup() : initialise;
		plugin_interface.getPluginState().setDisabled(!bEnabled);
		try
		{
			Method load_method = plugin.getClass().getMethod("load", new Class[] {
				org/gudy/azureus2/plugins/PluginInterface
			});
			load_method.invoke(plugin, new Object[] {
				plugin_interface
			});
		}
		catch (NoSuchMethodException e) { }
		catch (Throwable e)
		{
			load_failure = e;
		}
		loaded_pis.add(plugin_interface);
		if (load_failure != null)
		{
			plugin_interface.setAsFailed();
			if (!pid.equals(UpdaterUpdateChecker.getPluginID()))
			{
				String msg = (new StringBuilder()).append("Error loading plugin '").append(pluginName).append("' / '").append(plugin_class_string).append("'").toString();
				LogAlert la;
				if (load_failure instanceof UnsupportedClassVersionError)
					la = new LogAlert(false, 3, (new StringBuilder()).append(msg).append(". ").append(MessageText.getString("plugin.install.class_version_error")).toString());
				else
					la = new LogAlert(false, msg, load_failure);
				Logger.log(la);
				System.out.println((new StringBuilder()).append(msg).append(": ").append(load_failure).toString());
			}
		}
		if (p1 != -1) goto _L6; else goto _L5
_L5:
		return loaded_pis;
		Throwable e;
		e;
		if (e instanceof PluginException)
		{
			throw (PluginException)e;
		} else
		{
			Debug.printStackTrace(e);
			String msg = (new StringBuilder()).append("Error loading plugin '").append(pluginName).append("' / '").append(plugin_class_string).append("'").toString();
			Logger.log(new LogAlert(false, msg, e));
			System.out.println((new StringBuilder()).append(msg).append(": ").append(e).toString());
			throw new PluginException(msg, e);
		}
	}

	public void initialisePlugins()
	{
		LinkedList initQueue;
		AEThread2 secondaryInitializer;
		addInitThread();
		initQueue = new LinkedList();
		for (int i = 0; i < loaded_pi_list.size(); i++)
		{
			final int idx = i;
			initQueue.add(new Runnable() {

				final int val$idx;
				final PluginInitializer this$0;

				public void run()
				{
label0:
					{
						try
						{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -