Kaydet (Commit) 6ca3b364 authored tarafından Juergen Funk's avatar Juergen Funk Kaydeden (comit) Katarina Behrens

tdf#106942 Wrong message when lock file is empty or corrupt

1. Erase empty or corrupt lockfile, when reading it fails and
   skip "Locked Document Dialog" in that case
2. Show Dialog (use LockFileIgnoreRequest -> LockFailedQueryBox)
   when create lock file is not possible.
   Two Dialogs:  "lock file create error" and
                 "empty lockfile is present"
   Set the document to read-only when creating lockfile is not
   possible. If lockfile is corrupt or empty, inform the user.
   They can interrupt loading the document or open it read-only,
   which also erases the corrupt lock file after closing
   the document
3. Handling for the two Dialogs
   Use LockFileIgnoreRequst for create lockfile error and
   add a new LockFileCorruptRequest, (lock file is corrupt).
   Change and generate new messages for both dialogs in english

Change-Id: I35c377f85b5113e8ffb89d83b9544b8ebc81d89f
Reviewed-on: https://gerrit.libreoffice.org/36658Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarKatarina Behrens <Katarina.Behrens@cib.de>
üst cab3468e
......@@ -163,8 +163,10 @@ public:
bool IsStorage();
enum class ShowLockResult { NoLock, Succeeded,Try };
ShowLockResult ShowLockedDocumentDialog( const LockFileEntry& aData, bool bIsLoading, bool bOwnLock );
ShowLockResult ShowLockedDocumentDialog( const LockFileEntry& aData, bool bIsLoading, bool bOwnLock, bool bHandleSysLocked);
void LockOrigFileOnDemand( bool bLoading, bool bNoUI );
enum class MessageDlg { LockFileIgnore, LockFileCorrupt };
bool ShowLockFileProblemDialog(MessageDlg nWhichDlg);
void DisableUnlockWebDAV( bool bDisableUnlockWebDAV = true );
void UnlockFile( bool bReleaseLockStream );
......
......@@ -48,7 +48,10 @@ public:
bool CreateOwnLockFile();
LockFileEntry GetLockData();
bool OverwriteOwnLockFile();
/// Delete the Lockfile, if current user is the owner
void RemoveFile();
/// Only delete lockfile, disregarding ownership
void RemoveFileDirectly();
static bool IsInteractionAllowed() { return m_bAllowInteraction; }
};
......
......@@ -490,7 +490,7 @@ ${MYCMD} --base sw/source/uibase/utlui --files attrdesc.src initui.src navipi.sr
${MYCMD} --files sw/source/uibase/wrtsh/wrtsh.src
${MYCMD} --base uui/source --files alreadyopen.src filechanged.src ids.src lockfailed.src nameclashdlg.src openlocked.src passworddlg.src passworderrs.src trylater.src
${MYCMD} --base uui/source --files alreadyopen.src filechanged.src ids.src lockfailed.src lockcorrupt.src nameclashdlg.src openlocked.src passworddlg.src passworderrs.src trylater.src
${MYCMD} --files vcl/source/edit/textundo.src
......
......@@ -2190,6 +2190,7 @@ $(eval $(call gb_UnoApi_add_idlfiles,offapi,com/sun/star/document,\
FilterOptionsRequest \
LinkUpdateModes \
LockFileIgnoreRequest \
LockFileCorruptRequest \
LockedDocumentRequest \
LockedOnSavingRequest \
MacroExecMode \
......
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef __com_sun_star_document_LockFileCorruptRequest_idl__
#define __com_sun_star_document_LockFileCorruptRequest_idl__
#include <com/sun/star/io/IOException.idl>
#include <com/sun/star/beans/PropertyValue.idl>
#include <com/sun/star/frame/XModel.idl>
module com { module sun { module star { module document {
/** Is used for interaction handle to query user's decision
when the lock file is corrupt.
@since OOo 5.5
*/
exception LockFileCorruptRequest : ::com::sun::star::io::IOException
{
};
}; }; }; };
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
This diff is collapsed.
......@@ -207,12 +207,19 @@ void DocumentLockFile::RemoveFile()
|| !aFileData[LockFileComponent::USERURL].equals( aNewEntry[LockFileComponent::USERURL] ) )
throw io::IOException(); // not the owner, access denied
RemoveFileDirectly();
}
void DocumentLockFile::RemoveFileDirectly()
{
uno::Reference < css::ucb::XCommandEnvironment > xEnv;
::ucbhelper::Content aCnt(m_aURL, xEnv, comphelper::getProcessComponentContext());
aCnt.executeCommand("delete",
uno::makeAny(true));
}
} // namespace svt
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -25,6 +25,7 @@ $(eval $(call gb_SrsTarget_add_files,uui/res,\
uui/source/filechanged.src \
uui/source/ids.src \
uui/source/lockfailed.src \
uui/source/lockcorrupt.src \
uui/source/nameclashdlg.src \
uui/source/openlocked.src \
uui/source/passworddlg.src \
......
......@@ -49,6 +49,7 @@ $(eval $(call gb_Library_add_exception_objects,uui,\
uui/source/iahndl-ssl \
uui/source/interactionhandler \
uui/source/lockfailed \
uui/source/lockcorrupt \
uui/source/logindlg \
uui/source/masterpasscrtdlg \
uui/source/masterpassworddlg \
......
......@@ -23,6 +23,7 @@
#include <com/sun/star/document/LockedDocumentRequest.hpp>
#include <com/sun/star/document/LockedOnSavingRequest.hpp>
#include <com/sun/star/document/LockFileIgnoreRequest.hpp>
#include <com/sun/star/document/LockFileCorruptRequest.hpp>
#include <com/sun/star/document/OwnLockOnDocumentRequest.hpp>
#include <com/sun/star/task/XInteractionApprove.hpp>
#include <com/sun/star/task/XInteractionDisapprove.hpp>
......@@ -40,6 +41,7 @@
#include "alreadyopen.hxx"
#include "filechanged.hxx"
#include "lockfailed.hxx"
#include "lockcorrupt.hxx"
#include "iahndl.hxx"
......@@ -172,11 +174,16 @@ handleChangedByOthersRequest_(
}
}
const sal_uInt16 UUI_DOC_CreateErrDlg = 0;
const sal_uInt16 UUI_DOC_CorruptErrDlg = 1;
void
handleLockFileIgnoreRequest_(
handleLockFileProblemRequest_(
vcl::Window * pParent,
uno::Sequence< uno::Reference< task::XInteractionContinuation > > const &
rContinuations )
rContinuations, sal_uInt16 nWhichDlg )
{
uno::Reference< task::XInteractionApprove > xApprove;
uno::Reference< task::XInteractionAbort > xAbort;
......@@ -192,8 +199,19 @@ handleLockFileIgnoreRequest_(
if (!xManager.get())
return;
ScopedVclPtrInstance< LockFailedQueryBox > xDialog(pParent, xManager.get());
sal_Int32 nResult = xDialog->Execute();
sal_Int32 nResult;
if (nWhichDlg == UUI_DOC_CreateErrDlg)
{
ScopedVclPtrInstance< LockFailedQueryBox > xDialog(pParent, xManager.get());
nResult = xDialog->Execute();
}
else
{
ScopedVclPtrInstance< LockCorruptQueryBox > xDialog(pParent, xManager.get());
nResult = xDialog->Execute();
}
if ( nResult == RET_OK )
xApprove->select();
......@@ -267,8 +285,9 @@ UUIInteractionHelper::handleChangedByOthersRequest(
return false;
}
bool
UUIInteractionHelper::handleLockFileIgnoreRequest(
UUIInteractionHelper::handleLockFileProblemRequest(
uno::Reference< task::XInteractionRequest > const & rRequest)
{
uno::Any aAnyRequest(rRequest->getRequest());
......@@ -276,10 +295,19 @@ UUIInteractionHelper::handleLockFileIgnoreRequest(
document::LockFileIgnoreRequest aLockFileIgnoreRequest;
if (aAnyRequest >>= aLockFileIgnoreRequest )
{
handleLockFileIgnoreRequest_( getParentProperty(),
rRequest->getContinuations() );
handleLockFileProblemRequest_( getParentProperty(),
rRequest->getContinuations(), UUI_DOC_CreateErrDlg );
return true;
}
document::LockFileCorruptRequest aLockFileCorruptRequest;
if (aAnyRequest >>= aLockFileCorruptRequest )
{
handleLockFileProblemRequest_( getParentProperty(),
rRequest->getContinuations(), UUI_DOC_CorruptErrDlg );
return true;
}
return false;
}
......
......@@ -807,7 +807,7 @@ UUIInteractionHelper::handleRequest_impl(
if ( handleChangedByOthersRequest( rRequest ) )
return true;
if ( handleLockFileIgnoreRequest( rRequest ) )
if ( handleLockFileProblemRequest( rRequest ) )
return true;
task::DocumentMacroConfirmationRequest aMacroConfirmRequest;
......
......@@ -232,7 +232,7 @@ private:
css::uno::Reference<
css::task::XInteractionRequest > const & rRequest);
bool handleLockFileIgnoreRequest(
bool handleLockFileProblemRequest(
css::uno::Reference< css::task::XInteractionRequest > const & rRequest);
bool handleCustomRequest(
......
......@@ -47,26 +47,29 @@
#define STR_ALREADYOPEN_OPEN_BTN (RID_UUI_START + 42)
#define STR_LOCKFAILED_TITLE (RID_UUI_START + 43)
#define STR_LOCKFAILED_MSG (RID_UUI_START + 44)
#define STR_LOCKFAILED_DONTSHOWAGAIN (RID_UUI_START + 45)
#define STR_TRYLATER_TITLE (RID_UUI_START + 46)
#define STR_TRYLATER_MSG (RID_UUI_START + 47)
#define STR_TRYLATER_RETRYSAVING_BTN (RID_UUI_START + 48)
#define STR_TRYLATER_SAVEAS_BTN (RID_UUI_START + 49)
#define STR_ALREADYOPEN_SAVE_MSG (RID_UUI_START + 50)
#define STR_ALREADYOPEN_RETRY_SAVE_BTN (RID_UUI_START + 51)
#define STR_ALREADYOPEN_SAVE_BTN (RID_UUI_START + 52)
#define STR_LOCKFAILED_OPENREADONLY_BTN (RID_UUI_START + 45)
#define STR_LOCKCORRUPT_TITLE (RID_UUI_START + 46)
#define STR_LOCKCORRUPT_MSG (RID_UUI_START + 47)
#define STR_LOCKCORRUPT_OPENREADONLY_BTN (RID_UUI_START + 48)
#define STR_TRYLATER_TITLE (RID_UUI_START + 49)
#define STR_TRYLATER_MSG (RID_UUI_START + 50)
#define STR_TRYLATER_RETRYSAVING_BTN (RID_UUI_START + 51)
#define STR_TRYLATER_SAVEAS_BTN (RID_UUI_START + 52)
#define STR_ALREADYOPEN_SAVE_MSG (RID_UUI_START + 53)
#define STR_ALREADYOPEN_RETRY_SAVE_BTN (RID_UUI_START + 54)
#define STR_ALREADYOPEN_SAVE_BTN (RID_UUI_START + 55)
#define STR_WARNING_INCOMPLETE_ENCRYPTION_TITLE (RID_UUI_START + 54)
#define STR_ENTER_PASSWORD_TO_OPEN (RID_UUI_START + 56)
#define STR_ENTER_PASSWORD_TO_MODIFY (RID_UUI_START + 57)
#define STR_RENAME_OR_REPLACE (RID_UUI_START + 58)
#define STR_NAME_CLASH_RENAME_ONLY (RID_UUI_START + 59)
#define STR_SAME_NAME_USED (RID_UUI_START + 60)
#define STR_ENTER_SIMPLE_PASSWORD (RID_UUI_START + 61)
#define STR_CONFIRM_SIMPLE_PASSWORD (RID_UUI_START + 62)
#define STR_TITLE_CREATE_PASSWORD (RID_UUI_START + 63)
#define STR_TITLE_ENTER_PASSWORD (RID_UUI_START + 64)
#define STR_PASSWORD_MISMATCH (RID_UUI_START + 65)
#define STR_WARNING_INCOMPLETE_ENCRYPTION_TITLE (RID_UUI_START + 56)
#define STR_ENTER_PASSWORD_TO_OPEN (RID_UUI_START + 57)
#define STR_ENTER_PASSWORD_TO_MODIFY (RID_UUI_START + 58)
#define STR_RENAME_OR_REPLACE (RID_UUI_START + 59)
#define STR_NAME_CLASH_RENAME_ONLY (RID_UUI_START + 60)
#define STR_SAME_NAME_USED (RID_UUI_START + 61)
#define STR_ENTER_SIMPLE_PASSWORD (RID_UUI_START + 62)
#define STR_CONFIRM_SIMPLE_PASSWORD (RID_UUI_START + 63)
#define STR_TITLE_CREATE_PASSWORD (RID_UUI_START + 64)
#define STR_TITLE_ENTER_PASSWORD (RID_UUI_START + 65)
#define STR_PASSWORD_MISMATCH (RID_UUI_START + 66)
#define ERRCODE_UUI_IO_ABORT (ERRCODE_AREA_UUI + 0)
#define ERRCODE_UUI_IO_ACCESSDENIED (ERRCODE_AREA_UUI + 1)
......
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include "ids.hrc"
#include "lockcorrupt.hxx"
#include <vcl/button.hxx>
LockCorruptQueryBox::LockCorruptQueryBox( vcl::Window* pParent, ResMgr* pResMgr ) :
MessBox(pParent, 0,
ResId(STR_LOCKCORRUPT_TITLE, *pResMgr).toString(),
OUString() )
{
SetImage( ErrorBox::GetStandardImage() );
AddButton(ResId(STR_LOCKCORRUPT_OPENREADONLY_BTN, *pResMgr).toString(), RET_OK,
ButtonDialogFlags::Default | ButtonDialogFlags::OK | ButtonDialogFlags::Focus);
AddButton( StandardButtonType::Cancel, RET_CANCEL, ButtonDialogFlags::Cancel );
SetMessText(ResId(STR_LOCKCORRUPT_MSG, *pResMgr ).toString());
}
LockCorruptQueryBox::~LockCorruptQueryBox()
{
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_UUI_SOURCE_LOCKCORRUPT_HXX
#define INCLUDED_UUI_SOURCE_LOCKCORRUPT_HXX
#include <vcl/msgbox.hxx>
class LockCorruptQueryBox : public MessBox
{
public:
LockCorruptQueryBox( vcl::Window* pParent, ResMgr* pResMgr );
virtual ~LockCorruptQueryBox() override;
};
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#define __RSC
#include "ids.hrc"
String STR_LOCKCORRUPT_TITLE
{
Text [ en-US ] = "Lock file is corrupted";
};
String STR_LOCKCORRUPT_MSG
{
Text [ en-US ] = "The lock file is corrupted and probably empty. Opening the document read-only and closing it again removes the corrupted lock file.";
};
String STR_LOCKCORRUPT_OPENREADONLY_BTN
{
Text [ en-US ] = "Open ~Read-Only";
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -29,11 +29,12 @@ LockFailedQueryBox::LockFailedQueryBox( vcl::Window* pParent, ResMgr* pResMgr )
{
SetImage( ErrorBox::GetStandardImage() );
AddButton( StandardButtonType::OK, RET_OK, ButtonDialogFlags::OK );
AddButton(ResId(STR_LOCKFAILED_OPENREADONLY_BTN, *pResMgr).toString(), RET_OK,
ButtonDialogFlags::Default | ButtonDialogFlags::OK | ButtonDialogFlags::Focus);
AddButton( StandardButtonType::Cancel, RET_CANCEL, ButtonDialogFlags::Cancel );
SetMessText(ResId(STR_LOCKFAILED_MSG, *pResMgr ).toString());
SetCheckBoxText(ResId(STR_LOCKFAILED_DONTSHOWAGAIN, *pResMgr).toString());
}
LockFailedQueryBox::~LockFailedQueryBox()
......
......@@ -25,11 +25,11 @@ String STR_LOCKFAILED_TITLE
};
String STR_LOCKFAILED_MSG
{
Text [ en-US ] = "The file could not be locked for exclusive access by %PRODUCTNAME, due to missing permission to create a lock file on that file location.";
Text [ en-US ] = "The lock file could not be created for exclusive access by %PRODUCTNAME, due to missing permission to create a lock file on that file location or lack of free disk space.";
};
String STR_LOCKFAILED_DONTSHOWAGAIN
String STR_LOCKFAILED_OPENREADONLY_BTN
{
Text [ en-US ] = "~Do not show this message again";
Text [ en-US ] = "Open ~Read-Only";
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment