diff --git a/src/main/java/nsusbloader/AppPreferences.java b/src/main/java/nsusbloader/AppPreferences.java index 0b60904..03c7ae2 100644 --- a/src/main/java/nsusbloader/AppPreferences.java +++ b/src/main/java/nsusbloader/AppPreferences.java @@ -125,4 +125,10 @@ public class AppPreferences { public double getSceneHeight(){ return preferences.getDouble("WIND_HEIGHT", 475.0); } public void setSceneHeight(double value){ preferences.putDouble("WIND_HEIGHT", value); } + // Split and Merge // + public int getSplitMergeType(){ return preferences.getInt("SM_TYPE", 0); } + public void setSplitMergeType(int value){ preferences.putInt("SM_TYPE", value); } + + public String getSplitMergeRecent(){ return preferences.get("SM_RECENT", System.getProperty("user.home")); } + public void setSplitMergeRecent(String value){ preferences.put("SM_RECENT", value); } } diff --git a/src/main/java/nsusbloader/Controllers/NSLMainController.java b/src/main/java/nsusbloader/Controllers/NSLMainController.java index fd2988d..71ac235 100644 --- a/src/main/java/nsusbloader/Controllers/NSLMainController.java +++ b/src/main/java/nsusbloader/Controllers/NSLMainController.java @@ -323,5 +323,7 @@ public class NSLMainController implements Initializable { SettingsTabController.getNSPFileFilterForGL(), SettingsTabController.getGlOldVer() ); + + SplitMergeTabController.updatePreferencesOnExit(); // NOTE: This shit above should be re-written to similar pattern } } diff --git a/src/main/java/nsusbloader/Controllers/SplitMergeController.java b/src/main/java/nsusbloader/Controllers/SplitMergeController.java index 48bc6bc..30990cd 100644 --- a/src/main/java/nsusbloader/Controllers/SplitMergeController.java +++ b/src/main/java/nsusbloader/Controllers/SplitMergeController.java @@ -2,17 +2,129 @@ package nsusbloader.Controllers; import javafx.fxml.FXML; import javafx.fxml.Initializable; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.control.RadioButton; import javafx.scene.control.ToggleGroup; +import javafx.scene.layout.Region; +import javafx.stage.DirectoryChooser; +import javafx.stage.FileChooser; +import nsusbloader.AppPreferences; +import nsusbloader.MediatorControl; +import nsusbloader.ServiceWindow; +import nsusbloader.Utilities.SplitMergeTool; +import java.io.File; import java.net.URL; import java.util.ResourceBundle; public class SplitMergeController implements Initializable { @FXML private ToggleGroup splitMergeTogGrp; + @FXML + private RadioButton splitRad, mergeRad; + @FXML + private Button selectFileFolderBtn, + changeSaveToBtn, + convertBtn; + @FXML + private Label fileFolderLabelLbl, + fileFolderActualPathLbl, + saveToPathLbl; + + private Region convertRegion; @Override public void initialize(URL url, ResourceBundle resourceBundle) { - splitMergeTogGrp.selectToggle(splitMergeTogGrp.getToggles().get(0)); + convertRegion = new Region(); + convertBtn.setGraphic(convertRegion); + + splitRad.setOnAction((actionEvent -> { + convertRegion.getStyleClass().clear(); + convertRegion.getStyleClass().add("regionSplitToOne"); + fileFolderLabelLbl.setText(resourceBundle.getString("tabSplMrg_Txt_File")); + selectFileFolderBtn.setText(resourceBundle.getString("tabSplMrg_Btn_SelectFile")); + fileFolderActualPathLbl.setText(""); + convertBtn.setDisable(true); + })); + mergeRad.setOnAction((actionEvent -> { + convertRegion.getStyleClass().clear(); + convertRegion.getStyleClass().add("regionOneToSplit"); + fileFolderLabelLbl.setText(resourceBundle.getString("tabSplMrg_Txt_Folder")); + selectFileFolderBtn.setText(resourceBundle.getString("tabSplMrg_Btn_SelectFolder")); + fileFolderActualPathLbl.setText(""); + convertBtn.setDisable(true); + })); + + if (AppPreferences.getInstance().getSplitMergeType() == 0) + splitRad.fire(); + else + mergeRad.fire(); + + saveToPathLbl.setText(AppPreferences.getInstance().getSplitMergeRecent()); + + changeSaveToBtn.setOnAction((actionEvent -> { + DirectoryChooser dc = new DirectoryChooser(); + dc.setTitle(resourceBundle.getString("tabSplMrg_Btn_SelectFolder")); + dc.setInitialDirectory(new File(saveToPathLbl.getText())); + File saveToDir = dc.showDialog(changeSaveToBtn.getScene().getWindow()); + if (saveToDir != null) + saveToPathLbl.setText(saveToDir.getAbsolutePath()); + })); + + selectFileFolderBtn.setOnAction(actionEvent -> { + if (splitRad.isSelected()) { + FileChooser fc = new FileChooser(); + fc.setTitle(resourceBundle.getString("tabSplMrg_Btn_SelectFile")); + if (fileFolderActualPathLbl.getText().isEmpty()) + fc.setInitialDirectory(new File(System.getProperty("user.home"))); + else + fc.setInitialDirectory(new File(fileFolderActualPathLbl.getText()).getParentFile()); + File fileFile = fc.showOpenDialog(changeSaveToBtn.getScene().getWindow()); + if (fileFile == null) + return; + fileFolderActualPathLbl.setText(fileFile.getAbsolutePath()); + convertBtn.setDisable(false); + } + else{ + DirectoryChooser dc = new DirectoryChooser(); + dc.setTitle(resourceBundle.getString("tabSplMrg_Btn_SelectFolder")); + if (fileFolderActualPathLbl.getText().isEmpty()) + dc.setInitialDirectory(new File(System.getProperty("user.home"))); + else + dc.setInitialDirectory(new File(fileFolderActualPathLbl.getText())); + File folderFile = dc.showDialog(changeSaveToBtn.getScene().getWindow()); + if (folderFile == null) + return; + fileFolderActualPathLbl.setText(folderFile.getAbsolutePath()); + convertBtn.setDisable(false); + } + }); + + convertBtn.setOnAction(actionEvent -> { + if (MediatorControl.getInstance().getTransferActive()) { + ServiceWindow.getErrorNotification(resourceBundle.getString("windowTitleError"), resourceBundle.getString("windowBodyPleaseFinishTransfersFirst")); + return; + } + MediatorControl.getInstance().setTransferActive(true); + /* + if (splitRad.isSelected()){ + SplitMergeTool.splitFile(fileFolderActualPathLbl.getText(), saveToPathLbl.getText()); + System.out.println("split"); + } + else{ + System.out.println("merge"); + SplitMergeTool.mergeFile(fileFolderActualPathLbl.getText(), saveToPathLbl.getText()); + } + */ + }); + } + + public void updatePreferencesOnExit(){ + if (splitRad.isSelected()) + AppPreferences.getInstance().setSplitMergeType(0); + else + AppPreferences.getInstance().setSplitMergeType(1); + AppPreferences.getInstance().setSplitMergeRecent(saveToPathLbl.getText()); } } \ No newline at end of file diff --git a/src/main/java/nsusbloader/Utilities/SplitMergeTool.java b/src/main/java/nsusbloader/Utilities/SplitMergeTool.java new file mode 100644 index 0000000..510ad4b --- /dev/null +++ b/src/main/java/nsusbloader/Utilities/SplitMergeTool.java @@ -0,0 +1,86 @@ +package nsusbloader.Utilities; + +import java.io.*; + +public class SplitMergeTool { + + public static Runnable splitFile(String filePath, String saveToPath){ + File file = new File(filePath); + File folder = new File(saveToPath+File.separator+"!_"+file.getName()); + + if (! folder.mkdir()){ // TODO: PROMPT - remove directory? + if (folder.exists()) + ;// folder exists - return + else + ;// folder not created and not exists - return + } + + return new Runnable() { + @Override + public void run() { + try{ + BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); + + BufferedOutputStream fragmentBos; + + long counter; + + byte[] chunk; + + main_loop: + for (int i = 0; ; i++){ + fragmentBos = new BufferedOutputStream( + new FileOutputStream(new File(folder.getAbsolutePath()+File.separator+String.format("%02d", i))) + ); + + counter = 0; + + while (counter < 512){ // 0xffff0000 total + chunk = new byte[8388480]; + + if (bis.read(chunk) < 0){ + fragmentBos.close(); + break main_loop; + } + + fragmentBos.write(chunk); + + counter++; + } + fragmentBos.close(); + } + + bis.close(); + } + catch (Exception e){ + e.printStackTrace(); + } + } + }; + }; + + public static Runnable mergeFile(String filePath, String saveToPath){ + File folder = new File(filePath); + File resultFile = new File(saveToPath+File.separator+"!_"+folder.getName()); + //BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(resultFile)); + + for (File sss : folder.listFiles(new FilenameFilter() { + @Override + public boolean accept(File file, String s) { + System.out.println(s); + return false; + } + })){ + System.out.println("|"); + } + + Runnable runnable = new Runnable() { + @Override + public void run() { + + } + }; + + return runnable; + } +} diff --git a/src/main/resources/SplitMergeTab.fxml b/src/main/resources/SplitMergeTab.fxml index a0ba476..6c142ef 100644 --- a/src/main/resources/SplitMergeTab.fxml +++ b/src/main/resources/SplitMergeTab.fxml @@ -6,35 +6,57 @@ + - + - - - - - - - - + + + -