From 139806c9c7b757813739ca3cd6aa649dd0150177 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Wed, 2 Nov 2022 08:59:19 +0100 Subject: [PATCH 1/3] Updating specialFieldValues with possibly modified value from BibEntry Workaround that is necessary because specialFieldValues and entry.fields get updated separately (entry.fields before speicalFieldValues). This lead to the behaviour that when sorting for a special field in the maintaible (like ranking or read status), the sorting does not get updated properly on change. --- .../gui/maintable/BibEntryTableViewModel.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/jabref/gui/maintable/BibEntryTableViewModel.java b/src/main/java/org/jabref/gui/maintable/BibEntryTableViewModel.java index dcf6240fcea..182b2e25ecd 100644 --- a/src/main/java/org/jabref/gui/maintable/BibEntryTableViewModel.java +++ b/src/main/java/org/jabref/gui/maintable/BibEntryTableViewModel.java @@ -104,13 +104,25 @@ public ObservableValue> getMatchedGroups() { public ObservableValue> getSpecialField(SpecialField field) { OptionalBinding value = specialFieldValues.get(field); + // Fetch possibly updated value from BibEntry entry + Optional currentValue = this.entry.getField(field); if (value != null) { - return value; + if (currentValue.isEmpty() && value.getValue().isEmpty()) { + var zeroValue = getField(field).flatMapOpt(fieldValue -> field.parseValue("CLEAR_RANK").map(SpecialFieldValueViewModel::new)); + specialFieldValues.put(field, zeroValue); + return zeroValue; + } else if (value.getValue().isEmpty() || !value.getValue().get().getValue().getFieldValue().equals(currentValue)) { + // specialFieldValues value and BibEntry value differ => Set specialFieldValues value to BibEntry value + value = getField(field).flatMapOpt(fieldValue -> field.parseValue(fieldValue).map(SpecialFieldValueViewModel::new)); + specialFieldValues.put(field, value); + return value; + } + // END WORKAROUND } else { value = getField(field).flatMapOpt(fieldValue -> field.parseValue(fieldValue).map(SpecialFieldValueViewModel::new)); specialFieldValues.put(field, value); - return value; } + return value; } public ObservableValue getFields(OrFields fields) { From 60028810d8eb38e9cd2b517a825023ce81be14c9 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Wed, 2 Nov 2022 09:10:25 +0100 Subject: [PATCH 2/3] Updating changelog with #9334 --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f3c3ca1d53..cf4354f3bac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -55,6 +55,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve ### Fixed +- We fixed that sorting of entries in the maintable by special fields is updated immediately [#9334](https://github.com/JabRef/jabref/issues/9334) - We fixed the Cleanup entries dialog is partially visible [#9223](https://github.com/JabRef/jabref/issues/9223) - We fixed the display of the "Customize Entry Types" dialogue title [#9198](https://github.com/JabRef/jabref/issues/9198) - We fixed an issue where author names with tilde accents (for example ñ) were marked as "Names are not in the standard BibTex format" [#8071](https://github.com/JabRef/jabref/issues/8071) From 886473cff6ca2d176c11e25ab463380d5ca659b3 Mon Sep 17 00:00:00 2001 From: Sebastian Franz <32578476+SebieF@users.noreply.github.com> Date: Thu, 3 Nov 2022 09:51:56 +0100 Subject: [PATCH 3/3] Removing unnecessary comment Co-authored-by: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com> --- .../java/org/jabref/gui/maintable/BibEntryTableViewModel.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/org/jabref/gui/maintable/BibEntryTableViewModel.java b/src/main/java/org/jabref/gui/maintable/BibEntryTableViewModel.java index 182b2e25ecd..da8c89c9e70 100644 --- a/src/main/java/org/jabref/gui/maintable/BibEntryTableViewModel.java +++ b/src/main/java/org/jabref/gui/maintable/BibEntryTableViewModel.java @@ -117,7 +117,6 @@ public ObservableValue> getSpecialField(Spe specialFieldValues.put(field, value); return value; } - // END WORKAROUND } else { value = getField(field).flatMapOpt(fieldValue -> field.parseValue(fieldValue).map(SpecialFieldValueViewModel::new)); specialFieldValues.put(field, value);