diff --git a/CHANGELOG.md b/CHANGELOG.md index fdf7e65a39e..e33e6ebd9c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -77,6 +77,7 @@ Note that this project **does not** adhere to [Semantic Versioning](https://semv - We changed the defualt [unwanted charachters](https://docs.jabref.org/setup/citationkeypatterns#removing-unwanted-characters) in the citation key generator and allow a dash (`-`) and colon (`:`) being part of a citation key. [#12144](https://github.com/JabRef/jabref/pull/12144) - The CitationKey column is now a default shown column for the entry table. [#10510](https://github.com/JabRef/jabref/issues/10510) - We disabled the actions "Open Terminal here" and "Reveal in file explorer" for unsaved libraries. [#11920](https://github.com/JabRef/jabref/issues/11920) +- JabRef now opens the corresponding directory in the library properties when "Browse" is clicked. [#12223](https://github.com/JabRef/jabref/pull/12223) ### Fixed diff --git a/src/main/java/org/jabref/gui/libraryproperties/general/GeneralPropertiesViewModel.java b/src/main/java/org/jabref/gui/libraryproperties/general/GeneralPropertiesViewModel.java index 2e28d8021fd..93edf244bd5 100644 --- a/src/main/java/org/jabref/gui/libraryproperties/general/GeneralPropertiesViewModel.java +++ b/src/main/java/org/jabref/gui/libraryproperties/general/GeneralPropertiesViewModel.java @@ -2,7 +2,9 @@ import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import java.nio.file.Path; +import java.util.Optional; import javafx.beans.property.BooleanProperty; import javafx.beans.property.ListProperty; @@ -18,6 +20,7 @@ import org.jabref.gui.libraryproperties.PropertiesTabViewModel; import org.jabref.gui.util.DirectoryDialogConfiguration; import org.jabref.logic.l10n.Encodings; +import org.jabref.logic.l10n.Localization; import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.shared.DatabaseLocation; import org.jabref.model.database.BibDatabaseContext; @@ -40,16 +43,12 @@ public class GeneralPropertiesViewModel implements PropertiesTabViewModel { private final BibDatabaseContext databaseContext; private final MetaData metaData; - private final DirectoryDialogConfiguration directoryDialogConfiguration; GeneralPropertiesViewModel(BibDatabaseContext databaseContext, DialogService dialogService, CliPreferences preferences) { this.dialogService = dialogService; this.preferences = preferences; this.databaseContext = databaseContext; this.metaData = databaseContext.getMetaData(); - - this.directoryDialogConfiguration = new DirectoryDialogConfiguration.Builder() - .withInitialDirectory(preferences.getFilePreferences().getWorkingDirectory()).build(); } @Override @@ -96,16 +95,22 @@ public void storeSettings() { } public void browseLibrarySpecificDir() { + DirectoryDialogConfiguration directoryDialogConfiguration = new DirectoryDialogConfiguration.Builder() + .withInitialDirectory(getBrowseDirectory(librarySpecificDirectoryProperty.getValue())).build(); dialogService.showDirectorySelectionDialog(directoryDialogConfiguration) .ifPresent(dir -> librarySpecificDirectoryProperty.setValue(dir.toAbsolutePath().toString())); } public void browseUserDir() { + DirectoryDialogConfiguration directoryDialogConfiguration = new DirectoryDialogConfiguration.Builder() + .withInitialDirectory(getBrowseDirectory(userSpecificFileDirectoryProperty.getValue())).build(); dialogService.showDirectorySelectionDialog(directoryDialogConfiguration) .ifPresent(dir -> userSpecificFileDirectoryProperty.setValue(dir.toAbsolutePath().toString())); } public void browseLatexDir() { + DirectoryDialogConfiguration directoryDialogConfiguration = new DirectoryDialogConfiguration.Builder() + .withInitialDirectory(getBrowseDirectory(laTexFileDirectoryProperty.getValue())).build(); dialogService.showDirectorySelectionDialog(directoryDialogConfiguration) .ifPresent(dir -> laTexFileDirectoryProperty.setValue(dir.toAbsolutePath().toString())); } @@ -141,4 +146,19 @@ public StringProperty userSpecificFileDirectoryProperty() { public StringProperty laTexFileDirectoryProperty() { return this.laTexFileDirectoryProperty; } + + private Path getBrowseDirectory(String configuredDir) { + if (configuredDir.isEmpty()) { + return preferences.getFilePreferences().getWorkingDirectory(); + } + Optional foundPath = this.databaseContext.getFileDirectories(preferences.getFilePreferences()).stream() + .filter(path -> path.toString().endsWith(configuredDir)) + .filter(Files::exists).findFirst(); + + if (foundPath.isEmpty()) { + dialogService.notify(Localization.lang("Path %0 could not be resolved. Using working dir.", configuredDir)); + return preferences.getFilePreferences().getWorkingDirectory(); + } + return foundPath.get(); + } } diff --git a/src/main/java/org/jabref/model/database/BibDatabaseContext.java b/src/main/java/org/jabref/model/database/BibDatabaseContext.java index bf4aa5154d8..f90a7c64fbd 100644 --- a/src/main/java/org/jabref/model/database/BibDatabaseContext.java +++ b/src/main/java/org/jabref/model/database/BibDatabaseContext.java @@ -162,10 +162,10 @@ public List getFileDirectories(FilePreferences preferences) { // Paths are a) ordered and b) should be contained only once in the result LinkedHashSet fileDirs = new LinkedHashSet<>(3); - Optional userFileDirectory = metaData.getUserFileDirectory(preferences.getUserAndHost()).map(dir -> getFileDirectoryPath(dir)); + Optional userFileDirectory = metaData.getUserFileDirectory(preferences.getUserAndHost()).map(this::getFileDirectoryPath); userFileDirectory.ifPresent(fileDirs::add); - Optional librarySpecificFileDirectory = metaData.getLibrarySpecificFileDirectory().map(dir -> getFileDirectoryPath(dir)); + Optional librarySpecificFileDirectory = metaData.getLibrarySpecificFileDirectory().map(this::getFileDirectoryPath); librarySpecificFileDirectory.ifPresent(fileDirs::add); // fileDirs.isEmpty() is true after these two if there are no directories set in the BIB file itself: diff --git a/src/main/resources/l10n/JabRef_en.properties b/src/main/resources/l10n/JabRef_en.properties index 2a4ab3bef81..cdd2cad328a 100644 --- a/src/main/resources/l10n/JabRef_en.properties +++ b/src/main/resources/l10n/JabRef_en.properties @@ -1059,6 +1059,8 @@ Expected\ syntax\ for\ --fetch\='\:'=Expected syntax f Library-specific\ file\ directory=Library-specific file directory User-specific\ file\ directory=User-specific file directory LaTeX\ file\ directory=LaTeX file directory +Path\ %0\ could\ not\ be\ resolved.\ Using\ working\ dir.=Path %0 could not be resolved. Using working dir. + You\ must\ enter\ an\ integer\ value\ in\ the\ interval\ 1025-65535=You must enter an integer value in the interval 1025-65535 Autocomplete\ names\ in\ 'Firstname\ Lastname'\ format\ only=Autocomplete names in 'Firstname Lastname' format only