A bit more for split-merge files functionality

This commit is contained in:
Dmitry Isaenko 2020-01-21 03:22:22 +03:00
parent 4dc6d0ae0c
commit d00b914214
10 changed files with 321 additions and 29 deletions

View file

@ -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); }
}

View file

@ -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
}
}

View file

@ -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());
}
}

View 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;
}
}