From c887882061fcb367e47438a6d52ec3b74845da7c Mon Sep 17 00:00:00 2001 From: vimasig <70583277+vimasig@users.noreply.github.com> Date: Sat, 11 Sep 2021 08:01:35 +0300 Subject: [PATCH] Add "Add libraries from directory" button --- .../bozar/obfuscator/utils/FileUtils.java | 23 ++++++++++++ .../github/vimasig/bozar/ui/Controller.java | 36 +++++++++++++++---- src/main/resources/menu.fxml | 3 +- 3 files changed, 55 insertions(+), 7 deletions(-) create mode 100644 src/main/java/io/github/vimasig/bozar/obfuscator/utils/FileUtils.java diff --git a/src/main/java/io/github/vimasig/bozar/obfuscator/utils/FileUtils.java b/src/main/java/io/github/vimasig/bozar/obfuscator/utils/FileUtils.java new file mode 100644 index 0000000..2045c29 --- /dev/null +++ b/src/main/java/io/github/vimasig/bozar/obfuscator/utils/FileUtils.java @@ -0,0 +1,23 @@ +package io.github.vimasig.bozar.obfuscator.utils; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class FileUtils { + + public static List getAllFiles(File file) { + if(file.isFile()) return List.of(file); + + File[] files = file.listFiles(); + if(files == null) return List.of(); + + final var fileList = new ArrayList(); + Arrays.stream(files).forEach(f -> { + if(f.isFile()) fileList.add(f); + else fileList.addAll(getAllFiles(f)); + }); + return fileList; + } +} diff --git a/src/main/java/io/github/vimasig/bozar/ui/Controller.java b/src/main/java/io/github/vimasig/bozar/ui/Controller.java index 97e44df..5b1233b 100644 --- a/src/main/java/io/github/vimasig/bozar/ui/Controller.java +++ b/src/main/java/io/github/vimasig/bozar/ui/Controller.java @@ -4,10 +4,12 @@ import io.github.vimasig.bozar.obfuscator.transformer.ClassTransformer; import io.github.vimasig.bozar.obfuscator.transformer.TransformManager; import io.github.vimasig.bozar.obfuscator.utils.BozarUtils; +import io.github.vimasig.bozar.obfuscator.utils.FileUtils; import io.github.vimasig.bozar.obfuscator.utils.model.BozarCategory; import io.github.vimasig.bozar.obfuscator.utils.model.BozarConfig; import javafx.application.Platform; import javafx.collections.FXCollections; +import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.geometry.Insets; import javafx.geometry.Pos; @@ -17,7 +19,9 @@ import javafx.scene.layout.Region; import javafx.scene.layout.VBox; import javafx.scene.text.Font; +import javafx.stage.DirectoryChooser; import javafx.stage.FileChooser; +import javafx.stage.Window; import java.io.File; import java.io.IOException; @@ -25,6 +29,8 @@ import java.io.PrintStream; import java.util.*; import java.util.concurrent.atomic.AtomicReference; +import java.util.function.Function; +import java.util.stream.Collectors; public class Controller { @@ -34,7 +40,8 @@ public class Controller { @FXML private Button browseOutput; @FXML private ListView console; @FXML private Button buttonObf; - @FXML private Button buttonAddLib; + @FXML private Button buttonAddJAR; + @FXML private Button buttonAddDir; @FXML private Button buttonRemoveLib; @FXML private TabPane optionsTab; @@ -167,11 +174,12 @@ public void initialize() { // Example usage of exclude exclude.setPromptText("com.example.myapp.MyClass\r\ncom.example.myapp.MyClass.myField\r\ncom.example.myapp.MyClass.myMethod()\r\ncom.example.mypackage.**\r\nFieldRenamerTransformer:com.example.MyClass"); - var jarFilter = new FileChooser.ExtensionFilter("JAR files (*.jar)", "*.jar"); + final Function getWindowFunc = actionEvent -> ((Button)actionEvent.getSource()).getScene().getWindow(); + final var jarFilter = new FileChooser.ExtensionFilter("JAR files (*.jar)", "*.jar"); browseInput.setOnAction(actionEvent -> { FileChooser fileChooser = new FileChooser(); fileChooser.getExtensionFilters().add(jarFilter); - File file = fileChooser.showOpenDialog(((Button)actionEvent.getSource()).getScene().getWindow()); + File file = fileChooser.showOpenDialog(getWindowFunc.apply(actionEvent)); if (file == null || !file.exists() || !file.isFile()) return; input.setText(file.getAbsolutePath()); @@ -179,7 +187,7 @@ public void initialize() { browseOutput.setOnAction(actionEvent -> { FileChooser fileChooser = new FileChooser(); fileChooser.getExtensionFilters().add(jarFilter); - File file = fileChooser.showSaveDialog(((Button)actionEvent.getSource()).getScene().getWindow()); + File file = fileChooser.showSaveDialog(getWindowFunc.apply(actionEvent)); if (file == null || !file.exists() || !file.isFile()) return; output.setText(file.getAbsolutePath()); @@ -189,10 +197,10 @@ public void initialize() { this.buttonObf.setDisable(true); new Thread(this::obfuscate).start(); }); - buttonAddLib.setOnAction(actionEvent -> { + buttonAddJAR.setOnAction(actionEvent -> { FileChooser fileChooser = new FileChooser(); fileChooser.getExtensionFilters().add(jarFilter); - List files = fileChooser.showOpenMultipleDialog(((Button)actionEvent.getSource()).getScene().getWindow()); + List files = fileChooser.showOpenMultipleDialog(getWindowFunc.apply(actionEvent)); if(files == null) return; files.forEach(file -> { if (file == null || !file.exists() || !file.isFile()) @@ -200,6 +208,22 @@ public void initialize() { libraries.getItems().add(file.getAbsolutePath()); }); }); + buttonAddDir.setOnAction(actionEvent -> { + DirectoryChooser dirChooser = new DirectoryChooser(); + File file = dirChooser.showDialog(getWindowFunc.apply(actionEvent)); + if (file == null || !file.exists() || !file.isDirectory()) return; + libraries.getItems().addAll(FileUtils.getAllFiles(file).stream() + .filter(f -> jarFilter.getExtensions().stream() + .map(s -> s.substring(1)) // remove star + .allMatch(s -> f.getName().endsWith(s))) + .map(f -> { + try { + return f.getCanonicalPath(); + } catch (IOException e) { + throw new RuntimeException(String.format("Cannot get canonical path of file %s", f.getName()), e); + } + }).collect(Collectors.toList())); + }); buttonRemoveLib.setOnAction(actionEvent -> { int index = libraries.getSelectionModel().getSelectedIndex(); if(index != -1) diff --git a/src/main/resources/menu.fxml b/src/main/resources/menu.fxml index b00d34c..1b41d4d 100644 --- a/src/main/resources/menu.fxml +++ b/src/main/resources/menu.fxml @@ -43,7 +43,8 @@