diff --git a/src/main/java/org/jabref/gui/BasePanel.java b/src/main/java/org/jabref/gui/BasePanel.java index e12ba0a5622..528ecc321c8 100644 --- a/src/main/java/org/jabref/gui/BasePanel.java +++ b/src/main/java/org/jabref/gui/BasePanel.java @@ -56,7 +56,6 @@ import org.jabref.gui.undo.UndoableInsertEntries; import org.jabref.gui.undo.UndoableRemoveEntries; import org.jabref.gui.util.DefaultTaskExecutor; -import org.jabref.gui.worker.SendAsEMailAction; import org.jabref.logic.citationstyle.CitationStyleCache; import org.jabref.logic.citationstyle.CitationStyleOutputFormat; import org.jabref.logic.l10n.Localization; @@ -335,7 +334,7 @@ private void setupActions() { entryEditor.previousPreviewStyle(); }); */ - actions.put(Actions.SEND_AS_EMAIL, new SendAsEMailAction(frame)); + // actions.put(Actions.SEND_AS_EMAIL, new SendAsEMailAction(frame)); // actions.put(Actions.WRITE_XMP, new WriteXMPAction(this)::execute); diff --git a/src/main/java/org/jabref/gui/JabRefFrame.java b/src/main/java/org/jabref/gui/JabRefFrame.java index 179855815df..2516f2af529 100644 --- a/src/main/java/org/jabref/gui/JabRefFrame.java +++ b/src/main/java/org/jabref/gui/JabRefFrame.java @@ -104,6 +104,7 @@ import org.jabref.gui.undo.CountingUndoManager; import org.jabref.gui.util.BackgroundTask; import org.jabref.gui.util.DefaultTaskExecutor; +import org.jabref.gui.worker.SendAsEMailAction; import org.jabref.logic.autosaveandbackup.AutosaveManager; import org.jabref.logic.autosaveandbackup.BackupManager; import org.jabref.logic.importer.IdFetcher; @@ -780,7 +781,7 @@ private MenuBar createMenu() { factory.createMenuItem(StandardActions.GENERATE_CITE_KEYS, new OldDatabaseCommandWrapper(Actions.MAKE_KEY, this, stateManager)), factory.createMenuItem(StandardActions.REPLACE_ALL, new OldDatabaseCommandWrapper(Actions.REPLACE_ALL, this, stateManager)), - factory.createMenuItem(StandardActions.SEND_AS_EMAIL, new OldDatabaseCommandWrapper(Actions.SEND_AS_EMAIL, this, stateManager)), + factory.createMenuItem(StandardActions.SEND_AS_EMAIL, new SendAsEMailAction(dialogService, stateManager)), pushToApplicationMenuItem, factory.createSubMenu(StandardActions.ABBREVIATE, diff --git a/src/main/java/org/jabref/gui/maintable/RightClickMenu.java b/src/main/java/org/jabref/gui/maintable/RightClickMenu.java index cabe83d8ab5..64536acced7 100644 --- a/src/main/java/org/jabref/gui/maintable/RightClickMenu.java +++ b/src/main/java/org/jabref/gui/maintable/RightClickMenu.java @@ -19,6 +19,7 @@ import org.jabref.gui.mergeentries.MergeEntriesAction; import org.jabref.gui.mergeentries.MergeWithFetchedEntryAction; import org.jabref.gui.specialfields.SpecialFieldMenuItemFactory; +import org.jabref.gui.worker.SendAsEMailAction; import org.jabref.logic.citationstyle.CitationStylePreviewLayout; import org.jabref.logic.citationstyle.PreviewLayout; import org.jabref.model.entry.field.SpecialField; @@ -40,7 +41,7 @@ public static ContextMenu create(BibEntryTableViewModel entry, KeyBindingReposit contextMenu.getItems().add(new SeparatorMenuItem()); - contextMenu.getItems().add(factory.createMenuItem(StandardActions.SEND_AS_EMAIL, new OldCommandWrapper(Actions.SEND_AS_EMAIL, panel))); + contextMenu.getItems().add(factory.createMenuItem(StandardActions.SEND_AS_EMAIL, new SendAsEMailAction(dialogService, stateManager))); contextMenu.getItems().add(new SeparatorMenuItem()); diff --git a/src/main/java/org/jabref/gui/worker/SendAsEMailAction.java b/src/main/java/org/jabref/gui/worker/SendAsEMailAction.java index 24877673394..401d64a2420 100644 --- a/src/main/java/org/jabref/gui/worker/SendAsEMailAction.java +++ b/src/main/java/org/jabref/gui/worker/SendAsEMailAction.java @@ -9,15 +9,17 @@ import java.util.List; import org.jabref.Globals; -import org.jabref.gui.BasePanel; -import org.jabref.gui.JabRefFrame; -import org.jabref.gui.actions.BaseAction; +import org.jabref.gui.DialogService; +import org.jabref.gui.StateManager; +import org.jabref.gui.actions.ActionHelper; +import org.jabref.gui.actions.SimpleCommand; import org.jabref.gui.desktop.JabRefDesktop; import org.jabref.gui.util.BackgroundTask; import org.jabref.logic.bibtex.BibEntryWriter; import org.jabref.logic.bibtex.FieldWriter; import org.jabref.logic.l10n.Localization; import org.jabref.logic.util.io.FileUtil; +import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; import org.jabref.preferences.JabRefPreferences; @@ -34,49 +36,50 @@ * are opened. This feature is disabled by default and can be switched on at * preferences/external programs */ -public class SendAsEMailAction implements BaseAction { +public class SendAsEMailAction extends SimpleCommand { private static final Logger LOGGER = LoggerFactory.getLogger(SendAsEMailAction.class); - private final JabRefFrame frame; + private DialogService dialogService; + private StateManager stateManager; - public SendAsEMailAction(JabRefFrame frame) { - this.frame = frame; + public SendAsEMailAction(DialogService dialogService, StateManager stateManager) { + this.dialogService = dialogService; + this.stateManager = stateManager; + + this.executable.bind(ActionHelper.needsEntriesSelected(stateManager)); } @Override - public void action() { + public void execute() { BackgroundTask.wrap(this::sendEmail) - .onSuccess(frame.getDialogService()::notify) + .onSuccess(dialogService::notify) .onFailure(e -> { String message = Localization.lang("Error creating email"); LOGGER.warn(message, e); - frame.getDialogService().notify(message); + dialogService.notify(message); }) .executeWith(Globals.TASK_EXECUTOR); } private String sendEmail() throws Exception { - if (!Desktop.isDesktopSupported()) { + if (!Desktop.isDesktopSupported() || stateManager.getActiveDatabase().isEmpty()) { return Localization.lang("Error creating email"); } - BasePanel panel = frame.getCurrentBasePanel(); - if (panel == null) { - throw new IllegalStateException("Base panel is not available."); - } - if (panel.getSelectedEntries().isEmpty()) { + if (stateManager.getSelectedEntries().isEmpty()) { return Localization.lang("This operation requires one or more entries to be selected."); } StringWriter sw = new StringWriter(); - List bes = panel.getSelectedEntries(); + BibDatabaseContext databaseContext = stateManager.getActiveDatabase().get(); + List bes = stateManager.getSelectedEntries(); // write the entries using sw, which is used later to form the email content BibEntryWriter bibtexEntryWriter = new BibEntryWriter(new FieldWriter(Globals.prefs.getFieldWriterPreferences()), Globals.entryTypesManager); for (BibEntry entry : bes) { try { - bibtexEntryWriter.write(entry, sw, panel.getBibDatabaseContext().getMode()); + bibtexEntryWriter.write(entry, sw, databaseContext.getMode()); } catch (IOException e) { LOGGER.warn("Problem creating BibTeX file for mailing.", e); } @@ -88,8 +91,7 @@ private String sendEmail() throws Exception { // the unofficial "mailto:attachment" property boolean openFolders = JabRefPreferences.getInstance().getBoolean(JabRefPreferences.OPEN_FOLDERS_OF_ATTACHED_FILES); - List fileList = FileUtil.getListOfLinkedFiles(bes, frame.getCurrentBasePanel().getBibDatabaseContext() - .getFileDirectoriesAsPaths(Globals.prefs.getFilePreferences())); + List fileList = FileUtil.getListOfLinkedFiles(bes, databaseContext.getFileDirectoriesAsPaths(Globals.prefs.getFilePreferences())); for (Path f : fileList) { attachments.add(f.toAbsolutePath().toString()); if (openFolders) {