diff --git a/CHANGELOG.md b/CHANGELOG.md index e4d92b3ca60..002096aa0ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve ### Added +- We enabled the user to customize the API Key for some fetchers. [#6877](https://github.com/JabRef/jabref/issues/6877) - We added an extra option when right-clicking an entry in the Entry List to copy either the DOI or the DOI url. - We added a fetcher for [Directory of Open Access Books (DOAB)](https://doabooks.org/) [8576](https://github.com/JabRef/jabref/issues/8576) - We added an extra option to ask the user whether they want to open to reveal the folder holding the saved file with the file selected. [#8195](https://github.com/JabRef/jabref/issues/8195) diff --git a/src/main/java/org/jabref/cli/ArgumentProcessor.java b/src/main/java/org/jabref/cli/ArgumentProcessor.java index 7a7075539a3..f1aaa0653d7 100644 --- a/src/main/java/org/jabref/cli/ArgumentProcessor.java +++ b/src/main/java/org/jabref/cli/ArgumentProcessor.java @@ -157,7 +157,8 @@ private static Optional importFile(Path file, String importFormat) // * means "guess the format": System.out.println(Localization.lang("Importing in unknown format") + ": " + file); - ImportFormatReader.UnknownFormatImport importResult = Globals.IMPORT_FORMAT_READER.importUnknownFormat(file, new DummyFileUpdateMonitor()); + ImportFormatReader.UnknownFormatImport importResult = + Globals.IMPORT_FORMAT_READER.importUnknownFormat(file, new DummyFileUpdateMonitor()); System.out.println(Localization.lang("Format used") + ": " + importResult.format); return Optional.of(importResult.parserResult); @@ -526,7 +527,11 @@ private void saveDatabase(BibDatabase newBase, String subName) { SavePreferences savePreferences = preferencesService.getSavePreferences(); AtomicFileWriter fileWriter = new AtomicFileWriter(Path.of(subName), StandardCharsets.UTF_8); BibWriter bibWriter = new BibWriter(fileWriter, OS.NEWLINE); - BibDatabaseWriter databaseWriter = new BibtexDatabaseWriter(bibWriter, generalPreferences, savePreferences, Globals.entryTypesManager); + BibDatabaseWriter databaseWriter = new BibtexDatabaseWriter( + bibWriter, + generalPreferences, + savePreferences, + Globals.entryTypesManager); databaseWriter.saveDatabase(new BibDatabaseContext(newBase)); // Show just a warning message if encoding did not work for all characters: @@ -586,13 +591,20 @@ private void importPreferences() { preferencesService.importPreferences(Path.of(cli.getPreferencesImport())); Globals.entryTypesManager.addCustomOrModifiedTypes(preferencesService.getBibEntryTypes(BibDatabaseMode.BIBTEX), preferencesService.getBibEntryTypes(BibDatabaseMode.BIBLATEX)); - List customExporters = preferencesService.getCustomExportFormats(Globals.journalAbbreviationRepository); + List customExporters = + preferencesService.getCustomExportFormats(Globals.journalAbbreviationRepository); LayoutFormatterPreferences layoutPreferences = preferencesService.getLayoutFormatterPreferences(Globals.journalAbbreviationRepository); SavePreferences savePreferences = preferencesService.getSavePreferencesForExport(); XmpPreferences xmpPreferences = preferencesService.getXmpPreferences(); BibDatabaseMode bibDatabaseMode = preferencesService.getGeneralPreferences().getDefaultBibDatabaseMode(); - Globals.exportFactory = ExporterFactory.create(customExporters, layoutPreferences, savePreferences, xmpPreferences, bibDatabaseMode, Globals.entryTypesManager); + Globals.exportFactory = ExporterFactory.create( + customExporters, + layoutPreferences, + savePreferences, + xmpPreferences, + bibDatabaseMode, + Globals.entryTypesManager); } catch (JabRefException ex) { LOGGER.error("Cannot import preferences", ex); } @@ -666,7 +678,9 @@ private Optional fetch(String fetchCommand) { String engine = split[0]; String query = split[1]; - Set fetchers = WebFetchers.getSearchBasedFetchers(preferencesService.getImportFormatPreferences()); + Set fetchers = WebFetchers.getSearchBasedFetchers( + preferencesService.getImportFormatPreferences(), + preferencesService.getImporterPreferences()); Optional selectedFetcher = fetchers.stream() .filter(fetcher -> fetcher.getName().equalsIgnoreCase(engine)) .findFirst(); diff --git a/src/main/java/org/jabref/gui/EntryTypeViewModel.java b/src/main/java/org/jabref/gui/EntryTypeViewModel.java index c48a061158f..16782b19c00 100644 --- a/src/main/java/org/jabref/gui/EntryTypeViewModel.java +++ b/src/main/java/org/jabref/gui/EntryTypeViewModel.java @@ -59,9 +59,14 @@ public EntryTypeViewModel(PreferencesService preferences, this.preferencesService = preferences; this.dialogService = dialogService; this.stateManager = stateManager; - fetchers.addAll(WebFetchers.getIdBasedFetchers(preferences.getImportFormatPreferences())); + fetchers.addAll(WebFetchers.getIdBasedFetchers( + preferences.getImportFormatPreferences(), + preferences.getImporterPreferences())); selectedItemProperty.setValue(getLastSelectedFetcher()); - idFieldValidator = new FunctionBasedValidator<>(idText, StringUtil::isNotBlank, ValidationMessage.error(Localization.lang("Required field \"%0\" is empty.", Localization.lang("ID")))); + idFieldValidator = new FunctionBasedValidator<>( + idText, + StringUtil::isNotBlank, + ValidationMessage.error(Localization.lang("Required field \"%0\" is empty.", Localization.lang("ID")))); } public BooleanProperty searchSuccesfulProperty() { @@ -152,7 +157,14 @@ public void runFetcherWorker() { if (result.isPresent()) { final BibEntry entry = result.get(); - ImportHandler handler = new ImportHandler(libraryTab.getBibDatabaseContext(), ExternalFileTypes.getInstance(), preferencesService, Globals.getFileUpdateMonitor(), libraryTab.getUndoManager(), stateManager, dialogService); + ImportHandler handler = new ImportHandler( + libraryTab.getBibDatabaseContext(), + ExternalFileTypes.getInstance(), + preferencesService, + Globals.getFileUpdateMonitor(), + libraryTab.getUndoManager(), + stateManager, + dialogService); handler.importEntryWithDuplicateCheck(libraryTab.getBibDatabaseContext(), entry); searchSuccesfulProperty.set(true); @@ -170,7 +182,12 @@ public void runFetcherWorker() { Localization.lang("Add entry manually"), Localization.lang("Return to dialog")); if (addEntryFlag) { - new NewEntryAction(libraryTab.frame(), StandardEntryType.Article, dialogService, preferencesService, stateManager).execute(); + new NewEntryAction( + libraryTab.frame(), + StandardEntryType.Article, + dialogService, + preferencesService, + stateManager).execute(); searchSuccesfulProperty.set(true); } } diff --git a/src/main/java/org/jabref/gui/externalfiles/DownloadFullTextAction.java b/src/main/java/org/jabref/gui/externalfiles/DownloadFullTextAction.java index 56068fa847e..53be917cea1 100644 --- a/src/main/java/org/jabref/gui/externalfiles/DownloadFullTextAction.java +++ b/src/main/java/org/jabref/gui/externalfiles/DownloadFullTextAction.java @@ -85,7 +85,9 @@ protected Map> call() { Map> downloads = new ConcurrentHashMap<>(); int count = 0; for (BibEntry entry : entries) { - FulltextFetchers fetchers = new FulltextFetchers(preferences.getImportFormatPreferences()); + FulltextFetchers fetchers = new FulltextFetchers( + preferences.getImportFormatPreferences(), + preferences.getImporterPreferences()); downloads.put(entry, fetchers.findFullTextPDF(entry)); updateProgress(++count, entries.size()); } diff --git a/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditorViewModel.java index 1c9b452c551..4525c7f050c 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditorViewModel.java @@ -202,7 +202,9 @@ private List findAssociatedNotLinkedFiles(BibEntry entry) { } public void fetchFulltext() { - FulltextFetchers fetcher = new FulltextFetchers(preferences.getImportFormatPreferences()); + FulltextFetchers fetcher = new FulltextFetchers( + preferences.getImportFormatPreferences(), + preferences.getImporterPreferences()); BackgroundTask .wrap(() -> fetcher.findFullTextPDF(entry)) .onRunning(() -> fulltextLookupInProgress.setValue(true)) diff --git a/src/main/java/org/jabref/gui/importer/fetcher/WebSearchPaneViewModel.java b/src/main/java/org/jabref/gui/importer/fetcher/WebSearchPaneViewModel.java index bb24c28f4bb..6aa6e7177d5 100644 --- a/src/main/java/org/jabref/gui/importer/fetcher/WebSearchPaneViewModel.java +++ b/src/main/java/org/jabref/gui/importer/fetcher/WebSearchPaneViewModel.java @@ -52,7 +52,9 @@ public WebSearchPaneViewModel(PreferencesService preferencesService, DialogServi this.dialogService = dialogService; this.stateManager = stateManager; - SortedSet allFetchers = WebFetchers.getSearchBasedFetchers(preferencesService.getImportFormatPreferences()); + SortedSet allFetchers = WebFetchers.getSearchBasedFetchers( + preferencesService.getImportFormatPreferences(), + preferencesService.getImporterPreferences()); fetchers.setAll(allFetchers); // Choose last-selected fetcher as default @@ -128,7 +130,8 @@ public void search() { } SearchBasedFetcher activeFetcher = getSelectedFetcher(); - Globals.getTelemetryClient().ifPresent(client -> client.trackEvent("search", Map.of("fetcher", activeFetcher.getName()), Map.of())); + Globals.getTelemetryClient().ifPresent(client -> + client.trackEvent("search", Map.of("fetcher", activeFetcher.getName()), Map.of())); BackgroundTask task; task = BackgroundTask.wrap(() -> new ParserResult(activeFetcher.performSearch(query))) diff --git a/src/main/java/org/jabref/gui/preferences/importexport/ImportExportTab.fxml b/src/main/java/org/jabref/gui/preferences/importexport/ImportExportTab.fxml index 10cc58d0d5c..7d3756d1bb0 100644 --- a/src/main/java/org/jabref/gui/preferences/importexport/ImportExportTab.fxml +++ b/src/main/java/org/jabref/gui/preferences/importexport/ImportExportTab.fxml @@ -1,12 +1,14 @@ + + + - @@ -30,4 +32,16 @@