diff --git a/CHANGELOG.md b/CHANGELOG.md index aacb7819b24..6ffa4e88747 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ We refer to [GitHub issues](https://github.com/JabRef/jabref/issues) by using `# - We fixed an issue where the ampersand character wasn't rendering correctly on previews. [#3840](https://github.com/JabRef/jabref/issues/3840) - We fixed an issue where an erroneous "The library has been modified by another program" message was shown when saving. [#4877](https://github.com/JabRef/jabref/issues/4877) - We fixed an issue where the file extension was missing after downloading a file (we now fall-back to pdf). [#5816](https://github.com/JabRef/jabref/issues/5816) +- We fixed an issue where cleaning up entries broke web URLs, if "Make paths of linked files relative (if possible)" was enabled, which resulted in various other issues subsequently. [#5861](https://github.com/JabRef/jabref/issues/5861) ### Removed - Ampersands are no longer escaped by default in the `bib` file. If you want to keep the current behaviour, you can use the new "Escape Ampersands" formatter as a save action. diff --git a/src/main/java/org/jabref/logic/cleanup/RelativePathsCleanup.java b/src/main/java/org/jabref/logic/cleanup/RelativePathsCleanup.java index 9b18e939782..1bbecb2f41c 100644 --- a/src/main/java/org/jabref/logic/cleanup/RelativePathsCleanup.java +++ b/src/main/java/org/jabref/logic/cleanup/RelativePathsCleanup.java @@ -33,10 +33,17 @@ public List cleanup(BibEntry entry) { for (LinkedFile fileEntry : fileList) { String oldFileName = fileEntry.getLink(); - String newFileName = FileUtil - .relativize(Paths.get(oldFileName), databaseContext.getFileDirectoriesAsPaths(filePreferences)) - .toString(); - + String newFileName = null; + if (fileEntry.isOnlineLink()) { + // keep online link untouched + newFileName = oldFileName; + } + else { + // only try to transform local file path to relative one + newFileName = FileUtil + .relativize(Paths.get(oldFileName), databaseContext.getFileDirectoriesAsPaths(filePreferences)) + .toString(); + } LinkedFile newFileEntry = fileEntry; if (!oldFileName.equals(newFileName)) { newFileEntry = new LinkedFile(fileEntry.getDescription(), newFileName, fileEntry.getFileType()); @@ -56,5 +63,4 @@ public List cleanup(BibEntry entry) { return Collections.emptyList(); } - } diff --git a/src/main/java/org/jabref/model/entry/LinkedFile.java b/src/main/java/org/jabref/model/entry/LinkedFile.java index 62a71dac417..3c79ffd6812 100644 --- a/src/main/java/org/jabref/model/entry/LinkedFile.java +++ b/src/main/java/org/jabref/model/entry/LinkedFile.java @@ -135,10 +135,11 @@ private void readObject(ObjectInputStream in) throws IOException { /** * Checks if the given String is an online link * @param toCheck The String to check - * @return True if it starts with http://, https:// or contains www; false otherwise + * @return true, if it starts with "http://", "https://" or contains "www."; false otherwise */ private boolean isOnlineLink(String toCheck) { - return toCheck.startsWith("http://") || toCheck.startsWith("https://") || toCheck.contains("www."); + String normalizedFilePath = toCheck.trim().toLowerCase(); + return normalizedFilePath.startsWith("http://") || normalizedFilePath.startsWith("https://") || normalizedFilePath.contains("www."); } @Override