CMIS file picker: it really does not like ID Mark

The file picker can't go back folder if we use
ID mark in the URL.

Conflicts:
	ucb/source/ucp/cmis/cmis_content.cxx

Change-Id: I6985feec71dc23848ee022e0bab9e8515a21ffd2
This commit is contained in:
Cao Cuong Ngo 2013-09-21 23:36:06 +02:00 committed by Cédric Bosdonnat
parent 8a8d1e5b49
commit 319b160320
3 changed files with 47 additions and 1 deletions

View file

@ -484,6 +484,7 @@ sal_Bool MediaDescriptor::impl_addInputStream( sal_Bool bLockFile )
css::uno::Reference< css::uno::XInterface >());
// Parse URL! Only the main part has to be used further. E.g. a jumpmark can make trouble
OUString sNormalizedURL = impl_normalizeURL( sURL );
return impl_openStreamWithURL( removeFragment(sURL), bLockFile );
}
catch(const css::uno::Exception& ex)
@ -723,6 +724,40 @@ sal_Bool MediaDescriptor::impl_openStreamWithURL( const OUString& sURL, sal_Bool
return xInputStream.is();
}
OUString MediaDescriptor::impl_normalizeURL(const OUString& sURL)
{
/* Remove Jumpmarks (fragments) of an URL only here.
They are not part of any URL and as a result may be
no ucb content can be created then.
On the other side arguments must exists ... because
they are part of an URL.
Do not use the URLTransformer service here. Because
it parses the URL in another way. It's main part isnt enough
and it's complete part contains the jumpmark (fragment) parameter ...
*/
try
{
css::uno::Reference< css::uno::XComponentContext > xContext = ::comphelper::getProcessComponentContext();
css::uno::Reference< css::uri::XUriReferenceFactory > xUriFactory = css::uri::UriReferenceFactory::create(xContext);;
css::uno::Reference< css::uri::XUriReference > xUriRef = xUriFactory->parse(sURL);
if (xUriRef.is())
{
xUriRef->clearFragment();
return xUriRef->getUriReference();
}
}
catch(const css::uno::RuntimeException&)
{ throw; }
catch(const css::uno::Exception&)
{}
// If an error ocurred ... return the original URL.
// It's a try .-)
return sURL;
}
} // namespace comphelper
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

View file

@ -289,6 +289,18 @@ class COMPHELPER_DLLPUBLIC MediaDescriptor : public SequenceAsHashMap
be created as new item. FALSE otherwise.
*/
COMPHELPER_DLLPRIVATE sal_Bool impl_addInputStream( sal_Bool bLockFile );
/** @short some URL parts can make trouble for opening streams (e.g. jumpmarks.)
An URL should be "normalized" before its used.
@param sURL
the original URL (e.g. including a jumpmark)
@return [string]
the "normalized" URL (e.g. without jumpmark)
*/
COMPHELPER_DLLPRIVATE OUString impl_normalizeURL(const OUString& sURL);
};
} // namespace comphelper

View file

@ -994,7 +994,6 @@ void SfxObjectShell::GetState_Impl(SfxItemSet &rSet)
uno::Sequence< sal_Bool > bTmp;
aCmisProperties[i].Value >>= bTmp;
bCheckedOut = bTmp[0];
}
}
bShow = bCheckedOut;