tdf#57414 autorecovery: avoid unnecessary storeToRecoveryFile
With a successful UserAutoBackup, the document is fully saved,
and the recoveryInfo entry is removed.
So just avoid the recovery that would just be deleted anyway.
Change-Id: I3cc9fe2730640df48f450f900f33afc2df7f020a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155273
Tested-by: Jenkins
Reviewed-by: Justin Luth <jluth@mail.com>
diff --git a/framework/source/services/autorecovery.cxx b/framework/source/services/autorecovery.cxx
index 816e4f7..657d8c1 100644
--- a/framework/source/services/autorecovery.cxx
+++ b/framework/source/services/autorecovery.cxx
@@ -3073,6 +3073,7 @@ void AutoRecovery::implts_saveOneDoc(const OUString&
// Note that we must do it *before* calling storeToRecoveryFile, so in case of failure here
// we won't remain with the modified flag set to true, even though the autorecovery save succeeded.
const bool bEmergencySave(m_eJob & Job::EmergencySave);
bool bUserAutoSaved = false;
try
{
// We must check here for an empty URL to avoid a "This operation is not supported on this operating system."
@@ -3081,6 +3082,7 @@ void AutoRecovery::implts_saveOneDoc(const OUString&
{
Reference< XStorable > xDocSave(rInfo.Document, css::uno::UNO_QUERY_THROW);
xDocSave->store();
bUserAutoSaved = true;
}
}
catch(const css::uno::Exception&)
@@ -3098,7 +3100,7 @@ void AutoRecovery::implts_saveOneDoc(const OUString&
// If it is no longer modified, it is the same as on disk, and can be removed from RecoveryList.
const bool bRemoveIt
= xModify.is() && !xModify->isModified() && !bEmergencySave && !(m_eJob & Job::SessionSave);
= xModify.is() && !xModify->isModified() && bUserAutoSaved && !(m_eJob & Job::SessionSave);
sal_Int32 nRetry = RETRY_STORE_ON_FULL_DISC_FOREVER;
bool bError = false;
@@ -3106,7 +3108,10 @@ void AutoRecovery::implts_saveOneDoc(const OUString&
{
try
{
xDocRecover->storeToRecoveryFile( rInfo.NewTempURL, lNewArgs.getAsConstPropertyValueList() );
// skip recovery if it will be removed anyway.
if (!bRemoveIt)
xDocRecover->storeToRecoveryFile(rInfo.NewTempURL,
lNewArgs.getAsConstPropertyValueList());
#ifdef TRIGGER_FULL_DISC_CHECK
throw css::uno::Exception("trigger full disk check");