From d9fe87569dabbbc5ee561c93e230b75e88ea3ee7 Mon Sep 17 00:00:00 2001 From: Lawrence Lee <45837045+Lawrence37@users.noreply.github.com> Date: Sun, 18 Apr 2021 17:23:40 -0700 Subject: [PATCH] Cache most recent send-to-editor temp file Caches the name of the most recently generated temporary file used for exporting to external editors and uses that file if the processing parameters are identical and the file exists. This can dramatically improve speed when exporting to multiple different editors. --- rtgui/editorpanel.cc | 22 ++++++++++++++++++---- rtgui/editorpanel.h | 3 +++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index e5543105c..021333503 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -1974,6 +1974,14 @@ void EditorPanel::sendToExternal() // develop image rtengine::procparams::ProcParams pparams; ipc->getParams (&pparams); + + if (!cached_exported_filename.empty() && pparams == cached_exported_pparams && Glib::file_test(cached_exported_filename, Glib::FILE_TEST_IS_REGULAR)) { + idle_sentToGimp(nullptr, nullptr, cached_exported_filename); + return; + } + + cached_exported_pparams = pparams; + cached_exported_filename.clear(); rtengine::ProcessingJob* job = rtengine::ProcessingJob::create (ipc->getInitialImage(), pparams); ProgressConnector *ld = new ProgressConnector(); ld->startFunc (sigc::bind (sigc::ptr_fun (&rtengine::processImage), job, err, parent->getProgressListener(), false ), @@ -2112,12 +2120,18 @@ bool EditorPanel::idle_sendToGimp ( ProgressConnector *p bool EditorPanel::idle_sentToGimp (ProgressConnector *pc, rtengine::IImagefloat* img, Glib::ustring filename) { - delete img; - int errore = pc->returnValue(); + if (img) { + delete img; + cached_exported_filename = filename; + } + int errore = 0; setProgressState(false); - delete pc; + if (pc) { + errore = pc->returnValue(); + delete pc; + } - if (!errore) { + if ((!img && Glib::file_test(filename, Glib::FILE_TEST_IS_REGULAR)) || (img && !errore)) { saveimgas->set_sensitive (true); send_to_external->set_sensitive(true); parent->setProgressStr (""); diff --git a/rtgui/editorpanel.h b/rtgui/editorpanel.h index 0008786fa..1e6eaaa1f 100644 --- a/rtgui/editorpanel.h +++ b/rtgui/editorpanel.h @@ -243,6 +243,9 @@ private: Glib::RefPtr external_editor_info; std::unique_ptr app_chooser_dialog; + rtengine::procparams::ProcParams cached_exported_pparams; + Glib::ustring cached_exported_filename; + class ColorManagementToolbar; std::unique_ptr colorMgmtToolBar;