summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2013-08-27 14:35:18 +0100
committerCaolán McNamara <caolanm@redhat.com>2013-08-27 14:42:24 +0100
commit68dea1c1b61a99cdef556ba7d8ccfdad1be8a663 (patch)
tree8a342345b1bb1d948b95fbd1b98d80b9fef44234
parent8763c77c39507284d45eb79c29977eb0174b66f1 (diff)
Resolves: fdo#67743 ensure user autocorr config dir exists
We try and copy the shared one to the user location the first time we create a customized user file. If the dir doesn't exist then that migration doesn't happen. The new autocorr file is then written, creating the dir, and any further operations will reattempt the skipped share copy, and this time succeed because the dir now exists. Which overwrites the previously written customized content. This is similar to fdo#65501 "ensure configured backup dir exists before using it", so reuse that code and move it into unotools. Change-Id: I38fa621b8d7295d70b09172a028569ea95404120
-rw-r--r--editeng/source/misc/acorrcfg.cxx15
-rw-r--r--include/unotools/ucbhelper.hxx18
-rw-r--r--sfx2/source/doc/docfile.cxx23
-rw-r--r--unotools/source/ucbhelper/ucbhelper.cxx20
4 files changed, 50 insertions, 26 deletions
diff --git a/editeng/source/misc/acorrcfg.cxx b/editeng/source/misc/acorrcfg.cxx
index 04a9bdf5ffa2..af4d5bde0d9a 100644
--- a/editeng/source/misc/acorrcfg.cxx
+++ b/editeng/source/misc/acorrcfg.cxx
@@ -17,11 +17,13 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-
+#include <comphelper/processfactory.hxx>
#include <editeng/acorrcfg.hxx>
#include <tools/debug.hxx>
#include <tools/urlobj.hxx>
+#include <ucbhelper/content.hxx>
#include <unotools/pathoptions.hxx>
+#include <unotools/ucbhelper.hxx>
#include <svl/urihelper.hxx>
#include <editeng/svxacorr.hxx>
@@ -31,6 +33,7 @@
#include <rtl/instance.hxx>
using namespace utl;
+using namespace com::sun::star;
using namespace com::sun::star::uno;
@@ -47,10 +50,18 @@ SvxAutoCorrCfg::SvxAutoCorrCfg() :
SvtPathOptions aPathOpt;
String sSharePath, sUserPath, sAutoPath( aPathOpt.GetAutoCorrectPath() );
+ sSharePath = sAutoPath.GetToken(0, ';');
+ sUserPath = sAutoPath.GetToken(1, ';');
+
+ //fdo#67743 ensure the userdir exists so that any later attempt to copy the
+ //shared autocorrect file into the user dir will succeed
+ ::ucbhelper::Content aContent;
+ Reference < ucb::XCommandEnvironment > xEnv;
+ ::utl::UCBContentHelper::ensureFolder(comphelper::getProcessComponentContext(), xEnv, sUserPath, aContent);
+
String* pS = &sSharePath;
for( sal_uInt16 n = 0; n < 2; ++n, pS = &sUserPath )
{
- *pS = sAutoPath.GetToken( n, ';' );
INetURLObject aPath( *pS );
aPath.insertName(OUString("acor"));
*pS = aPath.GetMainURL(INetURLObject::DECODE_TO_IURI);
diff --git a/include/unotools/ucbhelper.hxx b/include/unotools/ucbhelper.hxx
index fad06ced5e2d..fe29a3a54201 100644
--- a/include/unotools/ucbhelper.hxx
+++ b/include/unotools/ucbhelper.hxx
@@ -26,9 +26,15 @@
#include "sal/types.h"
#include "unotools/unotoolsdllapi.h"
-namespace com { namespace sun { namespace star { namespace uno {
- class Any;
-} } } }
+namespace com { namespace sun { namespace star {
+ namespace uno {
+ class Any;
+ class XComponentContext;
+ }
+ namespace ucb{
+ class XCommandEnvironment;
+ }
+} } }
namespace ucbhelper { class Content; }
namespace utl { namespace UCBContentHelper {
@@ -53,6 +59,12 @@ UNOTOOLS_DLLPUBLIC bool MakeFolder(
ucbhelper::Content & parent, OUString const & title,
ucbhelper::Content & result, bool exclusive = false);
+/// like mkdir -p
+UNOTOOLS_DLLPUBLIC bool ensureFolder(
+ com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > xCtx,
+ com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment > xEnv,
+ const OUString& rFolder, ucbhelper::Content & result);
+
/// @return the value of the "Size" property of the given content, or zero if
/// obtaining the property yields a void value or raises a
/// non-RuntimeException (RuntimeExceptions are passed through)
diff --git a/sfx2/source/doc/docfile.cxx b/sfx2/source/doc/docfile.cxx
index 2034369eb1bc..9e36e71a22a8 100644
--- a/sfx2/source/doc/docfile.cxx
+++ b/sfx2/source/doc/docfile.cxx
@@ -2109,25 +2109,6 @@ void SfxMedium::DoInternalBackup_Impl( const ::ucbhelper::Content& aOriginalCont
aTransactTemp.EnableKillingFile( true );
}
-bool ensureFolder(
- uno::Reference< uno::XComponentContext > xCtx,
- uno::Reference< ucb::XCommandEnvironment > xEnv,
- const OUString& rFolder, ucbhelper::Content & result)
-{
- INetURLObject aURL( rFolder );
- OUString aTitle = aURL.getName( INetURLObject::LAST_SEGMENT, true, INetURLObject::DECODE_WITH_CHARSET );
- aURL.removeSegment();
- ::ucbhelper::Content aParent;
-
- if ( ::ucbhelper::Content::create( aURL.GetMainURL( INetURLObject::NO_DECODE ),
- xEnv, xCtx, aParent ) )
- {
- return ::utl::UCBContentHelper::MakeFolder(aParent, aTitle, result);
- }
-
- return false;
-}
-
//------------------------------------------------------------------
void SfxMedium::DoInternalBackup_Impl( const ::ucbhelper::Content& aOriginalContent )
{
@@ -2146,7 +2127,7 @@ void SfxMedium::DoInternalBackup_Impl( const ::ucbhelper::Content& aOriginalCont
// create content for the parent folder ( = backup folder )
::ucbhelper::Content aContent;
Reference < ::com::sun::star::ucb::XCommandEnvironment > xEnv;
- if( ensureFolder(comphelper::getProcessComponentContext(), xEnv, aBakDir, aContent) )
+ if( ::utl::UCBContentHelper::ensureFolder(comphelper::getProcessComponentContext(), xEnv, aBakDir, aContent) )
DoInternalBackup_Impl( aOriginalContent, aPrefix, aExtension, aBakDir );
if ( pImp->m_aBackupURL.isEmpty() )
@@ -2186,7 +2167,7 @@ void SfxMedium::DoBackup_Impl()
// create content for the parent folder ( = backup folder )
::ucbhelper::Content aContent;
Reference < ::com::sun::star::ucb::XCommandEnvironment > xEnv;
- if( ensureFolder(comphelper::getProcessComponentContext(), xEnv, aBakDir, aContent) )
+ if( ::utl::UCBContentHelper::ensureFolder(comphelper::getProcessComponentContext(), xEnv, aBakDir, aContent) )
{
// save as ".bak" file
INetURLObject aDest( aBakDir );
diff --git a/unotools/source/ucbhelper/ucbhelper.cxx b/unotools/source/ucbhelper/ucbhelper.cxx
index efa9e4690603..97cc3c75c928 100644
--- a/unotools/source/ucbhelper/ucbhelper.cxx
+++ b/unotools/source/ucbhelper/ucbhelper.cxx
@@ -42,6 +42,7 @@
#include "com/sun/star/uno/Reference.hxx"
#include "com/sun/star/uno/RuntimeException.hpp"
#include "com/sun/star/uno/Sequence.hxx"
+#include "com/sun/star/uno/XComponentContext.hpp"
#include "com/sun/star/util/DateTime.hpp"
#include "comphelper/processfactory.hxx"
#include "cppuhelper/exc_hlp.hxx"
@@ -453,4 +454,23 @@ bool utl::UCBContentHelper::EqualURLs(
== 0;
}
+bool utl::UCBContentHelper::ensureFolder(
+ css::uno::Reference< css::uno::XComponentContext > xCtx,
+ css::uno::Reference< css::ucb::XCommandEnvironment > xEnv,
+ const OUString& rFolder, ucbhelper::Content & result)
+{
+ INetURLObject aURL( rFolder );
+ OUString aTitle = aURL.getName( INetURLObject::LAST_SEGMENT, true, INetURLObject::DECODE_WITH_CHARSET );
+ aURL.removeSegment();
+ ::ucbhelper::Content aParent;
+
+ if ( ::ucbhelper::Content::create( aURL.GetMainURL( INetURLObject::NO_DECODE ),
+ xEnv, xCtx, aParent ) )
+ {
+ return ::utl::UCBContentHelper::MakeFolder(aParent, aTitle, result);
+ }
+
+ return false;
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */