From b472942f59b047b2fa33870b6413e27cabc49617 Mon Sep 17 00:00:00 2001 From: Stefan Kolb Date: Sun, 3 May 2020 15:20:35 +0200 Subject: [PATCH] Fix action helper (#6122) * fix: not every selected entry will have a file Related #6085 * fix: this will probably fix missing selection information on Linux I is hard to test this, as normally a selection should be given when the method is triggered. Fixes #6085 * Update src/main/java/org/jabref/gui/actions/ActionHelper.java Co-Authored-By: Tobias Diez * Update ActionHelper.java * Fix binding * Add changelog entry Co-authored-by: Tobias Diez Co-authored-by: Oliver Kopp --- CHANGELOG.md | 1 + .../org/jabref/gui/actions/ActionHelper.java | 16 ++++++---- .../gui/maintable/OpenFolderAction.java | 29 +++++++++++-------- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b62c5bffd0..d39e2745597 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve - We fixed an issue where opening a library from the recent libraries menu was not possible. [#5939](https://github.com/JabRef/jabref/issues/5939) - We fixed an issue with inconsistent capitalization of file extensions when downloading files. [#6115](https://github.com/JabRef/jabref/issues/6115) - We fixed the display of language and encoding in the preferences dialog. [#6130](https://github.com/JabRef/jabref/pull/6130) +- We fixed an error that sometimes occurred when using the context menu. [#6085](https://github.com/JabRef/jabref/issues/6085) - We fixed an issue where search full-text documents downloaded files with same name, overwriting existing files. [#6174](https://github.com/JabRef/jabref/pull/6174) - We fixed an issue when importing into current library an erroneous message "import cancelled" is displayed even though import is successful. [#6266](https://github.com/JabRef/jabref/issues/6266) - We fixed an issue where custom jstyles for Open/LibreOffice where not saved correctly. [#6170](https://github.com/JabRef/jabref/issues/6170) diff --git a/src/main/java/org/jabref/gui/actions/ActionHelper.java b/src/main/java/org/jabref/gui/actions/ActionHelper.java index 186e3666a5f..494c64f2fc3 100644 --- a/src/main/java/org/jabref/gui/actions/ActionHelper.java +++ b/src/main/java/org/jabref/gui/actions/ActionHelper.java @@ -7,6 +7,7 @@ import javafx.beans.binding.Bindings; import javafx.beans.binding.BooleanExpression; +import javafx.collections.ObservableList; import org.jabref.gui.StateManager; import org.jabref.model.entry.BibEntry; @@ -16,6 +17,9 @@ import org.jabref.model.util.FileHelper; import org.jabref.preferences.PreferencesService; +import org.fxmisc.easybind.EasyBind; +import org.fxmisc.easybind.monadic.MonadicBinding; + public class ActionHelper { public static BooleanExpression needsDatabase(StateManager stateManager) { return stateManager.activeDatabaseProperty().isPresent(); @@ -36,11 +40,13 @@ public static BooleanExpression isFieldSetForSelectedEntry(Field field, StateMan } public static BooleanExpression isAnyFieldSetForSelectedEntry(List fields, StateManager stateManager) { - BibEntry entry = stateManager.getSelectedEntries().get(0); - return Bindings.createBooleanBinding( - () -> entry.getFields().stream().anyMatch(fields::contains), - entry.getFieldsObservable(), - stateManager.getSelectedEntries()); + ObservableList selectedEntries = stateManager.getSelectedEntries(); + MonadicBinding fieldsAreSet = EasyBind.monadic(Bindings.valueAt(selectedEntries, 0)) + .flatMap(entry -> Bindings.createBooleanBinding(() -> { + return entry.getFields().stream().anyMatch(fields::contains); + }, entry.getFieldsObservable())) + .orElse(false); + return BooleanExpression.booleanExpression(fieldsAreSet); } public static BooleanExpression isFilePresentForSelectedEntry(StateManager stateManager, PreferencesService preferencesService) { diff --git a/src/main/java/org/jabref/gui/maintable/OpenFolderAction.java b/src/main/java/org/jabref/gui/maintable/OpenFolderAction.java index d3afc796ad0..d1fd013f79e 100644 --- a/src/main/java/org/jabref/gui/maintable/OpenFolderAction.java +++ b/src/main/java/org/jabref/gui/maintable/OpenFolderAction.java @@ -26,17 +26,22 @@ public OpenFolderAction(DialogService dialogService, StateManager stateManager, @Override public void execute() { stateManager.getActiveDatabase().ifPresent(databaseContext -> - stateManager.getSelectedEntries().forEach(entry -> { - LinkedFileViewModel linkedFileViewModel = new LinkedFileViewModel( - entry.getFiles().get(0), - entry, - databaseContext, - Globals.TASK_EXECUTOR, - dialogService, - preferencesService.getXMPPreferences(), - preferencesService.getFilePreferences(), - ExternalFileTypes.getInstance()); - linkedFileViewModel.openFolder(); - })); + stateManager.getSelectedEntries().forEach(entry -> { + if (entry.getFiles().isEmpty()) { + return; + } + + LinkedFileViewModel linkedFileViewModel = new LinkedFileViewModel( + entry.getFiles().get(0), + entry, + databaseContext, + Globals.TASK_EXECUTOR, + dialogService, + preferencesService.getXMPPreferences(), + preferencesService.getFilePreferences(), + ExternalFileTypes.getInstance() + ); + linkedFileViewModel.openFolder(); + })); } }