You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libreoffice/openoffice.org-3.1.0.ooo101...

188 lines
6.7 KiB

From 7e3bdb601c02e60b772e64ec9d11c56881c9a643 Mon Sep 17 00:00:00 2001
From: David Tardon <dtardon@redhat.com>
Date: Thu, 1 Dec 2011 14:02:07 +0100
Subject: [PATCH 1/2] #i101274 a directory on command line is silently ignored
---
.../source/misc/stillreadwriteinteraction.cxx | 1 +
ucbhelper/source/client/content.cxx | 75 ++++++++++++++++++++
2 files changed, 76 insertions(+), 0 deletions(-)
diff --git a/comphelper/source/misc/stillreadwriteinteraction.cxx b/comphelper/source/misc/stillreadwriteinteraction.cxx
index 124564d..506f31c 100644
--- a/comphelper/source/misc/stillreadwriteinteraction.cxx
+++ b/comphelper/source/misc/stillreadwriteinteraction.cxx
@@ -96,6 +96,7 @@ ucbhelper::InterceptedInteraction::EInterceptionState StillReadWriteInteraction:
bAbort = (
(exIO.Code == css::ucb::IOErrorCode_ACCESS_DENIED )
|| (exIO.Code == css::ucb::IOErrorCode_LOCKING_VIOLATION )
+ || (exIO.Code == css::ucb::IOErrorCode_NO_FILE )
|| (exIO.Code == css::ucb::IOErrorCode_NOT_EXISTING )
#ifdef MACOSX
// this is a workaround for MAC, on this platform if the file is locked
diff --git a/ucbhelper/source/client/content.cxx b/ucbhelper/source/client/content.cxx
index 676acd5..4a599c9 100644
--- a/ucbhelper/source/client/content.cxx
+++ b/ucbhelper/source/client/content.cxx
@@ -38,6 +38,7 @@
#include <cppuhelper/weak.hxx>
#include <cppuhelper/implbase1.hxx>
+#include <com/sun/star/beans/PropertyValue.hpp>
#include <com/sun/star/ucb/CheckinArgument.hpp>
#include <com/sun/star/ucb/ContentCreationError.hpp>
#include <com/sun/star/ucb/XCommandEnvironment.hpp>
@@ -47,6 +48,8 @@
#include <com/sun/star/ucb/ContentAction.hpp>
#include <com/sun/star/ucb/OpenCommandArgument2.hpp>
#include <com/sun/star/ucb/InsertCommandArgument.hpp>
+#include <com/sun/star/ucb/IOErrorCode.hpp>
+#include <com/sun/star/ucb/InteractiveAugmentedIOException.hpp>
#include <com/sun/star/ucb/GlobalTransferCommandArgument2.hpp>
#include <com/sun/star/ucb/NameClash.hpp>
#include <com/sun/star/ucb/OpenMode.hpp>
@@ -64,6 +67,8 @@
#include <com/sun/star/sdbc/XRow.hpp>
#include <com/sun/star/lang/IllegalArgumentException.hpp>
#include <com/sun/star/beans/UnknownPropertyException.hpp>
+#include <com/sun/star/task/XInteractionRequest.hpp>
+
#include <ucbhelper/macros.hxx>
#include <ucbhelper/content.hxx>
#include <ucbhelper/activedatasink.hxx>
@@ -71,6 +76,10 @@
#include <ucbhelper/activedatastreamer.hxx>
#include <ucbhelper/interactionrequest.hxx>
#include <ucbhelper/cancelcommandexecution.hxx>
+#include <ucbhelper/fileidentifierconverter.hxx>
+#include <ucbhelper/simpleinteractionrequest.hxx>
+
+#include <memory>
using namespace com::sun::star::container;
using namespace com::sun::star::beans;
@@ -373,6 +382,54 @@ static Reference< XContent > getContent(
return Reference< XContent >();
}
+namespace
+{
+
+void
+lcl_displayMessage(
+ const Reference<XCommandEnvironment>& rEnvironment,
+ const rtl::OUString& rUri)
+{
+ // Create exception
+ const Reference<XContentProviderManager> xCPM(
+ getContentBroker(true)->getContentProviderManagerInterface());
+ const PropertyValue aUriProperty(
+ rtl::OUString::createFromAscii("Uri"),
+ -1,
+ makeAny(getSystemPathFromFileURL(xCPM, rUri)),
+ PropertyState_DIRECT_VALUE)
+ ;
+ Sequence<Any> lArguments(1);
+ lArguments[0] <<= aUriProperty;
+ const InteractiveAugmentedIOException xError(
+ rtl::OUString(),
+ 0,
+ InteractionClassification_ERROR,
+ IOErrorCode_NO_FILE,
+ lArguments)
+ ;
+
+ // Create interaction request
+ std::auto_ptr<ucbhelper::SimpleInteractionRequest> aRequest(
+ new ucbhelper::SimpleInteractionRequest(makeAny(xError), CONTINUATION_APPROVE));
+ {
+ Reference<XInteractionContinuation> xContinuation(
+ new ::ucbhelper::InteractionApprove(aRequest.get()));
+ Sequence<Reference<XInteractionContinuation> > lContinuations(1);
+ lContinuations[0].set(xContinuation);
+ aRequest->setContinuations(lContinuations);
+ }
+
+ Reference<XInteractionHandler> xInteraction(rEnvironment->getInteractionHandler());
+ if (xInteraction.is())
+ {
+ Reference<XInteractionRequest> xRequest(aRequest.release());
+ xInteraction->handle(xRequest);
+ }
+}
+
+}
+
//=========================================================================
//=========================================================================
//
@@ -787,7 +902,10 @@ Reference< XInputStream > Content::openStream()
throw( CommandAbortedException, RuntimeException, Exception )
{
if ( !isDocument() )
+ {
+ lcl_displayMessage(m_xImpl->getEnvironment(), getURL());
return Reference< XInputStream >();
+ }
Reference< XActiveDataSink > xSink = new ActiveDataSink;
@@ -813,7 +930,10 @@ Reference< XInputStream > Content::openStreamNoLock()
throw( CommandAbortedException, RuntimeException, Exception )
{
if ( !isDocument() )
+ {
+ lcl_displayMessage(m_xImpl->getEnvironment(), getURL());
return Reference< XInputStream >();
+ }
Reference< XActiveDataSink > xSink = new ActiveDataSink;
@@ -838,7 +965,10 @@ Reference< XStream > Content::openWriteableStream()
throw( CommandAbortedException, RuntimeException, Exception )
{
if ( !isDocument() )
+ {
+ lcl_displayMessage(m_xImpl->getEnvironment(), getURL());
return Reference< XStream >();
+ }
Reference< XActiveDataStreamer > xStreamer = new ActiveDataStreamer;
@@ -863,7 +990,10 @@ Reference< XStream > Content::openWriteableStreamNoLock()
throw( CommandAbortedException, RuntimeException, Exception )
{
if ( !isDocument() )
+ {
+ lcl_displayMessage(m_xImpl->getEnvironment(), getURL());
return Reference< XStream >();
+ }
Reference< XActiveDataStreamer > xStreamer = new ActiveDataStreamer;
@@ -888,7 +1019,10 @@ sal_Bool Content::openStream( const Reference< XActiveDataSink >& rSink )
throw( CommandAbortedException, RuntimeException, Exception )
{
if ( !isDocument() )
+ {
+ lcl_displayMessage(m_xImpl->getEnvironment(), getURL());
return sal_False;
+ }
OpenCommandArgument2 aArg;
aArg.Mode = OpenMode::DOCUMENT;
@@ -911,7 +1045,10 @@ sal_Bool Content::openStream( const Reference< XOutputStream >& rStream )
throw( CommandAbortedException, RuntimeException, Exception )
{
if ( !isDocument() )
+ {
+ lcl_displayMessage(m_xImpl->getEnvironment(), getURL());
return sal_False;
+ }
OpenCommandArgument2 aArg;
aArg.Mode = OpenMode::DOCUMENT;
--
1.7.7.3