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

📄 plugindownloaderthread.java

📁 JBother是纯Java开发的Jabber(即时消息开源软件)客户端。支持群组聊天
💻 JAVA
字号:
/* Copyright (C) 2003 Adam Olsen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */package com.valhalla.pluginmanager;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.io.PrintWriter;import java.net.Socket;import java.net.URL;import java.net.ConnectException;import java.util.ArrayList;import java.util.Locale;import java.util.Properties;import java.util.ResourceBundle;import javax.swing.*;import com.valhalla.gui.ProgressDialog;/** * Downloads plugins * * @author Adam Olsen * @version 1.0 */public class PluginDownloaderThread implements Runnable {    private ResourceBundle resources = ResourceBundle.getBundle(            "PluginManager", Locale.getDefault());    private PluginManager manager = null;    private ProgressDialog progress = null;    private ArrayList list = null;    private double size = 0;    private String mirror, script, installDir;    private boolean cancelled = false;    /**     * Sets up the thread     *     * @param manager     *            the PluginManager that contains this thread     * @param list     *            the list of plugins to download     * @param progress     *            the dialog that tracks this threads progress     */    public PluginDownloaderThread(PluginManager manager, ArrayList list) {        this.manager = manager;        this.list = list;        mirror = manager.getMirror();        script = manager.getScript();        installDir = manager.getInstallDir();        size = calculateSize(list);        this.progress = new ProgressDialog(manager, resources                .getString("downloading"), 0, (int) size + 1);        JButton button = this.progress.getButton();        button.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                progress.delete();                cancelled = true;            }        });    }    /**     * Called by the enclosing Thread     */    public void run() {        if (size <= 0.0) {            manager.throwError("selectPlugins", true);            progress.delete();            return;        }        InputStream in = null;        BufferedReader bIn = null;        File cacheDir = new File(installDir, "downloadcache");        if (!cacheDir.isDirectory() && !cacheDir.mkdirs()) {            progress.delete();            manager.throwError("couldNotCreateCache", true);            return;        }        try {            int totalRead = 0;            for (int i = 0; i < list.size(); i++) {                if (cancelled)                    return;                Properties props = (Properties) list.get(i);                if (props.getProperty("selected") != null) {                    URL url = new URL("http://" + mirror + script +                        "?command=getPlugin&apiVersion=" + PluginLoader.getAPIVersion()                        + "&plugin=" + props.getProperty("fileName"));                    System.out.println("accessing URL:" + url);                    in = url.openStream();                    File outFile = new File(cacheDir, props                            .getProperty("fileName"));                    int pluginSize = Integer                            .parseInt(props.getProperty("size"));                    FileOutputStream fileOut = new FileOutputStream(outFile);                    int readSize = 0;                    int totalSize = 0;                    byte buf[] = new byte[1024];                    while (true) {                        if (cancelled) {                            in.close();                            fileOut.close();                            return;                        }                        readSize = in.read(buf, 0, 1024);                        if (readSize == -1)                            break;                        fileOut.write(buf, 0, readSize);                        totalRead += readSize;                        totalSize += readSize;                        final int tempSize = totalRead;                        SwingUtilities.invokeLater(new Runnable() {                            public void run() {                                progress.setValue(tempSize);                                progress.repaint();                            }                        });                    }                    fileOut.close();                    if (cancelled)                        return;                    if (totalSize != pluginSize) {                        com.valhalla.Logger.debug(pluginSize + " " + totalSize);                        manager.throwError("downloadError", true);                        progress.delete();                        return;                    }                    in.close();                }            }        } catch (ConnectException e) {            JOptionPane.showMessageDialog(null,                resources.getString("couldNotConnectThroughProxy"),                resources.getString("connectionError"),                JOptionPane.ERROR_MESSAGE);        } catch (Exception e) {            manager.throwError(e.getMessage(), false);            progress.delete();            return;        }        if (cancelled)            return;        progress.delete();        SwingUtilities.invokeLater(new Runnable() {            public void run() {                manager.doneDownloadingPlugins(list);            }        });    }    /**     * Gets the size of the selected plugins in an array     *     * @param list     *            the plugin list     * @return the size of the selected plugins     */    public static double calculateSize(ArrayList list) {        double size = 0;        for (int i = 0; i < list.size(); i++) {            Properties p = (Properties) list.get(i);            if (p.getProperty("selected") != null) {                try {                    double s = Double.parseDouble(p.getProperty("size"));                    size += s;                } catch (Exception e) {                    e.printStackTrace();                }            }        }        return size;    }}

⌨️ 快捷键说明

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