Skip to content

Commit

Permalink
Open txt file from directory passed as run arg or drag & dropped (#72)
Browse files Browse the repository at this point in the history
* Open txt file from directory passed as runtime arg

* Allow directories to be opened via drag & drop
  • Loading branch information
Nianna authored Oct 20, 2024
1 parent e99701c commit b68dd92
Showing 1 changed file with 29 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import javafx.scene.layout.BorderPane;

import java.io.File;
import java.util.Arrays;
import java.util.Optional;

public class RootController implements Controller {
Expand Down Expand Up @@ -111,18 +112,24 @@ private boolean isATxtFile(File file) {

private void onDragOver(DragEvent event) {
Dragboard db = event.getDragboard();
if (db.hasFiles() && db.getFiles().stream().anyMatch(this::isATxtFile)) {
if (db.hasFiles() && findDraggedTxtFileToOpen(db).isPresent()) {
event.acceptTransferModes(TransferMode.MOVE);
} else {
event.consume();
}
}

private Optional<File> findDraggedTxtFileToOpen(Dragboard db) {
return db.getFiles().stream()
.filter(File::exists)
.findFirst()
.flatMap(this::getTxtFileFromFile);
}

private void onDragDropped(DragEvent event) {
Dragboard db = event.getDragboard();
if (db.hasFiles()) {
Optional<File> optFile = db.getFiles().stream().filter(this::isATxtFile).findFirst();
optFile.ifPresent(file -> {
findDraggedTxtFileToOpen(db).ifPresent(file -> {
Platform.runLater(() -> {
KarediApp.getInstance().saveChangesIfUserWantsTo();
txtContext.loadSongFile(file);
Expand Down Expand Up @@ -211,9 +218,26 @@ public void onStageShown() {
private Optional<File> findTxtFileToOpenFromRunParams() {
return KarediApp.getInstance().getParameters().getRaw()
.stream()
.filter(param -> param.endsWith(".txt"))
.findFirst()
.map(File::new);
.map(File::new)
.filter(File::exists)
.flatMap(this::getTxtFileFromFile);
}

private Optional<File> getTxtFileFromFile(File file) {
if (isATxtFile(file)) {
return Optional.of(file);
}
if (file.isDirectory()) {
File[] txtFiles = file.listFiles(this::isATxtFile);
if (txtFiles != null) {
return Arrays.stream(txtFiles)
.filter(txtFile -> file.getName().equalsIgnoreCase(Utils.trimExtension(txtFile.getName())))
.findFirst()
.or(() -> Arrays.stream(txtFiles).findFirst());
}
}
return Optional.empty();
}

private class EditLyricsAction extends KarediAction {
Expand Down

0 comments on commit b68dd92

Please sign in to comment.