[Libreoffice-commits] core.git: Branch 'libreoffice-4-3' - framework/source

Maxim Monastirsky momonasmon at gmail.com
Sun Aug 10 23:25:43 PDT 2014


 framework/source/services/autorecovery.cxx |   24 +++++++++++++++++-------
 1 file changed, 17 insertions(+), 7 deletions(-)

New commits:
commit 9799a623161f43a0ca0c7a4806416ce466b558a6
Author: Maxim Monastirsky <momonasmon at gmail.com>
Date:   Sun Aug 10 14:45:19 2014 +0300

    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 at redhat.com>
    Tested-by: David Tardon <dtardon at redhat.com>

diff --git a/framework/source/services/autorecovery.cxx b/framework/source/services/autorecovery.cxx
index eac5b1e..5e75955 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


More information about the Libreoffice-commits mailing list