From 4eaf25216d520b9dedebce820ab39f843080d49d Mon Sep 17 00:00:00 2001 From: Alexander Huynh Date: Wed, 28 Feb 2024 02:48:04 +0100 Subject: [PATCH] feat: improve logic for when filemonitor is added (JabRef#10585) Made sure that filemonitor first is added when the user navigates to LaTeX Citation for the first time for each .bib tab, also added logic to remove the old listener whenever the directory target is changed However, an issue is that listener seemingly is still watching over the old directory even though the listener has been removed --- .../LatexCitationsTabViewModel.java | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java b/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java index 664e35816dc..922dd71ed34 100644 --- a/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java +++ b/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java @@ -58,6 +58,7 @@ enum Status { private LatexParserResult latexParserResult; private BibEntry currentEntry; private final FileUpdateMonitor fileUpdateMonitor; + private boolean hasListener; public LatexCitationsTabViewModel(BibDatabaseContext databaseContext, PreferencesService preferencesService, @@ -74,6 +75,7 @@ public LatexCitationsTabViewModel(BibDatabaseContext databaseContext, this.searchError = new SimpleStringProperty(""); this.fileUpdateMonitor = Globals.getFileUpdateMonitor(); + this.hasListener = false; } public void init(BibEntry entry) { @@ -82,6 +84,16 @@ public void init(BibEntry entry) { currentEntry = entry; Optional citeKey = entry.getCitationKey(); + // make sure that we only add the listener once at the beginning + if (!hasListener) { + try { + fileUpdateMonitor.addListenerForFile(directory.get(), this::refreshLatexDirectory); + hasListener = true; + } catch (IOException e) { + throw new RuntimeException(e); + } + } + if (citeKey.isPresent()) { startSearch(citeKey.get()); } else { @@ -135,7 +147,6 @@ private Collection searchAndParse(String citeKey) throws IOException { .orElse(FileUtil.getInitialDirectory(databaseContext, preferencesService.getFilePreferences().getWorkingDirectory())); if (latexParserResult == null || !newDirectory.equals(directory.get())) { - fileUpdateMonitor.addListenerForFile(newDirectory, this::refreshLatexDirectory); directory.set(newDirectory); if (!newDirectory.toFile().exists()) { @@ -170,8 +181,16 @@ public void setLatexDirectory() { DirectoryDialogConfiguration directoryDialogConfiguration = new DirectoryDialogConfiguration.Builder() .withInitialDirectory(directory.get()).build(); - dialogService.showDirectorySelectionDialog(directoryDialogConfiguration).ifPresent(selectedDirectory -> - databaseContext.getMetaData().setLatexFileDirectory(preferencesService.getFilePreferences().getUserAndHost(), selectedDirectory.toAbsolutePath())); + fileUpdateMonitor.removeListener(directory.get(), this::refreshLatexDirectory); + + dialogService.showDirectorySelectionDialog(directoryDialogConfiguration).ifPresent(selectedDirectory -> { + databaseContext.getMetaData().setLatexFileDirectory(preferencesService.getFilePreferences().getUserAndHost(), selectedDirectory.toAbsolutePath()); + try { + fileUpdateMonitor.addListenerForFile(selectedDirectory, this::refreshLatexDirectory); + } catch (IOException e) { + throw new RuntimeException(e); + } + }); init(currentEntry); }