| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_sfx2.hxx" |
| |
| #include "helper.hxx" |
| #include <com/sun/star/lang/XMultiServiceFactory.hpp> |
| #include <com/sun/star/sdbc/XResultSet.hpp> |
| #include <com/sun/star/sdbc/XRow.hpp> |
| #include <com/sun/star/ucb/CommandAbortedException.hpp> |
| #include <com/sun/star/ucb/IllegalIdentifierException.hpp> |
| #include <com/sun/star/ucb/NameClash.hpp> |
| #include <com/sun/star/ucb/NumberedSortingInfo.hpp> |
| #include <com/sun/star/ucb/TransferInfo.hpp> |
| #include <com/sun/star/ucb/XAnyCompareFactory.hpp> |
| #include <com/sun/star/ucb/XCommandInfo.hpp> |
| #include <com/sun/star/ucb/XContentAccess.hpp> |
| #include <com/sun/star/ucb/XDynamicResultSet.hpp> |
| #include <com/sun/star/ucb/XSortedDynamicResultSetFactory.hpp> |
| #include <com/sun/star/util/DateTime.hpp> |
| #include <com/sun/star/io/XInputStream.hpp> |
| #include <unotools/localedatawrapper.hxx> |
| #include <rtl/strbuf.hxx> |
| |
| #include <tools/ref.hxx> |
| #include <tools/debug.hxx> |
| #include <tools/urlobj.hxx> |
| #include <tools/datetime.hxx> |
| #include <vcl/svapp.hxx> |
| #include <ucbhelper/content.hxx> |
| #include <ucbhelper/commandenvironment.hxx> |
| #include <comphelper/processfactory.hxx> |
| #include <osl/file.hxx> |
| |
| using namespace com::sun::star; |
| using namespace rtl; |
| using namespace comphelper; |
| using namespace osl; |
| |
| DECLARE_LIST( StringList_Impl, OUString* ) |
| |
| #define CONVERT_DATETIME( aUnoDT, aToolsDT ) \ |
| aToolsDT = DateTime( Date( aUnoDT.Day, aUnoDT.Month, aUnoDT.Year ), \ |
| Time( aUnoDT.Hours, aUnoDT.Minutes, aUnoDT.Seconds, aUnoDT.HundredthSeconds ) ); |
| |
| void AppendDateTime_Impl( const util::DateTime rDT, |
| String& rRow, const LocaleDataWrapper& rWrapper ) |
| { |
| DateTime aDT; |
| CONVERT_DATETIME( rDT, aDT ); |
| String aDateStr = rWrapper.getDate( aDT ); |
| aDateStr += String::CreateFromAscii( ", " ); |
| aDateStr += rWrapper.getTime( aDT ); |
| rRow += aDateStr; |
| } |
| |
| // SfxContentHelper ------------------------------------------------------ |
| |
| sal_Bool SfxContentHelper::Transfer_Impl( const String& rSource, const String& rDest, sal_Bool bMoveData, sal_Int32 nNameClash ) |
| { |
| sal_Bool bRet = sal_True, bKillSource = sal_False; |
| INetURLObject aSourceObj( rSource ); |
| DBG_ASSERT( aSourceObj.GetProtocol() != INET_PROT_NOT_VALID, "Invalid URL!" ); |
| |
| INetURLObject aDestObj( rDest ); |
| DBG_ASSERT( aDestObj.GetProtocol() != INET_PROT_NOT_VALID, "Invalid URL!" ); |
| if ( bMoveData && aSourceObj.GetProtocol() != aDestObj.GetProtocol() ) |
| { |
| bMoveData = sal_False; |
| bKillSource = sal_True; |
| } |
| String aName = aDestObj.getName(); |
| aDestObj.removeSegment(); |
| aDestObj.setFinalSlash(); |
| |
| try |
| { |
| ::ucbhelper::Content aDestPath( aDestObj.GetMainURL( INetURLObject::NO_DECODE ), uno::Reference< ucb::XCommandEnvironment > () ); |
| uno::Reference< ucb::XCommandInfo > xInfo = aDestPath.getCommands(); |
| OUString aTransferName = OUString::createFromAscii( "transfer" ); |
| if ( xInfo->hasCommandByName( aTransferName ) ) |
| { |
| aDestPath.executeCommand( aTransferName, uno::makeAny( |
| ucb::TransferInfo( bMoveData, aSourceObj.GetMainURL( INetURLObject::NO_DECODE ), aName, nNameClash ) ) ); |
| } |
| else |
| { |
| DBG_ERRORFILE( "transfer command not available" ); |
| } |
| } |
| catch( ucb::CommandAbortedException& ) |
| { |
| bRet = sal_False; |
| } |
| catch( uno::Exception& ) |
| { |
| DBG_ERRORFILE( "Any other exception" ); |
| bRet = sal_False; |
| } |
| |
| if ( bKillSource ) |
| SfxContentHelper::Kill( rSource ); |
| |
| return bRet; |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| sal_Bool SfxContentHelper::IsDocument( const String& rContent ) |
| { |
| sal_Bool bRet = sal_False; |
| INetURLObject aObj( rContent ); |
| DBG_ASSERT( aObj.GetProtocol() != INET_PROT_NOT_VALID, "Invalid URL!" ); |
| |
| try |
| { |
| ::ucbhelper::Content aCnt( aObj.GetMainURL( INetURLObject::NO_DECODE ), uno::Reference< ucb::XCommandEnvironment > () ); |
| bRet = aCnt.isDocument(); |
| } |
| catch( ucb::CommandAbortedException& ) |
| { |
| DBG_WARNING( "CommandAbortedException" ); |
| } |
| catch( ucb::IllegalIdentifierException& ) |
| { |
| DBG_WARNING( "IllegalIdentifierException" ); |
| } |
| catch( ucb::ContentCreationException& ) |
| { |
| DBG_WARNING( "IllegalIdentifierException" ); |
| } |
| catch( uno::Exception& ) |
| { |
| DBG_ERRORFILE( "Any other exception" ); |
| } |
| |
| return bRet; |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| sal_Bool SfxContentHelper::IsFolder( const String& rContent ) |
| { |
| sal_Bool bRet = sal_False; |
| INetURLObject aObj( rContent ); |
| DBG_ASSERT( aObj.GetProtocol() != INET_PROT_NOT_VALID, "Invalid URL!" ); |
| try |
| { |
| ::ucbhelper::Content aCnt( aObj.GetMainURL( INetURLObject::NO_DECODE ), uno::Reference< ucb::XCommandEnvironment > () ); |
| bRet = aCnt.isFolder(); |
| } |
| catch( ucb::CommandAbortedException& ) |
| { |
| DBG_WARNING( "CommandAbortedException" ); |
| } |
| catch( ucb::IllegalIdentifierException& ) |
| { |
| DBG_WARNING( "IllegalIdentifierException" ); |
| } |
| catch( ucb::ContentCreationException& ) |
| { |
| DBG_WARNING( "IllegalIdentifierException" ); |
| } |
| catch( uno::Exception& ) |
| { |
| DBG_ERRORFILE( "Any other exception" ); |
| } |
| |
| return bRet; |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| sal_Bool SfxContentHelper::GetTitle( const String& rContent, String& rTitle ) |
| { |
| sal_Bool bRet = sal_False; |
| INetURLObject aObj( rContent ); |
| DBG_ASSERT( aObj.GetProtocol() != INET_PROT_NOT_VALID, "Invalid URL!" ); |
| try |
| { |
| ::ucbhelper::Content aCnt( aObj.GetMainURL( INetURLObject::NO_DECODE ), uno::Reference< ucb::XCommandEnvironment > () ); |
| OUString aTemp; |
| aCnt.getPropertyValue( OUString::createFromAscii( "Title" ) ) >>= aTemp; |
| rTitle = String( aTemp ); |
| bRet = sal_True; |
| } |
| catch( ucb::CommandAbortedException& ) |
| { |
| DBG_ERRORFILE( "CommandAbortedException" ); |
| } |
| catch( uno::Exception& ) |
| { |
| DBG_ERRORFILE( "Any other exception" ); |
| } |
| return bRet; |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| sal_Bool SfxContentHelper::Kill( const String& rContent ) |
| { |
| sal_Bool bRet = sal_True; |
| INetURLObject aDeleteObj( rContent ); |
| DBG_ASSERT( aDeleteObj.GetProtocol() != INET_PROT_NOT_VALID, "Invalid URL!" ); |
| |
| try |
| { |
| ::ucbhelper::Content aCnt( aDeleteObj.GetMainURL( INetURLObject::NO_DECODE ), uno::Reference< ucb::XCommandEnvironment > () ); |
| aCnt.executeCommand( OUString::createFromAscii( "delete" ), uno::makeAny( sal_Bool( sal_True ) ) ); |
| } |
| catch( ucb::CommandAbortedException& ) |
| { |
| DBG_WARNING( "CommandAbortedException" ); |
| bRet = sal_False; |
| } |
| catch( uno::Exception& ) |
| { |
| DBG_ERRORFILE( "Any other exception" ); |
| bRet = sal_False; |
| } |
| |
| return bRet; |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| uno::Sequence < OUString > SfxContentHelper::GetFolderContents( const String& rFolder, sal_Bool bFolder, sal_Bool bSorted ) |
| { |
| StringList_Impl* pFiles = NULL; |
| INetURLObject aFolderObj( rFolder ); |
| DBG_ASSERT( aFolderObj.GetProtocol() != INET_PROT_NOT_VALID, "Invalid URL!" ); |
| try |
| { |
| ::ucbhelper::Content aCnt( aFolderObj.GetMainURL( INetURLObject::NO_DECODE ), uno::Reference< ucb::XCommandEnvironment > () ); |
| uno::Reference< sdbc::XResultSet > xResultSet; |
| uno::Sequence< OUString > aProps(2); |
| OUString* pProps = aProps.getArray(); |
| pProps[0] = OUString::createFromAscii( "Title" ); |
| pProps[1] = OUString::createFromAscii( "IsFolder" ); |
| |
| try |
| { |
| ::ucbhelper::ResultSetInclude eInclude = bFolder ? ::ucbhelper::INCLUDE_FOLDERS_AND_DOCUMENTS : ::ucbhelper::INCLUDE_DOCUMENTS_ONLY; |
| if ( !bSorted ) |
| { |
| xResultSet = aCnt.createCursor( aProps, eInclude ); |
| } |
| else |
| { |
| uno::Reference< ucb::XDynamicResultSet > xDynResultSet; |
| xDynResultSet = aCnt.createDynamicCursor( aProps, eInclude ); |
| |
| uno::Reference < ucb::XAnyCompareFactory > xFactory; |
| uno::Reference < lang::XMultiServiceFactory > xMgr = getProcessServiceFactory(); |
| uno::Reference < ucb::XSortedDynamicResultSetFactory > xSRSFac( |
| xMgr->createInstance( ::rtl::OUString::createFromAscii("com.sun.star.ucb.SortedDynamicResultSetFactory") ), uno::UNO_QUERY ); |
| |
| uno::Sequence< ucb::NumberedSortingInfo > aSortInfo( 2 ); |
| ucb::NumberedSortingInfo* pInfo = aSortInfo.getArray(); |
| pInfo[ 0 ].ColumnIndex = 2; |
| pInfo[ 0 ].Ascending = sal_False; |
| pInfo[ 1 ].ColumnIndex = 1; |
| pInfo[ 1 ].Ascending = sal_True; |
| |
| uno::Reference< ucb::XDynamicResultSet > xDynamicResultSet; |
| xDynamicResultSet = |
| xSRSFac->createSortedDynamicResultSet( xDynResultSet, aSortInfo, xFactory ); |
| if ( xDynamicResultSet.is() ) |
| { |
| xResultSet = xDynamicResultSet->getStaticResultSet(); |
| } |
| } |
| } |
| catch( ucb::CommandAbortedException& ) |
| { |
| DBG_ERRORFILE( "createCursor: CommandAbortedException" ); |
| } |
| catch( uno::Exception& ) |
| { |
| DBG_ERRORFILE( "createCursor: Any other exception" ); |
| } |
| |
| if ( xResultSet.is() ) |
| { |
| pFiles = new StringList_Impl; |
| uno::Reference< ucb::XContentAccess > xContentAccess( xResultSet, uno::UNO_QUERY ); |
| try |
| { |
| while ( xResultSet->next() ) |
| { |
| OUString aId = xContentAccess->queryContentIdentifierString(); |
| OUString* pFile = new OUString( aId ); |
| pFiles->Insert( pFile, LIST_APPEND ); |
| } |
| } |
| catch( ucb::CommandAbortedException& ) |
| { |
| DBG_ERRORFILE( "XContentAccess::next(): CommandAbortedException" ); |
| } |
| catch( uno::Exception& ) |
| { |
| DBG_ERRORFILE( "XContentAccess::next(): Any other exception" ); |
| } |
| } |
| } |
| catch( uno::Exception& ) |
| { |
| DBG_ERRORFILE( "GetFolderContents: Any other exception" ); |
| } |
| |
| if ( pFiles ) |
| { |
| sal_uIntPtr nCount = pFiles->Count(); |
| uno::Sequence < OUString > aRet( nCount ); |
| OUString* pRet = aRet.getArray(); |
| for ( sal_uIntPtr i = 0; i < nCount; ++i ) |
| { |
| OUString* pFile = pFiles->GetObject(i); |
| pRet[i] = *( pFile ); |
| delete pFile; |
| } |
| delete pFiles; |
| return aRet; |
| } |
| else |
| return uno::Sequence < OUString > (); |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| uno::Sequence < OUString > SfxContentHelper::GetFolderContentProperties( const String& rFolder, sal_Bool bIsFolder ) |
| { |
| StringList_Impl* pProperties = NULL; |
| INetURLObject aFolderObj( rFolder ); |
| DBG_ASSERT( aFolderObj.GetProtocol() != INET_PROT_NOT_VALID, "Invalid URL!" ); |
| try |
| { |
| uno::Reference< lang::XMultiServiceFactory > xFactory = ::comphelper::getProcessServiceFactory(); |
| uno::Reference< task::XInteractionHandler > xInteractionHandler = uno::Reference< task::XInteractionHandler > ( |
| xFactory->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.task.InteractionHandler") ) ), uno::UNO_QUERY ); |
| |
| ::ucbhelper::Content aCnt( aFolderObj.GetMainURL( INetURLObject::NO_DECODE ), new ::ucbhelper::CommandEnvironment( xInteractionHandler, uno::Reference< ucb::XProgressHandler >() ) ); |
| uno::Reference< sdbc::XResultSet > xResultSet; |
| uno::Sequence< OUString > aProps(5); |
| OUString* pProps = aProps.getArray(); |
| pProps[0] = OUString::createFromAscii( "Title" ); |
| pProps[1] = OUString::createFromAscii( "ContentType" ); |
| pProps[2] = OUString::createFromAscii( "Size" ); |
| pProps[3] = OUString::createFromAscii( "DateModified" ); |
| pProps[4] = OUString::createFromAscii( "IsFolder" ); |
| |
| try |
| { |
| uno::Reference< ucb::XDynamicResultSet > xDynResultSet; |
| ::ucbhelper::ResultSetInclude eInclude = bIsFolder ? ::ucbhelper::INCLUDE_FOLDERS_AND_DOCUMENTS : ::ucbhelper::INCLUDE_DOCUMENTS_ONLY; |
| xDynResultSet = aCnt.createDynamicCursor( aProps, eInclude ); |
| |
| uno::Reference < ucb::XAnyCompareFactory > xCmpFactory; |
| uno::Reference < lang::XMultiServiceFactory > xMgr = getProcessServiceFactory(); |
| uno::Reference < ucb::XSortedDynamicResultSetFactory > xSRSFac( |
| xMgr->createInstance( ::rtl::OUString::createFromAscii("com.sun.star.ucb.SortedDynamicResultSetFactory") ), uno::UNO_QUERY ); |
| |
| uno::Sequence< ucb::NumberedSortingInfo > aSortInfo( 2 ); |
| ucb::NumberedSortingInfo* pInfo = aSortInfo.getArray(); |
| pInfo[ 0 ].ColumnIndex = 5; |
| pInfo[ 0 ].Ascending = sal_False; |
| pInfo[ 1 ].ColumnIndex = 1; |
| pInfo[ 1 ].Ascending = sal_True; |
| |
| uno::Reference< ucb::XDynamicResultSet > xDynamicResultSet; |
| xDynamicResultSet = |
| xSRSFac->createSortedDynamicResultSet( xDynResultSet, aSortInfo, xCmpFactory ); |
| if ( xDynamicResultSet.is() ) |
| { |
| xResultSet = xDynamicResultSet->getStaticResultSet(); |
| } |
| |
| // if ( xDynResultSet.is() ) |
| // xResultSet = xDynResultSet->getStaticResultSet(); |
| } |
| catch( ucb::CommandAbortedException& ) |
| { |
| DBG_ERRORFILE( "createCursor: CommandAbortedException" ); |
| } |
| catch( uno::Exception& ) |
| { |
| DBG_ERRORFILE( "createCursor: Any other exception" ); |
| } |
| |
| if ( xResultSet.is() ) |
| { |
| LocaleDataWrapper aLocaleWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() ); |
| pProperties = new StringList_Impl; |
| uno::Reference< sdbc::XRow > xRow( xResultSet, uno::UNO_QUERY ); |
| uno::Reference< ucb::XContentAccess > xContentAccess( xResultSet, uno::UNO_QUERY ); |
| sal_uIntPtr nFolderPos = LIST_APPEND; |
| |
| try |
| { |
| while ( xResultSet->next() ) |
| { |
| String aTitle( xRow->getString(1) ); |
| String aType( xRow->getString(2) ); |
| sal_Int64 nSize = xRow->getLong(3); |
| util::DateTime aDT = xRow->getTimestamp(4); |
| sal_Bool bFolder = xRow->getBoolean(5); |
| |
| String aRow = aTitle; |
| aRow += '\t'; |
| //! aRow += aType; |
| //! aRow += '\t'; |
| aRow += String::CreateFromInt64( nSize ); |
| aRow += '\t'; |
| AppendDateTime_Impl( aDT, aRow, aLocaleWrapper ); |
| aRow += '\t'; |
| aRow += String( xContentAccess->queryContentIdentifierString() ); |
| aRow += '\t'; |
| aRow += bFolder ? '1' : '0'; |
| OUString* pRow = new OUString( aRow ); |
| sal_uIntPtr nPos = LIST_APPEND; |
| if ( bFolder ) |
| { |
| if ( LIST_APPEND == nFolderPos ) |
| nFolderPos = 0; |
| else |
| nFolderPos++; |
| nPos = nFolderPos; |
| } |
| pProperties->Insert( pRow, nPos ); |
| } |
| } |
| catch( ucb::CommandAbortedException& ) |
| { |
| DBG_ERRORFILE( "XContentAccess::next(): CommandAbortedException" ); |
| } |
| catch( uno::Exception& ) |
| { |
| DBG_ERRORFILE( "XContentAccess::next(): Any other exception" ); |
| } |
| } |
| } |
| catch( uno::Exception& ) |
| { |
| DBG_ERRORFILE( "GetFolderContents: Any other exception" ); |
| } |
| |
| if ( pProperties ) |
| { |
| sal_uIntPtr nCount = pProperties->Count(); |
| uno::Sequence < OUString > aRet( nCount ); |
| OUString* pRet = aRet.getArray(); |
| for ( sal_uIntPtr i = 0; i < nCount; ++i ) |
| { |
| OUString* pProperty = pProperties->GetObject(i); |
| pRet[i] = *( pProperty ); |
| delete pProperty; |
| } |
| delete pProperties; |
| return aRet; |
| } |
| else |
| return uno::Sequence < OUString > (); |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| uno::Sequence < OUString > SfxContentHelper::GetResultSet( const String& rURL ) |
| { |
| StringList_Impl* pList = NULL; |
| try |
| { |
| ::ucbhelper::Content aCnt( rURL, uno::Reference< ucb::XCommandEnvironment >() ); |
| uno::Reference< sdbc::XResultSet > xResultSet; |
| uno::Reference< ucb::XDynamicResultSet > xDynResultSet; |
| uno::Sequence< OUString > aProps(3); |
| OUString* pProps = aProps.getArray(); |
| pProps[0] = OUString::createFromAscii( "Title" ); |
| pProps[1] = OUString::createFromAscii( "ContentType" ); |
| pProps[2] = OUString::createFromAscii( "IsFolder" ); |
| |
| try |
| { |
| xDynResultSet = aCnt.createDynamicCursor( aProps, ::ucbhelper::INCLUDE_FOLDERS_AND_DOCUMENTS ); |
| if ( xDynResultSet.is() ) |
| xResultSet = xDynResultSet->getStaticResultSet(); |
| } |
| catch( ucb::CommandAbortedException& ) |
| { |
| DBG_ERRORFILE( "createCursor: CommandAbortedException" ); |
| } |
| catch( uno::Exception& ) |
| { |
| DBG_ERRORFILE( "createCursor: Any other exception" ); |
| } |
| |
| if ( xResultSet.is() ) |
| { |
| pList = new StringList_Impl; |
| uno::Reference< sdbc::XRow > xRow( xResultSet, uno::UNO_QUERY ); |
| uno::Reference< ucb::XContentAccess > xContentAccess( xResultSet, uno::UNO_QUERY ); |
| |
| try |
| { |
| while ( xResultSet->next() ) |
| { |
| String aTitle( xRow->getString(1) ); |
| String aType( xRow->getString(2) ); |
| String aRow = aTitle; |
| aRow += '\t'; |
| aRow += aType; |
| aRow += '\t'; |
| aRow += String( xContentAccess->queryContentIdentifierString() ); |
| OUString* pRow = new OUString( aRow ); |
| pList->Insert( pRow, LIST_APPEND ); |
| } |
| } |
| catch( ucb::CommandAbortedException& ) |
| { |
| DBG_ERRORFILE( "XContentAccess::next(): CommandAbortedException" ); |
| } |
| catch( uno::Exception& ) |
| { |
| DBG_ERRORFILE( "XContentAccess::next(): Any other exception" ); |
| } |
| } |
| } |
| catch( uno::Exception& e ) |
| { |
| (void) e; |
| DBG_ERRORFILE( |
| rtl::OUStringToOString( |
| (rtl::OUString( |
| RTL_CONSTASCII_USTRINGPARAM( |
| "GetResultSet: Any other exception: ")) + |
| e.Message), |
| RTL_TEXTENCODING_UTF8). |
| getStr()); |
| } |
| |
| if ( pList ) |
| { |
| sal_uIntPtr nCount = pList->Count(); |
| uno::Sequence < OUString > aRet( nCount ); |
| OUString* pRet = aRet.getArray(); |
| for ( sal_uIntPtr i = 0; i < nCount; ++i ) |
| { |
| OUString* pEntry = pList->GetObject(i); |
| pRet[i] = *( pEntry ); |
| delete pEntry; |
| } |
| delete pList; |
| return aRet; |
| } |
| else |
| return uno::Sequence < OUString > (); |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| uno::Sequence< OUString > SfxContentHelper::GetHelpTreeViewContents( const String& rURL ) |
| { |
| StringList_Impl* pProperties = NULL; |
| try |
| { |
| uno::Reference< lang::XMultiServiceFactory > xFactory = ::comphelper::getProcessServiceFactory(); |
| uno::Reference< task::XInteractionHandler > xInteractionHandler = uno::Reference< task::XInteractionHandler > ( |
| xFactory->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.task.InteractionHandler") ) ), uno::UNO_QUERY ); |
| |
| ::ucbhelper::Content aCnt( rURL, new ::ucbhelper::CommandEnvironment( xInteractionHandler, uno::Reference< ucb::XProgressHandler >() ) ); |
| uno::Reference< sdbc::XResultSet > xResultSet; |
| uno::Sequence< OUString > aProps(2); |
| OUString* pProps = aProps.getArray(); |
| pProps[0] = OUString::createFromAscii( "Title" ); |
| pProps[1] = OUString::createFromAscii( "IsFolder" ); |
| |
| try |
| { |
| uno::Reference< ucb::XDynamicResultSet > xDynResultSet; |
| xDynResultSet = aCnt.createDynamicCursor( aProps, ::ucbhelper::INCLUDE_FOLDERS_AND_DOCUMENTS ); |
| if ( xDynResultSet.is() ) |
| xResultSet = xDynResultSet->getStaticResultSet(); |
| } |
| catch( ucb::CommandAbortedException& ) |
| { |
| } |
| catch( uno::Exception& ) |
| { |
| } |
| |
| if ( xResultSet.is() ) |
| { |
| pProperties = new StringList_Impl; |
| uno::Reference< sdbc::XRow > xRow( xResultSet, uno::UNO_QUERY ); |
| uno::Reference< ucb::XContentAccess > xContentAccess( xResultSet, uno::UNO_QUERY ); |
| |
| try |
| { |
| while ( xResultSet->next() ) |
| { |
| String aTitle( xRow->getString(1) ); |
| sal_Bool bFolder = xRow->getBoolean(2); |
| String aRow = aTitle; |
| aRow += '\t'; |
| aRow += String( xContentAccess->queryContentIdentifierString() ); |
| aRow += '\t'; |
| aRow += bFolder ? '1' : '0'; |
| OUString* pRow = new OUString( aRow ); |
| pProperties->Insert( pRow, LIST_APPEND ); |
| } |
| } |
| catch( ucb::CommandAbortedException& ) |
| { |
| } |
| catch( uno::Exception& ) |
| { |
| } |
| } |
| } |
| catch( uno::Exception& ) |
| { |
| } |
| |
| if ( pProperties ) |
| { |
| sal_uIntPtr nCount = pProperties->Count(); |
| uno::Sequence < OUString > aRet( nCount ); |
| OUString* pRet = aRet.getArray(); |
| for ( sal_uIntPtr i = 0; i < nCount; ++i ) |
| { |
| OUString* pProperty = pProperties->GetObject(i); |
| pRet[i] = *( pProperty ); |
| delete pProperty; |
| } |
| delete pProperties; |
| return aRet; |
| } |
| else |
| return uno::Sequence < OUString > (); |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| String SfxContentHelper::GetActiveHelpString( const String& rURL ) |
| { |
| String aRet; |
| try |
| { |
| uno::Reference< lang::XMultiServiceFactory > xFactory = ::comphelper::getProcessServiceFactory(); |
| uno::Reference< task::XInteractionHandler > xInteractionHandler = uno::Reference< task::XInteractionHandler > ( |
| xFactory->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.task.InteractionHandler") ) ), uno::UNO_QUERY ); |
| ::ucbhelper::Content aCnt( rURL, new ::ucbhelper::CommandEnvironment( xInteractionHandler, uno::Reference< ucb::XProgressHandler >() ) ); |
| // open the "active help" stream |
| uno::Reference< io::XInputStream > xStream = aCnt.openStream(); |
| // and convert it to a String |
| uno::Sequence< sal_Int8 > lData; |
| sal_Int32 nRead = xStream->readBytes( lData, 1024 ); |
| while ( nRead > 0 ) |
| { |
| OStringBuffer sBuffer( nRead ); |
| for( sal_Int32 i = 0; i < nRead; ++i ) |
| sBuffer.append( (sal_Char)lData[i] ); |
| OUString sString = OStringToOUString( sBuffer.makeStringAndClear(), RTL_TEXTENCODING_UTF8 ); |
| aRet += String( sString ); |
| |
| nRead = xStream->readBytes( lData, 1024 ); |
| } |
| } |
| catch( uno::Exception& ) |
| { |
| } |
| |
| return aRet; |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| sal_Bool SfxContentHelper::IsHelpErrorDocument( const String& rURL ) |
| { |
| sal_Bool bRet = sal_False; |
| try |
| { |
| ::ucbhelper::Content aCnt( INetURLObject( rURL ).GetMainURL( INetURLObject::NO_DECODE ), |
| uno::Reference< ucb::XCommandEnvironment > () ); |
| if ( !( aCnt.getPropertyValue( OUString::createFromAscii( "IsErrorDocument" ) ) >>= bRet ) ) |
| { |
| DBG_ERRORFILE( "Property 'IsErrorDocument' is missing" ); |
| } |
| } |
| catch( uno::Exception& ) |
| { |
| } |
| |
| return bRet; |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| sal_Bool SfxContentHelper::CopyTo( const String& rSource, const String& rDest ) |
| { |
| return Transfer_Impl( rSource, rDest, sal_False, ucb::NameClash::ERROR ); |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| sal_Bool SfxContentHelper::MoveTo( const String& rSource, const String& rDest, sal_Int32 nNameClash ) |
| { |
| return Transfer_Impl( rSource, rDest, sal_True, nNameClash ); |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| sal_Bool SfxContentHelper::MakeFolder( const String& rFolder ) |
| { |
| INetURLObject aURL( rFolder ); |
| DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "Invalid URL!" ); |
| String aTitle = aURL.getName( INetURLObject::LAST_SEGMENT, true, INetURLObject::DECODE_WITH_CHARSET ); |
| aURL.removeSegment(); |
| uno::Sequence < OUString > aNames(2); |
| OUString* pNames = aNames.getArray(); |
| pNames[0] = OUString( RTL_CONSTASCII_USTRINGPARAM( "Title" ) ); |
| pNames[1] = OUString( RTL_CONSTASCII_USTRINGPARAM( "IsFolder" ) ); |
| uno::Sequence<uno::Any> aValues(2); |
| uno::Any* pValues = aValues.getArray(); |
| pValues[0] = uno::makeAny( OUString( aTitle ) ); |
| pValues[1] = uno::makeAny( sal_Bool( sal_True ) ); |
| uno::Reference< ucb::XCommandEnvironment > aCmdEnv; |
| sal_Bool bRet = sal_False; |
| try |
| { |
| ::ucbhelper::Content aCnt( aURL.GetMainURL( INetURLObject::NO_DECODE ), aCmdEnv ); |
| ::ucbhelper::Content aNewFolder; |
| OUString aType( RTL_CONSTASCII_USTRINGPARAM( "application/vnd.sun.staroffice.fsys-folder" ) ); |
| bRet = aCnt.insertNewContent( aType, aNames, aValues, aNewFolder ); |
| } |
| catch( ucb::CommandAbortedException& ) |
| { |
| // double name? |
| } |
| catch( ucb::IllegalIdentifierException& ) |
| { |
| DBG_ERRORFILE( "Illegal identifier" ); |
| } |
| catch( uno::Exception& ) |
| { |
| DBG_ERRORFILE( "Any other exception" ); |
| } |
| |
| return bRet; |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| ErrCode SfxContentHelper::QueryDiskSpace( const String& rPath, sal_Int64& rFreeBytes ) |
| { |
| ErrCode nErr = 0; |
| rFreeBytes = 0; |
| INetURLObject aObj( rPath ); |
| DBG_ASSERT( aObj.GetProtocol() != INET_PROT_NOT_VALID, "Invalid URL!" ); |
| try |
| { |
| ::ucbhelper::Content aCnt( aObj.GetMainURL( INetURLObject::NO_DECODE ), uno::Reference< ucb::XCommandEnvironment > () ); |
| aCnt.getPropertyValue( OUString::createFromAscii( "FreeSpace" ) ) >>= rFreeBytes; |
| } |
| catch( ucb::CommandAbortedException& ) |
| { |
| DBG_ERRORFILE( "CommandAbortedException" ); |
| nErr = ERRCODE_IO_GENERAL; |
| } |
| catch( uno::Exception& ) |
| { |
| DBG_ERRORFILE( "Any other exception" ); |
| nErr = ERRCODE_IO_GENERAL; |
| } |
| return nErr; |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| sal_uIntPtr SfxContentHelper::GetSize( const String& rContent ) |
| { |
| sal_uIntPtr nSize = 0; |
| sal_Int64 nTemp = 0; |
| INetURLObject aObj( rContent ); |
| DBG_ASSERT( aObj.GetProtocol() != INET_PROT_NOT_VALID, "Invalid URL!" ); |
| try |
| { |
| ::ucbhelper::Content aCnt( aObj.GetMainURL( INetURLObject::NO_DECODE ), uno::Reference< ucb::XCommandEnvironment > () ); |
| aCnt.getPropertyValue( OUString::createFromAscii( "Size" ) ) >>= nTemp; |
| } |
| catch( ucb::CommandAbortedException& ) |
| { |
| DBG_ERRORFILE( "CommandAbortedException" ); |
| } |
| catch( uno::Exception& ) |
| { |
| DBG_ERRORFILE( "Any other exception" ); |
| } |
| nSize = (sal_uInt32)nTemp; |
| return nSize; |
| } |
| |
| // ----------------------------------------------------------------------- |
| // please don't use it (only used in appbas.cxx and appcfg.cxx) |
| sal_Bool SfxContentHelper::Exists( const String& rContent ) |
| { |
| sal_Bool bRet = sal_False; |
| INetURLObject aObj( rContent ); |
| DBG_ASSERT( aObj.GetProtocol() != INET_PROT_NOT_VALID, "Invalid URL!" ); |
| |
| try |
| { |
| ::ucbhelper::Content aCnt( aObj.GetMainURL( INetURLObject::NO_DECODE ), uno::Reference< ucb::XCommandEnvironment > () ); |
| // just try to get the property; if no exception is thrown, the content exists! |
| aCnt.isDocument(); |
| bRet = sal_True; |
| } |
| catch( ucb::CommandAbortedException& ) |
| { |
| DBG_WARNING( "CommandAbortedException" ); |
| } |
| catch( ucb::IllegalIdentifierException& ) |
| { |
| DBG_WARNING( "IllegalIdentifierException" ); |
| } |
| catch( ucb::ContentCreationException& ) |
| { |
| DBG_WARNING( "IllegalIdentifierException" ); |
| } |
| catch( uno::Exception& ) |
| { |
| DBG_ERRORFILE( "Any other exception" ); |
| } |
| |
| return bRet; |
| |
| } |
| |
| // ----------------------------------------------------------------------- |
| |
| sal_Bool SfxContentHelper::Find( const String& rFolder, const String& rName, String& rFile ) |
| { |
| sal_Bool bRet = sal_False; |
| rtl::OUString aFile; |
| |
| if ( FileBase::searchFileURL( rName, rFolder, aFile ) == FileBase::E_None ) |
| { |
| rFile = aFile; |
| bRet = sal_True; |
| } |
| |
| return bRet; |
| } |
| |
| |