diff --git a/CHANGELOG.md b/CHANGELOG.md index e12f8311528..210870d767c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,6 +45,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve - `log.txt` now contains an entry if a BibTeX entry could not be parsed. - `log.txt` now contains debug messages. Debugging needs to be enabled explicitly. [#9678](https://github.com/JabRef/jabref/pull/9678) - `log.txt` does not contain entries for non-found files during PDF indexing. [#9678](https://github.com/JabRef/jabref/pull/9678) +- The hostname is now determined using environment variables (`COMPUTERNAME`/`HOSTNAME`) first. [#9910](https://github.com/JabRef/jabref/pull/9910) - We improved the Medline importer to correctly import ISO dates for `revised`. [#9536](https://github.com/JabRef/jabref/issues/9536) - To avoid cluttering of the directory, We always delete the `.sav` file upon successful write. [#9675](https://github.com/JabRef/jabref/pull/9675) - We improved the unlinking/deletion of multiple linked files of an entry using the Delete key. [#9473](https://github.com/JabRef/jabref/issues/9473) diff --git a/src/main/java/org/jabref/gui/desktop/os/DefaultDesktop.java b/src/main/java/org/jabref/gui/desktop/os/DefaultDesktop.java index 9f0996a3480..02608d60f7b 100644 --- a/src/main/java/org/jabref/gui/desktop/os/DefaultDesktop.java +++ b/src/main/java/org/jabref/gui/desktop/os/DefaultDesktop.java @@ -18,7 +18,7 @@ * https://tinylog.org/v2/configuration/ **/ @AllowedToUseAwt("Requires AWT to open a file") -public class DefaultDesktop implements NativeDesktop { +public class DefaultDesktop extends NativeDesktop { @Override public void openFile(String filePath, String fileType) throws IOException { diff --git a/src/main/java/org/jabref/gui/desktop/os/Linux.java b/src/main/java/org/jabref/gui/desktop/os/Linux.java index a115f04837e..7ff673136bd 100644 --- a/src/main/java/org/jabref/gui/desktop/os/Linux.java +++ b/src/main/java/org/jabref/gui/desktop/os/Linux.java @@ -31,7 +31,7 @@ * https://tinylog.org/v2/configuration/ **/ @AllowedToUseAwt("Requires AWT to open a file with the native method") -public class Linux implements NativeDesktop { +public class Linux extends NativeDesktop { private static final String ETC_ALTERNATIVES_X_TERMINAL_EMULATOR = "/etc/alternatives/x-terminal-emulator"; diff --git a/src/main/java/org/jabref/gui/desktop/os/NativeDesktop.java b/src/main/java/org/jabref/gui/desktop/os/NativeDesktop.java index 7c3441a24c4..29842c772dd 100644 --- a/src/main/java/org/jabref/gui/desktop/os/NativeDesktop.java +++ b/src/main/java/org/jabref/gui/desktop/os/NativeDesktop.java @@ -2,19 +2,34 @@ import java.io.File; import java.io.IOException; +import java.net.InetAddress; +import java.net.UnknownHostException; import java.nio.file.Files; import java.nio.file.Path; +import org.jabref.cli.Launcher; import org.jabref.gui.DialogService; import org.jabref.logic.util.BuildInfo; import org.jabref.logic.util.OS; import org.jabref.model.pdf.search.SearchFieldConstants; +import org.jabref.model.strings.StringUtil; import net.harawata.appdirs.AppDirsFactory; - -public interface NativeDesktop { - - void openFile(String filePath, String fileType) throws IOException; +import org.slf4j.LoggerFactory; + +/** + * This class contains bundles OS specific implementations for file directories and file/application open handling methods. + * In case the default does not work, subclasses provide the correct behavior. + * + *

+ * We cannot use a static logger instance here in this class as the Logger first needs to be configured in the {@link Launcher#addLogToDisk} + * The configuration of tinylog will become immutable as soon as the first log entry is issued. + * https://tinylog.org/v2/configuration/ + *

+ */ +public abstract class NativeDesktop { + + public abstract void openFile(String filePath, String fileType) throws IOException; /** * Opens a file on an Operating System, using the given application. @@ -22,27 +37,27 @@ public interface NativeDesktop { * @param filePath The filename. * @param application Link to the app that opens the file. */ - void openFileWithApplication(String filePath, String application) throws IOException; + public abstract void openFileWithApplication(String filePath, String application) throws IOException; - void openFolderAndSelectFile(Path file) throws IOException; + public abstract void openFolderAndSelectFile(Path file) throws IOException; - void openConsole(String absolutePath, DialogService dialogService) throws IOException; + public abstract void openConsole(String absolutePath, DialogService dialogService) throws IOException; - String detectProgramPath(String programName, String directoryName); + public abstract String detectProgramPath(String programName, String directoryName); /** * Returns the path to the system's applications folder. * * @return the path to the applications folder. */ - Path getApplicationDirectory(); + public abstract Path getApplicationDirectory(); /** * Get the user's default file chooser directory * * @return The path to the directory */ - default Path getDefaultFileChooserDirectory() { + public Path getDefaultFileChooserDirectory() { Path userDirectory = getUserDirectory(); Path documents = userDirectory.resolve("Documents"); if (!Files.exists(documents)) { @@ -56,11 +71,11 @@ default Path getDefaultFileChooserDirectory() { * * @return the path to the user directory. */ - default Path getUserDirectory() { + public Path getUserDirectory() { return Path.of(System.getProperty("user.home")); } - default Path getLogDirectory() { + public Path getLogDirectory() { return Path.of(AppDirsFactory.getInstance() .getUserDataDir( OS.APP_DIR_APP_NAME, @@ -69,7 +84,7 @@ default Path getLogDirectory() { .resolve(new BuildInfo().version.toString()); } - default Path getBackupDirectory() { + public Path getBackupDirectory() { return Path.of(AppDirsFactory.getInstance() .getUserDataDir( OS.APP_DIR_APP_NAME, @@ -77,17 +92,36 @@ default Path getBackupDirectory() { OS.APP_DIR_APP_AUTHOR)); } - default Path getFulltextIndexBaseDirectory() { + public Path getFulltextIndexBaseDirectory() { return Path.of(AppDirsFactory.getInstance() .getUserDataDir(OS.APP_DIR_APP_NAME, "lucene" + File.separator + SearchFieldConstants.VERSION, OS.APP_DIR_APP_AUTHOR)); } - default Path getSslDirectory() { + public Path getSslDirectory() { return Path.of(AppDirsFactory.getInstance() .getUserDataDir(OS.APP_DIR_APP_NAME, "ssl", OS.APP_DIR_APP_AUTHOR)); } + + public String getHostName() { + String hostName; + // Following code inspired by https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/SystemUtils.html#getHostName-- + // See also https://stackoverflow.com/a/20793241/873282 + hostName = System.getenv("HOSTNAME"); + if (StringUtil.isBlank(hostName)) { + hostName = System.getenv("COMPUTERNAME"); + } + if (StringUtil.isBlank(hostName)) { + try { + hostName = InetAddress.getLocalHost().getHostName(); + } catch (UnknownHostException e) { + LoggerFactory.getLogger(OS.class).info("Hostname not found. Using \"localhost\" as fallback.", e); + hostName = "localhost"; + } + } + return hostName; + } } diff --git a/src/main/java/org/jabref/gui/desktop/os/OSX.java b/src/main/java/org/jabref/gui/desktop/os/OSX.java index de85b103eb6..84bad205b84 100644 --- a/src/main/java/org/jabref/gui/desktop/os/OSX.java +++ b/src/main/java/org/jabref/gui/desktop/os/OSX.java @@ -18,7 +18,7 @@ * https://tinylog.org/v2/configuration/ **/ @AllowedToUseAwt("Requires AWT to open a file") -public class OSX implements NativeDesktop { +public class OSX extends NativeDesktop { @Override public void openFile(String filePath, String fileType) throws IOException { diff --git a/src/main/java/org/jabref/gui/desktop/os/Windows.java b/src/main/java/org/jabref/gui/desktop/os/Windows.java index e559f7dd033..994bc785c90 100644 --- a/src/main/java/org/jabref/gui/desktop/os/Windows.java +++ b/src/main/java/org/jabref/gui/desktop/os/Windows.java @@ -24,7 +24,7 @@ * The configuration of tinylog will become immutable as soon as the first log entry is issued. * https://tinylog.org/v2/configuration/ **/ -public class Windows implements NativeDesktop { +public class Windows extends NativeDesktop { private static final String DEFAULT_EXECUTABLE_EXTENSION = ".exe"; diff --git a/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java b/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java index fbfbb5c37e3..fc2ce8361fe 100644 --- a/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java +++ b/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java @@ -68,7 +68,7 @@ public LatexCitationsTabViewModel(BibDatabaseContext databaseContext, this.preferencesService = preferencesService; this.taskExecutor = taskExecutor; this.dialogService = dialogService; - this.directory = new SimpleObjectProperty<>(databaseContext.getMetaData().getLatexFileDirectory(preferencesService.getFilePreferences().getUser()) + this.directory = new SimpleObjectProperty<>(databaseContext.getMetaData().getLatexFileDirectory(preferencesService.getFilePreferences().getUserAndHost()) .orElse(FileUtil.getInitialDirectory(databaseContext, preferencesService.getFilePreferences().getWorkingDirectory()))); this.citationList = FXCollections.observableArrayList(); this.status = new SimpleObjectProperty<>(Status.IN_PROGRESS); @@ -130,7 +130,7 @@ private void cancelSearch() { private Collection searchAndParse(String citeKey) throws IOException { // we need to check whether the user meanwhile set the LaTeX file directory or the database changed locations - Path newDirectory = databaseContext.getMetaData().getLatexFileDirectory(preferencesService.getFilePreferences().getUser()) + Path newDirectory = databaseContext.getMetaData().getLatexFileDirectory(preferencesService.getFilePreferences().getUserAndHost()) .orElse(FileUtil.getInitialDirectory(databaseContext, preferencesService.getFilePreferences().getWorkingDirectory())); if (latexParserResult == null || !newDirectory.equals(directory.get())) { @@ -172,7 +172,7 @@ public void setLatexDirectory() { .withInitialDirectory(directory.get()).build(); dialogService.showDirectorySelectionDialog(directoryDialogConfiguration).ifPresent(selectedDirectory -> - databaseContext.getMetaData().setLatexFileDirectory(preferencesService.getFilePreferences().getUser(), selectedDirectory.toAbsolutePath())); + databaseContext.getMetaData().setLatexFileDirectory(preferencesService.getFilePreferences().getUserAndHost(), selectedDirectory.toAbsolutePath())); init(currentEntry); } diff --git a/src/main/java/org/jabref/gui/groups/GroupDialogViewModel.java b/src/main/java/org/jabref/gui/groups/GroupDialogViewModel.java index 944d5fbf41d..04b5e39c278 100644 --- a/src/main/java/org/jabref/gui/groups/GroupDialogViewModel.java +++ b/src/main/java/org/jabref/gui/groups/GroupDialogViewModel.java @@ -279,7 +279,7 @@ private void setupValidation() { * @return an absolute path if LatexFileDirectory exists; otherwise, returns input */ private Path getAbsoluteTexGroupPath(String input) { - Optional latexFileDirectory = currentDatabase.getMetaData().getLatexFileDirectory(preferencesService.getFilePreferences().getUser()); + Optional latexFileDirectory = currentDatabase.getMetaData().getLatexFileDirectory(preferencesService.getFilePreferences().getUserAndHost()); return latexFileDirectory.map(path -> path.resolve(input)).orElse(Path.of(input)); } @@ -444,7 +444,7 @@ public void texGroupBrowse() { .addExtensionFilter(StandardFileType.AUX) .withDefaultExtension(StandardFileType.AUX) .withInitialDirectory(currentDatabase.getMetaData() - .getLatexFileDirectory(preferencesService.getFilePreferences().getUser()) + .getLatexFileDirectory(preferencesService.getFilePreferences().getUserAndHost()) .orElse(FileUtil.getInitialDirectory(currentDatabase, preferencesService.getFilePreferences().getWorkingDirectory()))).build(); dialogService.showFileOpenDialog(fileDialogConfiguration) .ifPresent(file -> texGroupFilePathProperty.setValue( @@ -459,7 +459,7 @@ public void openHelpPage() { private List getFileDirectoriesAsPaths() { List fileDirs = new ArrayList<>(); MetaData metaData = currentDatabase.getMetaData(); - metaData.getLatexFileDirectory(preferencesService.getFilePreferences().getUser()).ifPresent(fileDirs::add); + metaData.getLatexFileDirectory(preferencesService.getFilePreferences().getUserAndHost()).ifPresent(fileDirs::add); return fileDirs; } 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 fa0cc2c4ea1..f54cfd5d151 100644 --- a/src/main/java/org/jabref/gui/libraryproperties/general/GeneralPropertiesViewModel.java +++ b/src/main/java/org/jabref/gui/libraryproperties/general/GeneralPropertiesViewModel.java @@ -60,8 +60,8 @@ public void setValues() { selectedEncodingProperty.setValue(metaData.getEncoding().orElse(StandardCharsets.UTF_8)); selectedDatabaseModeProperty.setValue(metaData.getMode().orElse(BibDatabaseMode.BIBLATEX)); generalFileDirectoryProperty.setValue(metaData.getDefaultFileDirectory().orElse("").trim()); - userSpecificFileDirectoryProperty.setValue(metaData.getUserFileDirectory(preferencesService.getFilePreferences().getUser()).orElse("").trim()); - laTexFileDirectoryProperty.setValue(metaData.getLatexFileDirectory(preferencesService.getFilePreferences().getUser()).map(Path::toString).orElse("")); + userSpecificFileDirectoryProperty.setValue(metaData.getUserFileDirectory(preferencesService.getFilePreferences().getUserAndHost()).orElse("").trim()); + laTexFileDirectoryProperty.setValue(metaData.getLatexFileDirectory(preferencesService.getFilePreferences().getUserAndHost()).map(Path::toString).orElse("")); } @Override @@ -80,16 +80,16 @@ public void storeSettings() { String userSpecificFileDirectory = userSpecificFileDirectoryProperty.getValue(); if (userSpecificFileDirectory.isEmpty()) { - newMetaData.clearUserFileDirectory(preferencesService.getFilePreferences().getUser()); + newMetaData.clearUserFileDirectory(preferencesService.getFilePreferences().getUserAndHost()); } else { - newMetaData.setUserFileDirectory(preferencesService.getFilePreferences().getUser(), userSpecificFileDirectory); + newMetaData.setUserFileDirectory(preferencesService.getFilePreferences().getUserAndHost(), userSpecificFileDirectory); } String latexFileDirectory = laTexFileDirectoryProperty.getValue(); if (latexFileDirectory.isEmpty()) { - newMetaData.clearLatexFileDirectory(preferencesService.getFilePreferences().getUser()); + newMetaData.clearLatexFileDirectory(preferencesService.getFilePreferences().getUserAndHost()); } else { - newMetaData.setLatexFileDirectory(preferencesService.getFilePreferences().getUser(), Path.of(latexFileDirectory)); + newMetaData.setLatexFileDirectory(preferencesService.getFilePreferences().getUserAndHost(), Path.of(latexFileDirectory)); } databaseContext.setMetaData(newMetaData); diff --git a/src/main/java/org/jabref/gui/texparser/ParseLatexDialogViewModel.java b/src/main/java/org/jabref/gui/texparser/ParseLatexDialogViewModel.java index cc73c256733..a374ee73f99 100644 --- a/src/main/java/org/jabref/gui/texparser/ParseLatexDialogViewModel.java +++ b/src/main/java/org/jabref/gui/texparser/ParseLatexDialogViewModel.java @@ -69,7 +69,7 @@ public ParseLatexDialogViewModel(BibDatabaseContext databaseContext, this.taskExecutor = taskExecutor; this.preferencesService = preferencesService; this.fileMonitor = fileMonitor; - this.latexFileDirectory = new SimpleStringProperty(databaseContext.getMetaData().getLatexFileDirectory(preferencesService.getFilePreferences().getUser()) + this.latexFileDirectory = new SimpleStringProperty(databaseContext.getMetaData().getLatexFileDirectory(preferencesService.getFilePreferences().getUserAndHost()) .orElse(FileUtil.getInitialDirectory(databaseContext, preferencesService.getFilePreferences().getWorkingDirectory())) .toAbsolutePath().toString()); this.root = new SimpleObjectProperty<>(); diff --git a/src/main/java/org/jabref/model/database/BibDatabaseContext.java b/src/main/java/org/jabref/model/database/BibDatabaseContext.java index 86050db0a4e..12d67a71a2f 100644 --- a/src/main/java/org/jabref/model/database/BibDatabaseContext.java +++ b/src/main/java/org/jabref/model/database/BibDatabaseContext.java @@ -154,7 +154,7 @@ public List getFileDirectories(FilePreferences preferences) { List fileDirs = new ArrayList<>(); // 1. Metadata user-specific directory - metaData.getUserFileDirectory(preferences.getUser()) + metaData.getUserFileDirectory(preferences.getUserAndHost()) .ifPresent(userFileDirectory -> fileDirs.add(getFileDirectoryPath(userFileDirectory))); // 2. Metadata general directory diff --git a/src/main/java/org/jabref/preferences/FilePreferences.java b/src/main/java/org/jabref/preferences/FilePreferences.java index 84bbd96e26f..e937943fcca 100644 --- a/src/main/java/org/jabref/preferences/FilePreferences.java +++ b/src/main/java/org/jabref/preferences/FilePreferences.java @@ -25,7 +25,7 @@ public class FilePreferences { public static final String[] DEFAULT_FILENAME_PATTERNS = new String[] {"[bibtexkey]", "[bibtexkey] - [title]"}; - private final StringProperty user = new SimpleStringProperty(); + private final StringProperty userAndHost = new SimpleStringProperty(); private final SimpleStringProperty mainFileDirectory = new SimpleStringProperty(); private final BooleanProperty storeFilesRelativeToBibFile = new SimpleBooleanProperty(); private final StringProperty fileNamePattern = new SimpleStringProperty(); @@ -35,9 +35,9 @@ public class FilePreferences { private final ObjectProperty workingDirectory = new SimpleObjectProperty<>(); private final ObservableSet externalFileTypes = FXCollections.observableSet(new TreeSet<>(Comparator.comparing(ExternalFileType::getName))); private final BooleanProperty createBackup = new SimpleBooleanProperty(); - private final ObjectProperty backupDiretory = new SimpleObjectProperty<>(); + private final ObjectProperty backupDirectory = new SimpleObjectProperty<>(); - public FilePreferences(String user, + public FilePreferences(String userAndHost, String mainFileDirectory, boolean storeFilesRelativeToBibFile, String fileNamePattern, @@ -48,7 +48,7 @@ public FilePreferences(String user, Set externalFileTypes, boolean createBackup, Path backupDirectory) { - this.user.setValue(user); + this.userAndHost.setValue(userAndHost); this.mainFileDirectory.setValue(mainFileDirectory); this.storeFilesRelativeToBibFile.setValue(storeFilesRelativeToBibFile); this.fileNamePattern.setValue(fileNamePattern); @@ -58,11 +58,11 @@ public FilePreferences(String user, this.workingDirectory.setValue(workingDirectory); this.externalFileTypes.addAll(externalFileTypes); this.createBackup.setValue(createBackup); - this.backupDiretory.setValue(backupDirectory); + this.backupDirectory.setValue(backupDirectory); } - public String getUser() { - return user.getValue(); + public String getUserAndHost() { + return userAndHost.getValue(); } public Optional getMainFileDirectory() { @@ -170,14 +170,14 @@ public BooleanProperty createBackupProperty() { } public ObjectProperty backupDirectoryProperty() { - return this.backupDiretory; + return this.backupDirectory; } public void setBackupDirectory(Path backupPath) { - this.backupDiretory.set(backupPath); + this.backupDirectory.set(backupPath); } public Path getBackupDirectory() { - return this.backupDiretory.getValue(); + return this.backupDirectory.getValue(); } } diff --git a/src/main/java/org/jabref/preferences/InternalPreferences.java b/src/main/java/org/jabref/preferences/InternalPreferences.java index f323afb6f79..f7996473c5c 100644 --- a/src/main/java/org/jabref/preferences/InternalPreferences.java +++ b/src/main/java/org/jabref/preferences/InternalPreferences.java @@ -15,16 +15,16 @@ public class InternalPreferences { private final ObjectProperty ignoredVersion; private final ObjectProperty lastPreferencesExportPath; - private final StringProperty user; + private final StringProperty userAndHost; private final BooleanProperty memoryStickMode; public InternalPreferences(Version ignoredVersion, Path exportPath, - String user, + String userAndHost, boolean memoryStickMode) { this.ignoredVersion = new SimpleObjectProperty<>(ignoredVersion); this.lastPreferencesExportPath = new SimpleObjectProperty<>(exportPath); - this.user = new SimpleStringProperty(user); + this.userAndHost = new SimpleStringProperty(userAndHost); this.memoryStickMode = new SimpleBooleanProperty(memoryStickMode); } @@ -52,8 +52,8 @@ public void setLastPreferencesExportPath(Path lastPreferencesExportPath) { this.lastPreferencesExportPath.set(lastPreferencesExportPath); } - public String getUser() { - return user.get(); + public String getUserAndHost() { + return userAndHost.get(); } public boolean isMemoryStickMode() { diff --git a/src/main/java/org/jabref/preferences/JabRefPreferences.java b/src/main/java/org/jabref/preferences/JabRefPreferences.java index 00e5d9416d4..53ddba0445a 100644 --- a/src/main/java/org/jabref/preferences/JabRefPreferences.java +++ b/src/main/java/org/jabref/preferences/JabRefPreferences.java @@ -6,8 +6,6 @@ import java.io.OutputStream; import java.io.Reader; import java.io.StringReader; -import java.net.InetAddress; -import java.net.UnknownHostException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; @@ -423,7 +421,7 @@ public class JabRefPreferences implements PreferencesService { * Cache variables */ private Map> entryEditorTabList; - private String userName; + private String userAndHost; private LibraryPreferences libraryPreferences; private TelemetryPreferences telemetryPreferences; @@ -733,7 +731,7 @@ private JabRefPreferences() { defaults.put(FILE_BROWSER_COMMAND, ""); } - // versioncheck defaults + // version check defaults defaults.put(VERSION_IGNORED_UPDATE, ""); // preview @@ -1340,7 +1338,13 @@ public OwnerPreferences getOwnerPreferences() { getBoolean(OVERWRITE_OWNER)); EasyBind.listen(ownerPreferences.useOwnerProperty(), (obs, oldValue, newValue) -> putBoolean(USE_OWNER, newValue)); - EasyBind.listen(ownerPreferences.defaultOwnerProperty(), (obs, oldValue, newValue) -> put(DEFAULT_OWNER, newValue)); + EasyBind.listen(ownerPreferences.defaultOwnerProperty(), (obs, oldValue, newValue) -> { + put(DEFAULT_OWNER, newValue); + // trigger re-determination of userAndHost and the dependent preferences + userAndHost = null; + filePreferences = null; + internalPreferences = null; + }); EasyBind.listen(ownerPreferences.overwriteOwnerProperty(), (obs, oldValue, newValue) -> putBoolean(OVERWRITE_OWNER, newValue)); return ownerPreferences; @@ -1996,7 +2000,7 @@ public InternalPreferences getInternalPreferences() { internalPreferences = new InternalPreferences( Version.parse(get(VERSION_IGNORED_UPDATE)), getPath(PREFS_EXPORT_PATH, OS.getNativeDesktop().getDefaultFileChooserDirectory()), - getUser(), + getUserAndHost(), getBoolean(MEMORY_STICK_MODE)); EasyBind.listen(internalPreferences.ignoredVersionProperty(), @@ -2018,18 +2022,12 @@ public InternalPreferences getInternalPreferences() { return internalPreferences; } - private String getUser() { - if (StringUtil.isNotBlank(userName)) { - return userName; - } - - try { - userName = get(DEFAULT_OWNER) + '-' + InetAddress.getLocalHost().getHostName(); - return userName; - } catch (UnknownHostException ex) { - LOGGER.error("Hostname not found. Please go to https://docs.jabref.org/ to find possible problem resolution", ex); - return get(DEFAULT_OWNER); + private String getUserAndHost() { + if (StringUtil.isNotBlank(userAndHost)) { + return userAndHost; } + userAndHost = get(DEFAULT_OWNER) + '-' + OS.getNativeDesktop().getHostName(); + return userAndHost; } //************************************************************************************************************* @@ -2117,7 +2115,7 @@ public FilePreferences getFilePreferences() { } filePreferences = new FilePreferences( - getInternalPreferences().getUser(), + getInternalPreferences().getUserAndHost(), getPath(MAIN_FILE_DIRECTORY, OS.getNativeDesktop().getDefaultFileChooserDirectory()).toString(), getBoolean(STORE_RELATIVE_TO_BIB), get(IMPORT_FILENAMEPATTERN), diff --git a/src/test/java/org/jabref/gui/groups/GroupDialogViewModelTest.java b/src/test/java/org/jabref/gui/groups/GroupDialogViewModelTest.java index 9edff5c163b..6022ef4d7c5 100644 --- a/src/test/java/org/jabref/gui/groups/GroupDialogViewModelTest.java +++ b/src/test/java/org/jabref/gui/groups/GroupDialogViewModelTest.java @@ -46,7 +46,7 @@ void setUp(@TempDir Path temporaryFolder) { when(preferencesService.getBibEntryPreferences()).thenReturn(mock(BibEntryPreferences.class)); when(preferencesService.getBibEntryPreferences().getKeywordSeparator()).thenReturn(','); when(preferencesService.getFilePreferences()).thenReturn(mock(FilePreferences.class)); - when(preferencesService.getFilePreferences().getUser()).thenReturn("MockedUser"); + when(preferencesService.getFilePreferences().getUserAndHost()).thenReturn("MockedUser-mockedhost"); when(preferencesService.getGroupsPreferences()).thenReturn(groupsPreferences); bibDatabaseContext.setMetaData(metaData); diff --git a/src/test/java/org/jabref/logic/exporter/EmbeddedBibFilePdfExporterTest.java b/src/test/java/org/jabref/logic/exporter/EmbeddedBibFilePdfExporterTest.java index 25d30349194..f0e7d43f046 100644 --- a/src/test/java/org/jabref/logic/exporter/EmbeddedBibFilePdfExporterTest.java +++ b/src/test/java/org/jabref/logic/exporter/EmbeddedBibFilePdfExporterTest.java @@ -94,7 +94,7 @@ private static void initBibEntries() throws IOException { @BeforeEach void setUp() throws IOException { filePreferences = mock(FilePreferences.class); - when(filePreferences.getUser()).thenReturn(tempDir.toAbsolutePath().toString()); + when(filePreferences.getUserAndHost()).thenReturn(tempDir.toAbsolutePath().toString()); when(filePreferences.shouldStoreFilesRelativeToBibFile()).thenReturn(false); BibDatabaseMode bibDatabaseMode = BibDatabaseMode.BIBTEX; diff --git a/src/test/java/org/jabref/logic/exporter/XmpPdfExporterTest.java b/src/test/java/org/jabref/logic/exporter/XmpPdfExporterTest.java index acfe7457bed..4e07e12ba48 100644 --- a/src/test/java/org/jabref/logic/exporter/XmpPdfExporterTest.java +++ b/src/test/java/org/jabref/logic/exporter/XmpPdfExporterTest.java @@ -103,7 +103,7 @@ void setUp() throws IOException { encoding = Charset.defaultCharset(); filePreferences = mock(FilePreferences.class); - when(filePreferences.getUser()).thenReturn(tempDir.toAbsolutePath().toString()); + when(filePreferences.getUserAndHost()).thenReturn(tempDir.toAbsolutePath().toString()); when(filePreferences.shouldStoreFilesRelativeToBibFile()).thenReturn(false); importer = new PdfXmpImporter(xmpPreferences); diff --git a/src/test/java/org/jabref/logic/pdf/search/indexing/DocumentReaderTest.java b/src/test/java/org/jabref/logic/pdf/search/indexing/DocumentReaderTest.java index 047689eb543..982504c9938 100644 --- a/src/test/java/org/jabref/logic/pdf/search/indexing/DocumentReaderTest.java +++ b/src/test/java/org/jabref/logic/pdf/search/indexing/DocumentReaderTest.java @@ -33,7 +33,7 @@ public void setup() { this.databaseContext = mock(BibDatabaseContext.class); when(databaseContext.getFileDirectories(Mockito.any())).thenReturn(Collections.singletonList(Path.of("src/test/resources/pdfs"))); this.filePreferences = mock(FilePreferences.class); - when(filePreferences.getUser()).thenReturn("test"); + when(filePreferences.getUserAndHost()).thenReturn("testuser-testhost"); when(filePreferences.getMainFileDirectory()).thenReturn(Optional.empty()); when(filePreferences.shouldStoreFilesRelativeToBibFile()).thenReturn(true); }