diff options
-rw-r--r-- | editeng/source/misc/acorrcfg.cxx | 15 | ||||
-rw-r--r-- | include/unotools/ucbhelper.hxx | 18 | ||||
-rw-r--r-- | sfx2/source/doc/docfile.cxx | 23 | ||||
-rw-r--r-- | unotools/source/ucbhelper/ucbhelper.cxx | 20 |
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: */ |