summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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: */