diff options
author | Maxim Monastirsky <momonasmon@gmail.com> | 2014-08-10 14:45:19 +0300 |
---|---|---|
committer | David Tardon <dtardon@redhat.com> | 2014-08-11 06:25:23 +0000 |
commit | 9799a623161f43a0ca0c7a4806416ce466b558a6 (patch) | |
tree | d2d66fa5dfe1227f19f548d531dcaec77d572f79 | |
parent | 24884b2007a7dc48fa13bd3fd32d36109536403c (diff) |
fdo#71625 Don't loop autosave if userautosave fails
Should also fix most of the reports of fdo#46635
(I have no idea regarding the original report,
because it predates the autosave feature.)
Change-Id: I006d62053a159ab3157438a57dee56d6d99990a8
(cherry picked from commit 5b9509115bd4adc5ef2618f0d9436cda1c0d9fbe)
Reviewed-on: https://gerrit.libreoffice.org/10859
Reviewed-by: David Tardon <dtardon@redhat.com>
Tested-by: David Tardon <dtardon@redhat.com>
-rw-r--r-- | framework/source/services/autorecovery.cxx | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/framework/source/services/autorecovery.cxx b/framework/source/services/autorecovery.cxx index eac5b1ed3e9a..5e75955ada4e 100644 --- a/framework/source/services/autorecovery.cxx +++ b/framework/source/services/autorecovery.cxx @@ -3114,6 +3114,23 @@ void AutoRecovery::implts_saveOneDoc(const OUString& rInfo.DocumentState |= AutoRecovery::E_TRY_SAVE; implts_flushConfigItem(rInfo); + // If userautosave is enabled, first try to save the original file. + // 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. + try + { + // We must check here for an empty URL to avoid a "This operation is not supported on this operating system." + // message during autosave. + if ((m_eJob & AutoRecovery::E_USER_AUTO_SAVE) == AutoRecovery::E_USER_AUTO_SAVE && !rInfo.OrgURL.isEmpty()) + { + Reference< XStorable > xDocSave(rInfo.Document, css::uno::UNO_QUERY_THROW); + xDocSave->store(); + } + } + catch(const css::uno::Exception&) + { + } + sal_Int32 nRetry = RETRY_STORE_ON_FULL_DISC_FOREVER; bool bError = false; do @@ -3122,13 +3139,6 @@ void AutoRecovery::implts_saveOneDoc(const OUString& { xDocRecover->storeToRecoveryFile( rInfo.NewTempURL, lNewArgs.getAsConstPropertyValueList() ); - // if userautosave is enabled, also save to the original file - if((m_eJob & AutoRecovery::E_USER_AUTO_SAVE) == AutoRecovery::E_USER_AUTO_SAVE) - { - Reference< XStorable > xDocSave(rInfo.Document, css::uno::UNO_QUERY_THROW); - xDocSave->store(); - } - #ifdef TRIGGER_FULL_DISC_CHECK throw css::uno::Exception(); #else // TRIGGER_FULL_DISC_CHECK |