summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2012-08-22 09:11:23 +0200
committerMichael Stahl <mstahl@redhat.com>2012-08-22 16:22:24 +0000
commitfc08156b06c82a1a2b9d64b57caaf434485d4d3e (patch)
tree60c76eda47f708e4de4c614912ba657fb3807f45
parent6cbb9602e15794b4d39d2482a40c22d3fd0328f9 (diff)
fdo#46249: UCBContentHelper::GetTitle must not fail for void property
This was a regression introduced with 2af9040d38af7c7353855415dbea0134585058f3 "Cleaned up utl::UCBContentHelper." GetSize exhibited the same problem and has also been fixed. IsYounger exhibits a similar problem, but has not been addressed, as it is unclear what to return in case no dates can be compared; it is only used in one place (handling SID_EDITDOC in SfxViewFrame::ExecReload_Impl, sfx2/source/view/viewfrm.cxx) where, it appears, only contents for which DateModified /does/ yield a non-void value are relevant. (cherry picked from commit 27c7682e5e5859eb353443d6091143694a56bee8) Conflicts: unotools/source/ucbhelper/ucbhelper.cxx Change-Id: I748745a1d7f361f8f91be87d7356983ee7261b1e Reviewed-on: https://gerrit.libreoffice.org/452 Reviewed-by: Michael Stahl <mstahl@redhat.com> Tested-by: Michael Stahl <mstahl@redhat.com>
-rw-r--r--unotools/inc/unotools/ucbhelper.hxx7
-rw-r--r--unotools/source/ucbhelper/ucbhelper.cxx23
2 files changed, 21 insertions, 9 deletions
diff --git a/unotools/inc/unotools/ucbhelper.hxx b/unotools/inc/unotools/ucbhelper.hxx
index 358d8e119c60..3ff576b862f3 100644
--- a/unotools/inc/unotools/ucbhelper.hxx
+++ b/unotools/inc/unotools/ucbhelper.hxx
@@ -47,6 +47,10 @@ UNOTOOLS_DLLPUBLIC bool IsDocument(rtl::OUString const & url);
UNOTOOLS_DLLPUBLIC bool IsFolder(rtl::OUString const & url);
+/// @param title must not be null
+/// @return true iff title has been set (i.e., if obtaining the "Title" property
+/// of the given content yields a non-void value without raising a
+/// non-RuntimeException; RuntimeExceptions are passed through)
UNOTOOLS_DLLPUBLIC bool GetTitle(
rtl::OUString const & url, rtl::OUString * title);
@@ -62,6 +66,9 @@ UNOTOOLS_DLLPUBLIC bool MakeFolder(
ucbhelper::Content & parent, rtl::OUString const & title,
ucbhelper::Content & result, bool exclusive = false);
+/// @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)
UNOTOOLS_DLLPUBLIC sal_Int64 GetSize(rtl::OUString const & url);
UNOTOOLS_DLLPUBLIC bool IsYounger(
diff --git a/unotools/source/ucbhelper/ucbhelper.cxx b/unotools/source/ucbhelper/ucbhelper.cxx
index daee93fc2d3a..4747d5e55f2a 100644
--- a/unotools/source/ucbhelper/ucbhelper.cxx
+++ b/unotools/source/ucbhelper/ucbhelper.cxx
@@ -200,11 +200,10 @@ bool utl::UCBContentHelper::GetTitle(
{
assert(title != 0);
try {
- *title = content(url).
- getPropertyValue(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Title"))).
- get<rtl::OUString>();
- return true;
+ return
+ content(url).getPropertyValue(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Title")))
+ >>= *title;
} catch (css::uno::RuntimeException const &) {
throw;
} catch (css::ucb::CommandAbortedException const &) {
@@ -341,10 +340,16 @@ bool utl::UCBContentHelper::MakeFolder(
sal_Int64 utl::UCBContentHelper::GetSize(rtl::OUString const & url) {
try {
- return
- content(url).getPropertyValue(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Size"))).
- get<sal_Int64>();
+ sal_Int64 n = 0;
+ bool ok =
+ (content(url).getPropertyValue(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Size")))
+ >>= n);
+ SAL_INFO_IF(
+ !ok, "unotools",
+ "UCBContentHelper::GetSize(" << url
+ << "): Size cannot be determined");
+ return n;
} catch (css::uno::RuntimeException const &) {
throw;
} catch (css::ucb::CommandAbortedException const &) {