new downloader gui WIP, auto-download depends on start
This commit is contained in:
parent
d109285657
commit
0008301f83
34
src/Fozzie.form
Normal file
34
src/Fozzie.form
Normal file
|
@ -0,0 +1,34 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="Fozzie">
|
||||
<grid id="27dc6" binding="frameContainer" layout-manager="GridLayoutManager" row-count="2" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<xy x="20" y="20" width="500" height="400"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<component id="4913b" class="javax.swing.JProgressBar" binding="progressBar">
|
||||
<constraints>
|
||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false">
|
||||
<preferred-size width="50" height="-1"/>
|
||||
<maximum-size width="200" height="-1"/>
|
||||
</grid>
|
||||
</constraints>
|
||||
<properties>
|
||||
<indeterminate value="false"/>
|
||||
<stringPainted value="true"/>
|
||||
<value value="0"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="46ede" class="javax.swing.JLabel" binding="label">
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Downloading file..."/>
|
||||
</properties>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
</form>
|
149
src/Fozzie.java
Normal file
149
src/Fozzie.java
Normal file
|
@ -0,0 +1,149 @@
|
|||
/*
|
||||
* Firestar Mod Manager
|
||||
* Copyright (C) 2024 bonkmaykr
|
||||
*
|
||||
* 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 3 of the License, 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, see https://www.gnu.org/licenses/.
|
||||
*/
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.io.*;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.net.*;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
|
||||
public class Fozzie {
|
||||
private JFrame frame = new JFrame();
|
||||
public JProgressBar progressBar;
|
||||
private JPanel frameContainer;
|
||||
private JLabel label;
|
||||
|
||||
private HttpURLConnection httpConn;
|
||||
private int contentLength;
|
||||
private InputStream inputStream;
|
||||
|
||||
//public File output;
|
||||
|
||||
public boolean backgroundDone = false;
|
||||
|
||||
boolean DownloadFile(String url, String odir, String oname) {
|
||||
//output = o;
|
||||
|
||||
frame.add(frameContainer);
|
||||
frame.setSize(300, 100);
|
||||
frame.setTitle("Firestar Mod Manager");
|
||||
frame.setResizable(false);
|
||||
frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
|
||||
frame.setLayout(new GridLayout());
|
||||
frame.setLocationRelativeTo(null);
|
||||
frame.setAlwaysOnTop(true);
|
||||
frame.setVisible(true);
|
||||
|
||||
label.setText("Downloading \"" + oname + "\"");
|
||||
|
||||
try {
|
||||
URL fileURL = new URL(url);
|
||||
httpConn = (HttpURLConnection) fileURL.openConnection();
|
||||
int response = httpConn.getResponseCode();
|
||||
|
||||
if (response == HttpURLConnection.HTTP_OK) {
|
||||
String disposition = httpConn.getHeaderField("Content-Disposition");
|
||||
String contentType = httpConn.getContentType();
|
||||
contentLength = httpConn.getContentLength();
|
||||
|
||||
inputStream = httpConn.getInputStream();
|
||||
} else if (response == 404) {
|
||||
throw new IOException(
|
||||
"File missing from remote server.");
|
||||
} else {
|
||||
throw new IOException(
|
||||
"Unexpected response; Server replied with " + response);
|
||||
}
|
||||
new FozzieDownloader(this, url, odir, oname, httpConn.getContentLength()).doInBackground();
|
||||
while (!backgroundDone) {}
|
||||
|
||||
inputStream.close();
|
||||
httpConn.disconnect();
|
||||
frame.dispose();
|
||||
return true;
|
||||
} catch (MalformedURLException e) {
|
||||
JOptionPane.showMessageDialog(frame, "Internal Error: URL given to Fozzie is not valid.\nGet a programmer!", "Fatal Error", JOptionPane.ERROR_MESSAGE);
|
||||
frame.dispose();
|
||||
return false;
|
||||
} catch (Exception e) {
|
||||
JOptionPane.showMessageDialog(frame, "Error: " + e.getMessage(), "Fatal Error", JOptionPane.ERROR_MESSAGE);
|
||||
frame.dispose();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void disconnect() throws IOException {
|
||||
inputStream.close();
|
||||
httpConn.disconnect();
|
||||
}
|
||||
|
||||
public int getContentLength() {
|
||||
return this.contentLength;
|
||||
}
|
||||
|
||||
public InputStream getInputStream() {
|
||||
return this.inputStream;
|
||||
}
|
||||
}
|
||||
|
||||
class FozzieDownloader extends SwingWorker<Void, Void> {
|
||||
private static final int BUFFER_SIZE = 4096;
|
||||
private String downloadURL;
|
||||
private String saveDirectory;
|
||||
private String saveName;
|
||||
private final Fozzie gui;
|
||||
private final long completeSize;
|
||||
|
||||
public FozzieDownloader(Fozzie gui, String downloadURL, String saveDirectory, String saveName, long size) {
|
||||
this.gui = gui;
|
||||
this.downloadURL = downloadURL;
|
||||
this.saveDirectory = saveDirectory;
|
||||
this.saveName = saveName;
|
||||
this.completeSize = size;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Void doInBackground() throws Exception {
|
||||
long downloadedSize = 0;
|
||||
File downloadLocationDir = new File(saveDirectory);
|
||||
File downloadLocation = new File(saveDirectory + "/" + saveName);
|
||||
downloadLocationDir.mkdirs();
|
||||
if (!downloadLocation.isFile()) {
|
||||
downloadLocation.createNewFile();
|
||||
}
|
||||
BufferedInputStream in = new BufferedInputStream(new URL(downloadURL).openStream());
|
||||
FileOutputStream fos = new FileOutputStream(saveDirectory + "/" + saveName);
|
||||
BufferedOutputStream out = new BufferedOutputStream(fos,1024);
|
||||
byte[] data = new byte[1024];
|
||||
int x = 0;
|
||||
while ((x = in.read(data,0,1024))>=0) {
|
||||
downloadedSize += x;
|
||||
int progress = (int) ((((double)downloadedSize) / ((double)completeSize)) * 100d);
|
||||
gui.progressBar.setValue(progress);
|
||||
out.write(data, 0, x);
|
||||
}
|
||||
out.close();
|
||||
in.close();
|
||||
gui.backgroundDone = true;
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -16,6 +16,8 @@
|
|||
* along with this program. If not, see https://www.gnu.org/licenses/.
|
||||
*/
|
||||
|
||||
import net.lingala.zip4j.ZipFile;
|
||||
import net.lingala.zip4j.exception.ZipException;
|
||||
import org.json.*;
|
||||
|
||||
import java.awt.*;
|
||||
|
@ -23,12 +25,12 @@ import java.io.*;
|
|||
import java.nio.file.*;
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.*;
|
||||
|
||||
public class Main {
|
||||
// Build Information
|
||||
public static final String vstr = "Release 1.2";
|
||||
public static final String vcode = "Dekka";
|
||||
public static final String vstr = "Release 1.3";
|
||||
public static final String vcode = "Tetsuo";
|
||||
public static final int vint = 0;
|
||||
|
||||
// User Settings
|
||||
|
@ -86,6 +88,15 @@ public class Main {
|
|||
fExo2 = new Font("Arial", Font.PLAIN, 12);
|
||||
}
|
||||
|
||||
// download dependencies if we know we haven't been here before
|
||||
// will also need to call this if a needed file is missing before use
|
||||
//
|
||||
// mostly for testing. will move to onboarding screen later
|
||||
if (!new File(System.getProperty("user.home") + "/.firestar/").isDirectory()) {
|
||||
new File(System.getProperty("user.home") + "/.firestar/").mkdirs();
|
||||
downloadDependencies();
|
||||
}
|
||||
|
||||
// check and load configs
|
||||
File fConf = new File(System.getProperty("user.home") + "/.firestar/firestar.conf");
|
||||
if (!fConf.isFile()) {
|
||||
|
@ -153,4 +164,21 @@ public class Main {
|
|||
}
|
||||
file.delete();
|
||||
}
|
||||
|
||||
public static boolean downloadDependencies () {
|
||||
boolean downloader = new Fozzie().DownloadFile("https://bonkmaykr.worlio.com/http/firestar/firesdk.zip", System.getProperty("user.home") + "/.firestar/", "firesdk.zip");
|
||||
if (!downloader) {return false;}
|
||||
|
||||
ZipFile sdk = new ZipFile(System.getProperty("user.home") + "/.firestar/firesdk.zip");
|
||||
try {
|
||||
sdk.extractAll(System.getProperty("user.home") + "/.firestar/");
|
||||
} catch (ZipException e) {
|
||||
JOptionPane.showMessageDialog(new JFrame(), e.getMessage(), "Critical Error", JOptionPane.ERROR_MESSAGE);
|
||||
System.out.println(e.getMessage());
|
||||
return false;
|
||||
}
|
||||
sdk.getFile().delete(); // cleanup
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user