mirror of
https://github.com/developersu/ns-usbloader.git
synced 2025-05-23 11:37:06 -04:00
A bit more for split-merge files functionality
This commit is contained in:
parent
4dc6d0ae0c
commit
d00b914214
10 changed files with 321 additions and 29 deletions
|
@ -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); }
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
86
src/main/java/nsusbloader/Utilities/SplitMergeTool.java
Normal file
86
src/main/java/nsusbloader/Utilities/SplitMergeTool.java
Normal file
|
@ -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;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue