ucb/source/ucp/gio/gio_content.cxx |   31 +++++++++++++++----------------
 1 file changed, 15 insertions(+), 16 deletions(-)

New commits:
commit 524962c4ade96412ed4c1bbf912492e39d054f0f
Author: Stephan Bergmann <[email protected]>
Date:   Wed Mar 13 08:59:42 2013 +0100

    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.
    
    (cherry picked from commit 8722f0e7ef690205d042c8a6b1fdf342a34ecbe1)
    Conflicts:
        ucb/source/ucp/gio/gio_content.cxx
    
    Change-Id: I1a9c0c094f5320456940e3af4c802711828ab5ac
    Reviewed-on: https://gerrit.libreoffice.org/2697
    Reviewed-by: Bosdonnat Cedric <[email protected]>
    Tested-by: Bosdonnat Cedric <[email protected]>

diff --git a/ucb/source/ucp/gio/gio_content.cxx 
b/ucb/source/ucp/gio/gio_content.cxx
index 5029e06..b8900f8 100644
--- a/ucb/source/ucp/gio/gio_content.cxx
+++ b/ucb/source/ucp/gio/gio_content.cxx
@@ -416,7 +416,7 @@ uno::Reference< sdbc::XRow > 
Content::getPropertyValuesFromGFileInfo(GFileInfo *
 
         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
@@ -424,45 +424,45 @@ uno::Reference< sdbc::XRow > 
Content::getPropertyValuesFromGFileInfo(GFileInfo *
         }
         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 );
@@ -474,14 +474,14 @@ uno::Reference< sdbc::XRow > 
Content::getPropertyValuesFromGFileInfo(GFileInfo *
         }
         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 );
@@ -492,7 +492,7 @@ uno::Reference< sdbc::XRow > 
Content::getPropertyValuesFromGFileInfo(GFileInfo *
         }
         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 );
@@ -517,11 +517,7 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues(
                 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_xSMgr, xEnv, rProperties);
 }
 
@@ -1074,6 +1070,9 @@ void Content::transfer( const ucb::TransferInfo& 
aTransferInfo, const uno::Refer
     throw( uno::Exception )
 {
     rtl::OUString sDest = m_xIdentifier->getContentIdentifier();
+    if (!sDest.endsWith("/")) {
+        sDest += "/";
+    }
     if (aTransferInfo.NewTitle.getLength())
         sDest += aTransferInfo.NewTitle;
     else
_______________________________________________
Libreoffice-commits mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to