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:
parent
8a8d1e5b49
commit
319b160320
3 changed files with 47 additions and 1 deletions
|
@ -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: */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -994,7 +994,6 @@ void SfxObjectShell::GetState_Impl(SfxItemSet &rSet)
|
|||
uno::Sequence< sal_Bool > bTmp;
|
||||
aCmisProperties[i].Value >>= bTmp;
|
||||
bCheckedOut = bTmp[0];
|
||||
|
||||
}
|
||||
}
|
||||
bShow = bCheckedOut;
|
||||
|
|
Loading…
Reference in a new issue