Date: prev next · Thread: first prev next last
2013 Archives by date, by thread · List index


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/2698

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/98/2698/1

rhbz#895690: Make GIO UCP less brittle, so saving docs works again

966d20e35d5a2be2fce6c204af5c156c3ead7063 "CMIS ucp: write documents back to CMIS
server" had introduced changes to sfx2/source/doc/docfile.cxx in LO 3.6 that
changed the exact commands that this code issued for UCP content nodes.  The GIO
UCP was not prepared to handle that, causing saving of documents via it to fail
with rather obscure error messages:

* For one, docfile.cxx started to call "getPropertyValues" to obtain the "Title"
  of a non-existent content.  That lead to an InteractiveAugmentedIOException
  instead of silently returning a void value.

* For another, docfile.cxx started to call "transfer" on a folder content whose
  URL did not have a trailing slash, so the code computed a wrong URL for the
  child element, resulting in various problems depending on context.

Change-Id: I1a9c0c094f5320456940e3af4c802711828ab5ac
(cherry picked from commit 8722f0e7ef690205d042c8a6b1fdf342a34ecbe1)
---
M ucb/source/ucp/gio/gio_content.cxx
1 file changed, 15 insertions(+), 16 deletions(-)



diff --git a/ucb/source/ucp/gio/gio_content.cxx b/ucb/source/ucp/gio/gio_content.cxx
index b675f25..4833a48 100644
--- a/ucb/source/ucp/gio/gio_content.cxx
+++ b/ucb/source/ucp/gio/gio_content.cxx
@@ -408,7 +408,7 @@
 
         if ( rProp.Name == "IsDocument" )
         {
-            if (g_file_info_has_attribute(pInfo, G_FILE_ATTRIBUTE_STANDARD_TYPE))
+            if (pInfo != 0 && g_file_info_has_attribute(pInfo, G_FILE_ATTRIBUTE_STANDARD_TYPE))
                 xRow->appendBoolean( rProp, ( g_file_info_get_file_type( pInfo ) == 
G_FILE_TYPE_REGULAR ||
                                                g_file_info_get_file_type( pInfo ) == 
G_FILE_TYPE_UNKNOWN ) );
             else
@@ -416,45 +416,45 @@
         }
         else if ( rProp.Name == "IsFolder" )
         {
-            if( g_file_info_has_attribute( pInfo, G_FILE_ATTRIBUTE_STANDARD_TYPE) )
+            if (pInfo != 0 && g_file_info_has_attribute( pInfo, G_FILE_ATTRIBUTE_STANDARD_TYPE) )
                 xRow->appendBoolean( rProp, ( g_file_info_get_file_type( pInfo ) == 
G_FILE_TYPE_DIRECTORY ));
             else
                 xRow->appendVoid( rProp );
         }
         else if ( rProp.Name == "Title" )
         {
-            if (g_file_info_has_attribute(pInfo, G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME))
+            if (pInfo != 0 && g_file_info_has_attribute(pInfo, 
G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME))
             {
                 const char *pName = g_file_info_get_display_name(pInfo);
                 xRow->appendString( rProp, rtl::OUString(pName, strlen(pName), 
RTL_TEXTENCODING_UTF8) );
             }
             else
-                xRow->appendVoid( rProp );
+                xRow->appendVoid(rProp);
         }
         else if ( rProp.Name == "IsReadOnly" )
         {
-            if( g_file_info_has_attribute( pInfo, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE ) )
+            if (pInfo != 0 && g_file_info_has_attribute( pInfo, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE 
) )
                 xRow->appendBoolean( rProp, !g_file_info_get_attribute_boolean( pInfo, 
G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE) );
             else
                 xRow->appendVoid( rProp );
         }
         else if ( rProp.Name == "DateCreated" )
         {
-            if( g_file_info_has_attribute( pInfo, G_FILE_ATTRIBUTE_TIME_CREATED ) )
+            if (pInfo != 0 && g_file_info_has_attribute( pInfo, G_FILE_ATTRIBUTE_TIME_CREATED ) )
                 xRow->appendTimestamp( rProp, 
getDateFromUnix(g_file_info_get_attribute_uint64(pInfo, G_FILE_ATTRIBUTE_TIME_CREATED)) );
             else
                 xRow->appendVoid( rProp );
         }
         else if ( rProp.Name == "DateModified" )
         {
-            if( g_file_info_has_attribute( pInfo,  G_FILE_ATTRIBUTE_TIME_CHANGED ) )
+            if (pInfo != 0 && g_file_info_has_attribute( pInfo,  G_FILE_ATTRIBUTE_TIME_CHANGED ) )
                 xRow->appendTimestamp( rProp, 
getDateFromUnix(g_file_info_get_attribute_uint64(pInfo, G_FILE_ATTRIBUTE_TIME_CHANGED)) );
             else
                 xRow->appendVoid( rProp );
         }
         else if ( rProp.Name == "Size" )
         {
-            if( g_file_info_has_attribute( pInfo, G_FILE_ATTRIBUTE_STANDARD_SIZE) )
+            if (pInfo != 0 && g_file_info_has_attribute( pInfo, G_FILE_ATTRIBUTE_STANDARD_SIZE) )
                 xRow->appendLong( rProp, ( g_file_info_get_size( pInfo ) ));
             else
                 xRow->appendVoid( rProp );
@@ -466,14 +466,14 @@
         }
         else if ( rProp.Name == "IsCompactDisc" )
         {
-            if( g_file_info_has_attribute( pInfo, G_FILE_ATTRIBUTE_MOUNTABLE_CAN_EJECT ) )
+            if (pInfo != 0 && g_file_info_has_attribute( pInfo, 
G_FILE_ATTRIBUTE_MOUNTABLE_CAN_EJECT ) )
                 xRow->appendBoolean( rProp, g_file_info_get_attribute_boolean(pInfo, 
G_FILE_ATTRIBUTE_MOUNTABLE_CAN_EJECT) );
             else
                 xRow->appendVoid( rProp );
         }
         else if ( rProp.Name == "IsRemoveable" )
         {
-            if( g_file_info_has_attribute( pInfo, G_FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT ) )
+            if (pInfo != 0 && g_file_info_has_attribute( pInfo, 
G_FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT ) )
                 xRow->appendBoolean( rProp, g_file_info_get_attribute_boolean(pInfo, 
G_FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT ) );
             else
                 xRow->appendVoid( rProp );
@@ -484,7 +484,7 @@
         }
         else if ( rProp.Name == "IsHidden" )
         {
-            if( g_file_info_has_attribute( pInfo, G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN) )
+            if (pInfo != 0 && g_file_info_has_attribute( pInfo, 
G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN) )
                 xRow->appendBoolean( rProp, ( g_file_info_get_is_hidden ( pInfo ) ) );
             else
                 xRow->appendVoid( rProp );
@@ -509,11 +509,7 @@
                 const uno::Sequence< beans::Property >& rProperties,
                 const uno::Reference< ucb::XCommandEnvironment >& xEnv )
 {
-    GError *pError = NULL;
-    GFileInfo *pInfo = getGFileInfo(xEnv, &pError);
-    if (!pInfo)
-        ucbhelper::cancelCommandExecution(mapGIOError(pError), xEnv);
-
+    GFileInfo *pInfo = getGFileInfo(xEnv);
     return getPropertyValuesFromGFileInfo(pInfo, m_xContext, xEnv, rProperties);
 }
 
@@ -1066,6 +1062,9 @@
     throw( uno::Exception )
 {
     rtl::OUString sDest = m_xIdentifier->getContentIdentifier();
+    if (!sDest.endsWith("/")) {
+        sDest += "/";
+    }
     if (aTransferInfo.NewTitle.getLength())
         sDest += aTransferInfo.NewTitle;
     else

-- 
To view, visit https://gerrit.libreoffice.org/2698
To unsubscribe, visit https://gerrit.libreoffice.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I1a9c0c094f5320456940e3af4c802711828ab5ac
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: libreoffice-4-0-2
Gerrit-Owner: Stephan Bergmann <sbergman@redhat.com>


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.