Fixes some behavior regarding backups
All checks were successful
KnarCraft/Minecraft-Server-Launcher/pipeline/head This commit looks good
All checks were successful
KnarCraft/Minecraft-Server-Launcher/pipeline/head This commit looks good
Makes sure to only proceed with backups if a valid path is given Makes the backup run in its own thread to prevent the software from locking up Makes sure only one backup can be running at once
This commit is contained in:
parent
849655bfc6
commit
bf77c13072
@ -33,7 +33,7 @@ import static net.knarcraft.minecraftserverlauncher.utility.CommonFunctions.getR
|
|||||||
*/
|
*/
|
||||||
public class ServerLauncherGUI extends MessageHandler implements ActionListener, GUI {
|
public class ServerLauncherGUI extends MessageHandler implements ActionListener, GUI {
|
||||||
|
|
||||||
private final JLabel lblStatuslabel = new JLabel("Servers are stopped");
|
private final JLabel lblStatusLabel = new JLabel("Servers are stopped");
|
||||||
private final ServerLauncherController controller;
|
private final ServerLauncherController controller;
|
||||||
private Map<String, String> textStrings;
|
private Map<String, String> textStrings;
|
||||||
private Tray applicationTray;
|
private Tray applicationTray;
|
||||||
@ -101,7 +101,7 @@ public class ServerLauncherGUI extends MessageHandler implements ActionListener,
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setStatus(String text) {
|
public void setStatus(String text) {
|
||||||
this.lblStatuslabel.setText(text);
|
this.lblStatusLabel.setText(text);
|
||||||
this.logMessage(text);
|
this.logMessage(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -243,11 +243,11 @@ public class ServerLauncherGUI extends MessageHandler implements ActionListener,
|
|||||||
panelBasic.add(profiles);
|
panelBasic.add(profiles);
|
||||||
profiles.addActionListener(this);
|
profiles.addActionListener(this);
|
||||||
|
|
||||||
sl_panel.putConstraint(SpringLayout.NORTH, lblStatuslabel, 6, SpringLayout.SOUTH, addProfileButton);
|
sl_panel.putConstraint(SpringLayout.NORTH, lblStatusLabel, 6, SpringLayout.SOUTH, addProfileButton);
|
||||||
sl_panel.putConstraint(SpringLayout.SOUTH, lblStatuslabel, -10, SpringLayout.SOUTH, panelBasic);
|
sl_panel.putConstraint(SpringLayout.SOUTH, lblStatusLabel, -10, SpringLayout.SOUTH, panelBasic);
|
||||||
sl_panel.putConstraint(SpringLayout.WEST, lblStatuslabel, 10, SpringLayout.WEST, panelBasic);
|
sl_panel.putConstraint(SpringLayout.WEST, lblStatusLabel, 10, SpringLayout.WEST, panelBasic);
|
||||||
sl_panel.putConstraint(SpringLayout.EAST, lblStatuslabel, -10, SpringLayout.EAST, panelBasic);
|
sl_panel.putConstraint(SpringLayout.EAST, lblStatusLabel, -10, SpringLayout.EAST, panelBasic);
|
||||||
panelBasic.add(lblStatuslabel);
|
panelBasic.add(lblStatusLabel);
|
||||||
|
|
||||||
addServerButton = new JButton("Add server");
|
addServerButton = new JButton("Add server");
|
||||||
sl_panel.putConstraint(SpringLayout.NORTH, addServerButton, 0, SpringLayout.NORTH, startServerButton);
|
sl_panel.putConstraint(SpringLayout.NORTH, addServerButton, 0, SpringLayout.NORTH, startServerButton);
|
||||||
@ -314,7 +314,7 @@ public class ServerLauncherGUI extends MessageHandler implements ActionListener,
|
|||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
Object actionSource = e.getSource();
|
Object actionSource = e.getSource();
|
||||||
//Registers actions on the main tab
|
//Register actions on the main tab
|
||||||
handleMainTabButtons(actionSource);
|
handleMainTabButtons(actionSource);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -333,7 +333,8 @@ public class ServerLauncherGUI extends MessageHandler implements ActionListener,
|
|||||||
} else if (actionSource == addServerButton) {
|
} else if (actionSource == addServerButton) {
|
||||||
addServer();
|
addServer();
|
||||||
} else if (actionSource == backupButton) {
|
} else if (actionSource == backupButton) {
|
||||||
CommonFunctions.backup(this);
|
//Run backup in its own thread to prevent locking up
|
||||||
|
Executors.newSingleThreadExecutor().execute(() -> CommonFunctions.backup(this));
|
||||||
} else if (actionSource == addProfileButton) {
|
} else if (actionSource == addProfileButton) {
|
||||||
controller.addProfile(JOptionPane.showInputDialog("Profile name: "));
|
controller.addProfile(JOptionPane.showInputDialog("Profile name: "));
|
||||||
updateProfiles();
|
updateProfiles();
|
||||||
|
@ -36,6 +36,7 @@ import java.util.Scanner;
|
|||||||
public final class CommonFunctions {
|
public final class CommonFunctions {
|
||||||
|
|
||||||
private static final String filesDirectory = Main.getApplicationWorkDirectory() + File.separator + "files";
|
private static final String filesDirectory = Main.getApplicationWorkDirectory() + File.separator + "files";
|
||||||
|
private static boolean backupRunning = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates all folders necessary for tests and normal operation
|
* Creates all folders necessary for tests and normal operation
|
||||||
@ -53,7 +54,7 @@ public final class CommonFunctions {
|
|||||||
* @param folder <p>The folder to create</p>
|
* @param folder <p>The folder to create</p>
|
||||||
* @throws FileNotFoundException <p>If unable to create the folder</p>
|
* @throws FileNotFoundException <p>If unable to create the folder</p>
|
||||||
*/
|
*/
|
||||||
protected static void createFolder(File folder) throws FileNotFoundException {
|
public static void createFolder(File folder) throws FileNotFoundException {
|
||||||
if (!folder.exists()) {
|
if (!folder.exists()) {
|
||||||
if (!folder.mkdirs()) {
|
if (!folder.mkdirs()) {
|
||||||
throw new FileNotFoundException("Cannot create necessary directory.");
|
throw new FileNotFoundException("Cannot create necessary directory.");
|
||||||
@ -298,8 +299,21 @@ public final class CommonFunctions {
|
|||||||
/**
|
/**
|
||||||
* Copies all server directories to a folder specified by the user.
|
* Copies all server directories to a folder specified by the user.
|
||||||
*/
|
*/
|
||||||
public static void backup(GUI gui) {
|
public synchronized static void backup(GUI gui) {
|
||||||
|
if (backupRunning) {
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
backupRunning = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Get the folder to save the backed up files in
|
||||||
File path = gui.askForDirectory("Backup folder");
|
File path = gui.askForDirectory("Backup folder");
|
||||||
|
if (path == null || !path.isDirectory()) {
|
||||||
|
backupRunning = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
gui.setStatus("Backup running...");
|
||||||
for (Collection collection : Main.getController().getCurrentProfile().getCollections()) {
|
for (Collection collection : Main.getController().getCurrentProfile().getCollections()) {
|
||||||
//Ignore disabled and invalid servers
|
//Ignore disabled and invalid servers
|
||||||
if (collection.getServer().getPath().equals("") || !collection.getServer().isEnabled()) {
|
if (collection.getServer().getPath().equals("") || !collection.getServer().isEnabled()) {
|
||||||
@ -312,6 +326,7 @@ public final class CommonFunctions {
|
|||||||
File destinationFolder = new File(path, name);
|
File destinationFolder = new File(path, name);
|
||||||
//Create child folders
|
//Create child folders
|
||||||
if (!destinationFolder.exists() && !destinationFolder.mkdirs()) {
|
if (!destinationFolder.exists() && !destinationFolder.mkdirs()) {
|
||||||
|
backupRunning = false;
|
||||||
throw new IllegalArgumentException("Unable to create necessary sub-folder in the backup folder");
|
throw new IllegalArgumentException("Unable to create necessary sub-folder in the backup folder");
|
||||||
}
|
}
|
||||||
//Backup
|
//Backup
|
||||||
@ -319,9 +334,11 @@ public final class CommonFunctions {
|
|||||||
CommonFunctions.copyFolder(gui, srcFolder, destinationFolder);
|
CommonFunctions.copyFolder(gui, srcFolder, destinationFolder);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
backupRunning = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
gui.setStatus("Backup finished");
|
gui.setStatus("Backup finished");
|
||||||
|
backupRunning = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user