Files
Paper/paper-api/src/main/java/org/bukkit/fillr/Downloader.java
Bukkit/Spigot ca056597e1 better visibility/javadoc
By: Taylor Kelly <tkelly910@gmail.com>
2011-01-03 12:26:35 +08:00

162 lines
3.9 KiB
Java

package org.bukkit.fillr;
import org.bukkit.*;
import org.bukkit.plugin.PluginDescriptionFile;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
public class Downloader {
private static String directory = Fillr.directory;
private static String downloads = directory + File.separator + "downloads";
private static String backup = "backup";
/**
* Downloads the jar from a given url. If it is a compressed archive, it
* tries to get the .jars out of it
*
* @param url
* The url to download from
*/
static void downloadJar(String url) throws Exception {
int index = url.lastIndexOf('/');
String name = url.substring(index + 1);
File file = new File(directory, name);
if (url.endsWith(".jar") && file.exists())
backupFile(file);
download(new URL(url), name, directory);
file = new File("plugins", name);
/*if (name.endsWith(".zip") || name.endsWith(".tar")
|| name.endsWith(".rar") || name.endsWith(".7z")) {
unzipPlugin(file);
file.delete();
}*/
}
/**
* Downloads the file for a given plugin
*
* @param name
* The name of the plugin to download
* @param player
* The player to send info to
*/
void downloadFile(String name, Player player) throws Exception {
File file = new File(directory, name + ".jar");
if (file.exists()) {
player.sendMessage("Downloading " + name + "'s file");
PluginDescriptionFile pdfFile = Checker.getPDF(file);
FillReader reader = Checker.needsUpdate(pdfFile);
downloadFile(new URL(reader.getFile()));
player.sendMessage("Finished download");
} else {
System.out.println("Can't find " + name);
}
}
/**
* Downloads the file to the plugin/downloads directory
*
* @param u
* The url of the file to download
*/
private void downloadFile(URL u) throws Exception {
String name = u.getFile();
int index = name.lastIndexOf('/');
name = name.substring(index + 1);
download(u, name, downloads);
}
/**
* Downloads the file to a given directory with a given name
*
* @param u
* The url of the file to download
* @param name
* The name to give the file
* @param directory
* The directory to put the file
*/
private static void download(URL u, String name, String directory)
throws Exception {
InputStream inputStream = null;
// try {
inputStream = u.openStream();
if (!new File(directory).exists())
new File(directory).mkdir();
File f = new File(directory, name);
if (f.exists())
f.delete();
f.createNewFile();
copyInputStream(inputStream, new BufferedOutputStream(
new FileOutputStream(f)));
try {
if (inputStream != null)
inputStream.close();
} catch (IOException ioe) {
System.out.println("[UPDATR]: Error closing inputStream");
}
// }
}
/**
* Decompresses a file! How nice.
*
* @param f
* the file to decompress
*/
private static void unzipPlugin(File f) {
try {
System.out.println("Extracting jars out of " + f.getName());
//ExtractorUtil.extract(f, f.getAbsolutePath());
} catch (Exception e) {
System.out.println("[UPDATR]: Error decompressing " + f.getName());
}
}
/**
* Copies an InputStream to an OutputStream!
*
* @param in
* InputStream
* @param out
* OutputStream
* @throws IOException
*/
private static final void copyInputStream(InputStream in, OutputStream out)
throws IOException {
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) >= 0)
out.write(buffer, 0, len);
in.close();
out.close();
}
/**
* Moves the file to the backup folder.
*
* @param file
* The file to backup
*/
private static void backupFile(File file) {
if (file.exists()) {
System.out.println("Backing up old file: " + file.getName());
if (!new File(backup).exists())
new File(backup).mkdir();
file.renameTo(new File(backup, file
.getName() + ".bak"));
}
}
}