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