1*5900e8ecSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*5900e8ecSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*5900e8ecSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*5900e8ecSAndrew Rist * distributed with this work for additional information 6*5900e8ecSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*5900e8ecSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*5900e8ecSAndrew Rist * "License"); you may not use this file except in compliance 9*5900e8ecSAndrew Rist * with the License. You may obtain a copy of the License at 10*5900e8ecSAndrew Rist * 11*5900e8ecSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*5900e8ecSAndrew Rist * 13*5900e8ecSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*5900e8ecSAndrew Rist * software distributed under the License is distributed on an 15*5900e8ecSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*5900e8ecSAndrew Rist * KIND, either express or implied. See the License for the 17*5900e8ecSAndrew Rist * specific language governing permissions and limitations 18*5900e8ecSAndrew Rist * under the License. 19*5900e8ecSAndrew Rist * 20*5900e8ecSAndrew Rist *************************************************************/ 21*5900e8ecSAndrew Rist 22*5900e8ecSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_svtools.hxx" 26cdf0e10cSrcweir #include "contentenumeration.hxx" 27cdf0e10cSrcweir #include <svl/urlfilter.hxx> 28cdf0e10cSrcweir #include <svtools/inettbc.hxx> 29cdf0e10cSrcweir #include <svtools/imagemgr.hxx> 30cdf0e10cSrcweir 31cdf0e10cSrcweir /** === begin UNO includes === **/ 32cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp> 33cdf0e10cSrcweir #include <com/sun/star/sdbc/XResultSet.hpp> 34cdf0e10cSrcweir #include <com/sun/star/sdbc/XRow.hpp> 35cdf0e10cSrcweir #include <com/sun/star/ucb/XDynamicResultSet.hpp> 36cdf0e10cSrcweir #include <com/sun/star/ucb/XContentAccess.hpp> 37cdf0e10cSrcweir #include <com/sun/star/util/DateTime.hpp> 38cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp> 39cdf0e10cSrcweir /** === end UNO includes === **/ 40cdf0e10cSrcweir #include <comphelper/processfactory.hxx> 41cdf0e10cSrcweir #include <tools/debug.hxx> 42cdf0e10cSrcweir #include <vcl/svapp.hxx> 43cdf0e10cSrcweir #include <vos/mutex.hxx> 44cdf0e10cSrcweir 45cdf0e10cSrcweir #include <memory> 46cdf0e10cSrcweir 47cdf0e10cSrcweir //........................................................................ 48cdf0e10cSrcweir namespace svt 49cdf0e10cSrcweir { 50cdf0e10cSrcweir //........................................................................ 51cdf0e10cSrcweir 52cdf0e10cSrcweir #define ROW_TITLE 1 53cdf0e10cSrcweir #define ROW_SIZE 2 54cdf0e10cSrcweir #define ROW_DATE_MOD 3 55cdf0e10cSrcweir #define ROW_DATE_CREATE 4 56cdf0e10cSrcweir #define ROW_IS_FOLDER 5 57cdf0e10cSrcweir #define ROW_TARGET_URL 6 58cdf0e10cSrcweir #define ROW_IS_HIDDEN 7 59cdf0e10cSrcweir #define ROW_IS_VOLUME 8 60cdf0e10cSrcweir #define ROW_IS_REMOTE 9 61cdf0e10cSrcweir #define ROW_IS_REMOVEABLE 10 62cdf0e10cSrcweir #define ROW_IS_FLOPPY 11 63cdf0e10cSrcweir #define ROW_IS_COMPACTDISC 12 64cdf0e10cSrcweir 65cdf0e10cSrcweir #define CONVERT_DATETIME( aUnoDT, aToolsDT ) \ 66cdf0e10cSrcweir aToolsDT = ::DateTime( Date( aUnoDT.Day, aUnoDT.Month, aUnoDT.Year ), \ 67cdf0e10cSrcweir Time( aUnoDT.Hours, aUnoDT.Minutes, aUnoDT.Seconds, aUnoDT.HundredthSeconds ) ); 68cdf0e10cSrcweir 69cdf0e10cSrcweir using ::com::sun::star::uno::Reference; 70cdf0e10cSrcweir using ::com::sun::star::uno::Sequence; 71cdf0e10cSrcweir using ::com::sun::star::uno::Exception; 72cdf0e10cSrcweir using ::com::sun::star::uno::UNO_QUERY; 73cdf0e10cSrcweir using ::com::sun::star::uno::Any; 74cdf0e10cSrcweir using ::com::sun::star::util::DateTime; 75cdf0e10cSrcweir using ::com::sun::star::sdbc::XResultSet; 76cdf0e10cSrcweir using ::com::sun::star::sdbc::XRow; 77cdf0e10cSrcweir using ::com::sun::star::ucb::XDynamicResultSet; 78cdf0e10cSrcweir using ::com::sun::star::ucb::CommandAbortedException; 79cdf0e10cSrcweir using ::com::sun::star::ucb::XContentAccess; 80cdf0e10cSrcweir using ::com::sun::star::ucb::XCommandEnvironment; 81cdf0e10cSrcweir using ::com::sun::star::beans::XPropertySet; 82cdf0e10cSrcweir using ::rtl::OUString; 83cdf0e10cSrcweir using ::ucbhelper::ResultSetInclude; 84cdf0e10cSrcweir using ::ucbhelper::INCLUDE_FOLDERS_AND_DOCUMENTS; 85cdf0e10cSrcweir 86cdf0e10cSrcweir //==================================================================== 87cdf0e10cSrcweir //= FileViewContentEnumerator 88cdf0e10cSrcweir //==================================================================== 89cdf0e10cSrcweir //-------------------------------------------------------------------- FileViewContentEnumerator(const Reference<XCommandEnvironment> & _rxCommandEnv,ContentData & _rContentToFill,::osl::Mutex & _rContentMutex,const IContentTitleTranslation * _pTranslator)90cdf0e10cSrcweir FileViewContentEnumerator::FileViewContentEnumerator( 91cdf0e10cSrcweir const Reference< XCommandEnvironment >& _rxCommandEnv, 92cdf0e10cSrcweir ContentData& _rContentToFill, ::osl::Mutex& _rContentMutex, 93cdf0e10cSrcweir const IContentTitleTranslation* _pTranslator ) 94cdf0e10cSrcweir :m_rContent ( _rContentToFill ) 95cdf0e10cSrcweir ,m_rContentMutex ( _rContentMutex ) 96cdf0e10cSrcweir ,m_refCount ( 0 ) 97cdf0e10cSrcweir ,m_xCommandEnv ( _rxCommandEnv ) 98cdf0e10cSrcweir ,m_pFilter ( NULL ) 99cdf0e10cSrcweir ,m_pTranslator ( _pTranslator ) 100cdf0e10cSrcweir ,m_bCancelled ( false ) 101cdf0e10cSrcweir ,m_rBlackList ( ::com::sun::star::uno::Sequence< ::rtl::OUString >() ) 102cdf0e10cSrcweir { 103cdf0e10cSrcweir } 104cdf0e10cSrcweir 105cdf0e10cSrcweir //-------------------------------------------------------------------- ~FileViewContentEnumerator()106cdf0e10cSrcweir FileViewContentEnumerator::~FileViewContentEnumerator() 107cdf0e10cSrcweir { 108cdf0e10cSrcweir } 109cdf0e10cSrcweir 110cdf0e10cSrcweir //-------------------------------------------------------------------- cancel()111cdf0e10cSrcweir void FileViewContentEnumerator::cancel() 112cdf0e10cSrcweir { 113cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 114cdf0e10cSrcweir m_bCancelled = true; 115cdf0e10cSrcweir m_pResultHandler = NULL; 116cdf0e10cSrcweir m_pTranslator = NULL; 117cdf0e10cSrcweir m_pFilter = NULL; 118cdf0e10cSrcweir m_aFolder.aContent = ::ucbhelper::Content(); 119cdf0e10cSrcweir m_aFolder.sURL = String(); 120cdf0e10cSrcweir } 121cdf0e10cSrcweir 122cdf0e10cSrcweir //-------------------------------------------------------------------- enumerateFolderContentSync(const FolderDescriptor & _rFolder,const IUrlFilter * _pFilter,const::com::sun::star::uno::Sequence<::rtl::OUString> & rBlackList)123cdf0e10cSrcweir EnumerationResult FileViewContentEnumerator::enumerateFolderContentSync( 124cdf0e10cSrcweir const FolderDescriptor& _rFolder, 125cdf0e10cSrcweir const IUrlFilter* _pFilter, 126cdf0e10cSrcweir const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rBlackList ) 127cdf0e10cSrcweir { 128cdf0e10cSrcweir { 129cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 130cdf0e10cSrcweir m_aFolder = _rFolder; 131cdf0e10cSrcweir m_pFilter = _pFilter; 132cdf0e10cSrcweir m_pResultHandler = NULL; 133cdf0e10cSrcweir m_rBlackList = rBlackList; 134cdf0e10cSrcweir } 135cdf0e10cSrcweir return enumerateFolderContent(); 136cdf0e10cSrcweir } 137cdf0e10cSrcweir 138cdf0e10cSrcweir //-------------------------------------------------------------------- enumerateFolderContent(const FolderDescriptor & _rFolder,const IUrlFilter * _pFilter,IEnumerationResultHandler * _pResultHandler)139cdf0e10cSrcweir void FileViewContentEnumerator::enumerateFolderContent( 140cdf0e10cSrcweir const FolderDescriptor& _rFolder, const IUrlFilter* _pFilter, IEnumerationResultHandler* _pResultHandler ) 141cdf0e10cSrcweir { 142cdf0e10cSrcweir // ensure that we don't get deleted while herein 143cdf0e10cSrcweir acquire(); 144cdf0e10cSrcweir // the matching "release" will be called in onTerminated 145cdf0e10cSrcweir // Note that onTerminated is only called if run was left normally. 146cdf0e10cSrcweir // If somebody terminates the thread from the outside, then onTerminated 147cdf0e10cSrcweir // will never be called. However, our terminate method is not accessible 148cdf0e10cSrcweir // to our clients, so the only class which could misbehave is this class 149cdf0e10cSrcweir // here itself ... 150cdf0e10cSrcweir 151cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 152cdf0e10cSrcweir m_aFolder = _rFolder; 153cdf0e10cSrcweir m_pFilter = _pFilter; 154cdf0e10cSrcweir m_pResultHandler = _pResultHandler; 155cdf0e10cSrcweir 156cdf0e10cSrcweir OSL_ENSURE( m_aFolder.aContent.get().is() || m_aFolder.sURL.Len(), 157cdf0e10cSrcweir "FileViewContentEnumerator::enumerateFolderContent: invalid folder descriptor!" ); 158cdf0e10cSrcweir 159cdf0e10cSrcweir // start the thread 160cdf0e10cSrcweir create(); 161cdf0e10cSrcweir } 162cdf0e10cSrcweir 163cdf0e10cSrcweir //-------------------------------------------------------------------- acquire()164cdf0e10cSrcweir oslInterlockedCount SAL_CALL FileViewContentEnumerator::acquire() 165cdf0e10cSrcweir { 166cdf0e10cSrcweir return osl_incrementInterlockedCount( &m_refCount ); 167cdf0e10cSrcweir } 168cdf0e10cSrcweir 169cdf0e10cSrcweir //-------------------------------------------------------------------- release()170cdf0e10cSrcweir oslInterlockedCount SAL_CALL FileViewContentEnumerator::release() 171cdf0e10cSrcweir { 172cdf0e10cSrcweir if ( 0 == osl_decrementInterlockedCount( &m_refCount ) ) 173cdf0e10cSrcweir { 174cdf0e10cSrcweir delete this; 175cdf0e10cSrcweir return 0; 176cdf0e10cSrcweir } 177cdf0e10cSrcweir return m_refCount; 178cdf0e10cSrcweir } 179cdf0e10cSrcweir 180cdf0e10cSrcweir //-------------------------------------------------------------------- enumerateFolderContent()181cdf0e10cSrcweir EnumerationResult FileViewContentEnumerator::enumerateFolderContent() 182cdf0e10cSrcweir { 183cdf0e10cSrcweir EnumerationResult eResult = ERROR; 184cdf0e10cSrcweir try 185cdf0e10cSrcweir { 186cdf0e10cSrcweir 187cdf0e10cSrcweir Reference< XResultSet > xResultSet; 188cdf0e10cSrcweir Sequence< OUString > aProps(12); 189cdf0e10cSrcweir 190cdf0e10cSrcweir aProps[0] = OUString::createFromAscii( "Title" ); 191cdf0e10cSrcweir aProps[1] = OUString::createFromAscii( "Size" ); 192cdf0e10cSrcweir aProps[2] = OUString::createFromAscii( "DateModified" ); 193cdf0e10cSrcweir aProps[3] = OUString::createFromAscii( "DateCreated" ); 194cdf0e10cSrcweir aProps[4] = OUString::createFromAscii( "IsFolder" ); 195cdf0e10cSrcweir aProps[5] = OUString::createFromAscii( "TargetURL" ); 196cdf0e10cSrcweir aProps[6] = OUString::createFromAscii( "IsHidden" ); 197cdf0e10cSrcweir aProps[7] = OUString::createFromAscii( "IsVolume" ); 198cdf0e10cSrcweir aProps[8] = OUString::createFromAscii( "IsRemote" ); 199cdf0e10cSrcweir aProps[9] = OUString::createFromAscii( "IsRemoveable" ); 200cdf0e10cSrcweir aProps[10] = OUString::createFromAscii( "IsFloppy" ); 201cdf0e10cSrcweir aProps[11] = OUString::createFromAscii( "IsCompactDisc" ); 202cdf0e10cSrcweir 203cdf0e10cSrcweir Reference< XCommandEnvironment > xEnvironment; 204cdf0e10cSrcweir try 205cdf0e10cSrcweir { 206cdf0e10cSrcweir FolderDescriptor aFolder; 207cdf0e10cSrcweir { 208cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 209cdf0e10cSrcweir aFolder = m_aFolder; 210cdf0e10cSrcweir xEnvironment = m_xCommandEnv; 211cdf0e10cSrcweir } 212cdf0e10cSrcweir if ( !aFolder.aContent.get().is() ) 213cdf0e10cSrcweir { 214cdf0e10cSrcweir aFolder.aContent = ::ucbhelper::Content( aFolder.sURL, xEnvironment ); 215cdf0e10cSrcweir { 216cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 217cdf0e10cSrcweir m_aFolder.aContent = aFolder.aContent; 218cdf0e10cSrcweir } 219cdf0e10cSrcweir } 220cdf0e10cSrcweir 221cdf0e10cSrcweir Reference< XDynamicResultSet > xDynResultSet; 222cdf0e10cSrcweir ResultSetInclude eInclude = INCLUDE_FOLDERS_AND_DOCUMENTS; 223cdf0e10cSrcweir xDynResultSet = aFolder.aContent.createDynamicCursor( aProps, eInclude ); 224cdf0e10cSrcweir 225cdf0e10cSrcweir if ( xDynResultSet.is() ) 226cdf0e10cSrcweir xResultSet = xDynResultSet->getStaticResultSet(); 227cdf0e10cSrcweir } 228cdf0e10cSrcweir catch( CommandAbortedException& ) 229cdf0e10cSrcweir { 230cdf0e10cSrcweir DBG_ERRORFILE( "createCursor: CommandAbortedException" ); 231cdf0e10cSrcweir } 232cdf0e10cSrcweir catch( Exception& ) 233cdf0e10cSrcweir { 234cdf0e10cSrcweir } 235cdf0e10cSrcweir 236cdf0e10cSrcweir bool bCancelled = false; 237cdf0e10cSrcweir if ( xResultSet.is() ) 238cdf0e10cSrcweir { 239cdf0e10cSrcweir Reference< XRow > xRow( xResultSet, UNO_QUERY ); 240cdf0e10cSrcweir Reference< XContentAccess > xContentAccess( xResultSet, UNO_QUERY ); 241cdf0e10cSrcweir 242cdf0e10cSrcweir try 243cdf0e10cSrcweir { 244cdf0e10cSrcweir SortingData_Impl* pData; 245cdf0e10cSrcweir DateTime aDT; 246cdf0e10cSrcweir 247cdf0e10cSrcweir while ( !bCancelled && xResultSet->next() ) 248cdf0e10cSrcweir { 249cdf0e10cSrcweir sal_Bool bIsHidden = xRow->getBoolean( ROW_IS_HIDDEN ); 250cdf0e10cSrcweir // don't show hidden files 251cdf0e10cSrcweir if ( !bIsHidden || xRow->wasNull() ) 252cdf0e10cSrcweir { 253cdf0e10cSrcweir pData = NULL; 254cdf0e10cSrcweir 255cdf0e10cSrcweir aDT = xRow->getTimestamp( ROW_DATE_MOD ); 256cdf0e10cSrcweir sal_Bool bContainsDate = !xRow->wasNull(); 257cdf0e10cSrcweir if ( !bContainsDate ) 258cdf0e10cSrcweir { 259cdf0e10cSrcweir aDT = xRow->getTimestamp( ROW_DATE_CREATE ); 260cdf0e10cSrcweir bContainsDate = !xRow->wasNull(); 261cdf0e10cSrcweir } 262cdf0e10cSrcweir 263cdf0e10cSrcweir OUString aContentURL = xContentAccess->queryContentIdentifierString(); 264cdf0e10cSrcweir OUString aTargetURL = xRow->getString( ROW_TARGET_URL ); 265cdf0e10cSrcweir sal_Bool bHasTargetURL = !xRow->wasNull() && aTargetURL.getLength() > 0; 266cdf0e10cSrcweir 267cdf0e10cSrcweir OUString sRealURL = bHasTargetURL ? aTargetURL : aContentURL; 268cdf0e10cSrcweir 269cdf0e10cSrcweir // check for restrictions 270cdf0e10cSrcweir { 271cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 272cdf0e10cSrcweir if ( m_pFilter && !m_pFilter->isUrlAllowed( sRealURL ) ) 273cdf0e10cSrcweir continue; 274cdf0e10cSrcweir 275cdf0e10cSrcweir if ( /* m_rBlackList.hasElements() && */ URLOnBlackList ( sRealURL ) ) 276cdf0e10cSrcweir continue; 277cdf0e10cSrcweir } 278cdf0e10cSrcweir 279cdf0e10cSrcweir pData = new SortingData_Impl; 280cdf0e10cSrcweir pData->maTargetURL = sRealURL; 281cdf0e10cSrcweir 282cdf0e10cSrcweir pData->mbIsFolder = xRow->getBoolean( ROW_IS_FOLDER ) && !xRow->wasNull(); 283cdf0e10cSrcweir pData->mbIsVolume = xRow->getBoolean( ROW_IS_VOLUME ) && !xRow->wasNull(); 284cdf0e10cSrcweir pData->mbIsRemote = xRow->getBoolean( ROW_IS_REMOTE ) && !xRow->wasNull(); 285cdf0e10cSrcweir pData->mbIsRemoveable = xRow->getBoolean( ROW_IS_REMOVEABLE ) && !xRow->wasNull(); 286cdf0e10cSrcweir pData->mbIsFloppy = xRow->getBoolean( ROW_IS_FLOPPY ) && !xRow->wasNull(); 287cdf0e10cSrcweir pData->mbIsCompactDisc = xRow->getBoolean( ROW_IS_COMPACTDISC ) && !xRow->wasNull(); 288cdf0e10cSrcweir pData->SetNewTitle( xRow->getString( ROW_TITLE ) ); 289cdf0e10cSrcweir pData->maSize = xRow->getLong( ROW_SIZE ); 290cdf0e10cSrcweir 291cdf0e10cSrcweir if ( bHasTargetURL && 292cdf0e10cSrcweir INetURLObject( aContentURL ).GetProtocol() == INET_PROT_VND_SUN_STAR_HIER ) 293cdf0e10cSrcweir { 294cdf0e10cSrcweir ::ucbhelper::Content aCnt( aTargetURL, xEnvironment ); 295cdf0e10cSrcweir try 296cdf0e10cSrcweir { 297cdf0e10cSrcweir aCnt.getPropertyValue( OUString::createFromAscii( "Size" ) ) >>= pData->maSize; 298cdf0e10cSrcweir aCnt.getPropertyValue( OUString::createFromAscii( "DateModified" ) ) >>= aDT; 299cdf0e10cSrcweir } 300cdf0e10cSrcweir catch (...) {} 301cdf0e10cSrcweir } 302cdf0e10cSrcweir 303cdf0e10cSrcweir if ( bContainsDate ) 304cdf0e10cSrcweir { 305cdf0e10cSrcweir CONVERT_DATETIME( aDT, pData->maModDate ); 306cdf0e10cSrcweir } 307cdf0e10cSrcweir 308cdf0e10cSrcweir if ( pData->mbIsFolder ) 309cdf0e10cSrcweir { 310cdf0e10cSrcweir ::vos::OGuard aGuard( Application::GetSolarMutex() ); 311cdf0e10cSrcweir ::svtools::VolumeInfo aVolInfo( pData->mbIsVolume, pData->mbIsRemote, 312cdf0e10cSrcweir pData->mbIsRemoveable, pData->mbIsFloppy, 313cdf0e10cSrcweir pData->mbIsCompactDisc ); 314cdf0e10cSrcweir pData->maType = SvFileInformationManager::GetFolderDescription( aVolInfo ); 315cdf0e10cSrcweir } 316cdf0e10cSrcweir else 317cdf0e10cSrcweir pData->maType = SvFileInformationManager::GetFileDescription( 318cdf0e10cSrcweir INetURLObject( pData->maTargetURL ) ); 319cdf0e10cSrcweir 320cdf0e10cSrcweir // replace names on demand 321cdf0e10cSrcweir { 322cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 323cdf0e10cSrcweir if( m_pTranslator ) 324cdf0e10cSrcweir { 325cdf0e10cSrcweir OUString sNewTitle; 326cdf0e10cSrcweir sal_Bool bTranslated = sal_False; 327cdf0e10cSrcweir 328cdf0e10cSrcweir if ( pData->mbIsFolder ) 329cdf0e10cSrcweir bTranslated = m_pTranslator->GetTranslation( pData->GetTitle(), sNewTitle ); 330cdf0e10cSrcweir else 331cdf0e10cSrcweir bTranslated = implGetDocTitle( pData->maTargetURL, sNewTitle ); 332cdf0e10cSrcweir 333cdf0e10cSrcweir if ( bTranslated ) 334cdf0e10cSrcweir pData->ChangeTitle( sNewTitle ); 335cdf0e10cSrcweir } 336cdf0e10cSrcweir } 337cdf0e10cSrcweir 338cdf0e10cSrcweir { 339cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_rContentMutex ); 340cdf0e10cSrcweir m_rContent.push_back( pData ); 341cdf0e10cSrcweir } 342cdf0e10cSrcweir } 343cdf0e10cSrcweir 344cdf0e10cSrcweir { 345cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 346cdf0e10cSrcweir bCancelled = m_bCancelled; 347cdf0e10cSrcweir } 348cdf0e10cSrcweir } 349cdf0e10cSrcweir eResult = SUCCESS; 350cdf0e10cSrcweir } 351cdf0e10cSrcweir catch( CommandAbortedException& ) 352cdf0e10cSrcweir { 353cdf0e10cSrcweir DBG_ERRORFILE( "FileViewContentEnumerator::enumerateFolderContent: caught an CommandAbortedException while enumerating!" ); 354cdf0e10cSrcweir } 355cdf0e10cSrcweir catch( Exception& ) 356cdf0e10cSrcweir { 357cdf0e10cSrcweir DBG_ERRORFILE( "FileViewContentEnumerator::enumerateFolderContent: caught an exception other than CommandAbortedException while enumerating!" ); 358cdf0e10cSrcweir } 359cdf0e10cSrcweir } 360cdf0e10cSrcweir } 361cdf0e10cSrcweir catch( CommandAbortedException& ) 362cdf0e10cSrcweir { 363cdf0e10cSrcweir DBG_ERRORFILE( "FileViewContentEnumerator::enumerateFolderContent: caught an CommandAbortedException!" ); 364cdf0e10cSrcweir } 365cdf0e10cSrcweir catch( Exception& ) 366cdf0e10cSrcweir { 367cdf0e10cSrcweir DBG_ERRORFILE( "FileViewContentEnumerator::enumerateFolderContent: caught an exception other than CommandAbortedException!" ); 368cdf0e10cSrcweir } 369cdf0e10cSrcweir 370cdf0e10cSrcweir IEnumerationResultHandler* pHandler = NULL; 371cdf0e10cSrcweir { 372cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 373cdf0e10cSrcweir pHandler = m_pResultHandler; 374cdf0e10cSrcweir if ( m_bCancelled ) 375cdf0e10cSrcweir return ERROR; 376cdf0e10cSrcweir } 377cdf0e10cSrcweir 378cdf0e10cSrcweir { 379cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_rContentMutex ); 380cdf0e10cSrcweir if ( eResult != SUCCESS ) 381cdf0e10cSrcweir // clear any "intermediate" and unfinished result 382cdf0e10cSrcweir m_rContent.clear(); 383cdf0e10cSrcweir } 384cdf0e10cSrcweir 385cdf0e10cSrcweir if ( pHandler ) 386cdf0e10cSrcweir pHandler->enumerationDone( eResult ); 387cdf0e10cSrcweir return eResult; 388cdf0e10cSrcweir } 389cdf0e10cSrcweir 390cdf0e10cSrcweir //-------------------------------------------------------------------- 391cdf0e10cSrcweir URLOnBlackList(const::rtl::OUString & sRealURL)392cdf0e10cSrcweir sal_Bool FileViewContentEnumerator::URLOnBlackList ( const ::rtl::OUString& sRealURL ) 393cdf0e10cSrcweir { 394cdf0e10cSrcweir ::rtl::OUString entryName = sRealURL.copy( sRealURL.lastIndexOf( rtl::OUString::createFromAscii("/")) +1 ); 395cdf0e10cSrcweir 396cdf0e10cSrcweir for (int i = 0; i < m_rBlackList.getLength() ; i++) 397cdf0e10cSrcweir { 398cdf0e10cSrcweir if ( entryName.equals( m_rBlackList[i] ) ) 399cdf0e10cSrcweir return true; 400cdf0e10cSrcweir } 401cdf0e10cSrcweir 402cdf0e10cSrcweir return false; 403cdf0e10cSrcweir } 404cdf0e10cSrcweir 405cdf0e10cSrcweir //-------------------------------------------------------------------- implGetDocTitle(const OUString & _rTargetURL,OUString & _rRet) const406cdf0e10cSrcweir sal_Bool FileViewContentEnumerator::implGetDocTitle( const OUString& _rTargetURL, OUString& _rRet ) const 407cdf0e10cSrcweir { 408cdf0e10cSrcweir sal_Bool bRet = sal_False; 409cdf0e10cSrcweir 410cdf0e10cSrcweir try 411cdf0e10cSrcweir { 412cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 413cdf0e10cSrcweir if( !m_xDocInfo.is() ) 414cdf0e10cSrcweir { 415cdf0e10cSrcweir m_xDocInfo = m_xDocInfo.query( 416cdf0e10cSrcweir ::comphelper::getProcessServiceFactory()->createInstance( 417cdf0e10cSrcweir String( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.StandaloneDocumentInfo") ) 418cdf0e10cSrcweir ) 419cdf0e10cSrcweir ); 420cdf0e10cSrcweir } 421cdf0e10cSrcweir 422cdf0e10cSrcweir DBG_ASSERT( m_xDocInfo.is(), "FileViewContentEnumerator::implGetDocTitle: no DocumentProperties service!" ); 423cdf0e10cSrcweir if ( !m_xDocInfo.is() ) 424cdf0e10cSrcweir return sal_False; 425cdf0e10cSrcweir 426cdf0e10cSrcweir m_xDocInfo->loadFromURL( _rTargetURL ); 427cdf0e10cSrcweir Reference< XPropertySet > xPropSet( m_xDocInfo, UNO_QUERY ); 428cdf0e10cSrcweir 429cdf0e10cSrcweir Any aAny = xPropSet->getPropertyValue( OUString::createFromAscii( "Title" ) ); 430cdf0e10cSrcweir 431cdf0e10cSrcweir OUString sTitle; 432cdf0e10cSrcweir if ( ( aAny >>= sTitle ) && sTitle.getLength() > 0 ) 433cdf0e10cSrcweir { 434cdf0e10cSrcweir _rRet = sTitle; 435cdf0e10cSrcweir bRet = sal_True; 436cdf0e10cSrcweir } 437cdf0e10cSrcweir } 438cdf0e10cSrcweir catch ( const Exception& ) 439cdf0e10cSrcweir { 440cdf0e10cSrcweir } 441cdf0e10cSrcweir 442cdf0e10cSrcweir return bRet; 443cdf0e10cSrcweir } 444cdf0e10cSrcweir 445cdf0e10cSrcweir //-------------------------------------------------------------------- run()446cdf0e10cSrcweir void SAL_CALL FileViewContentEnumerator::run() 447cdf0e10cSrcweir { 448cdf0e10cSrcweir enumerateFolderContent(); 449cdf0e10cSrcweir } 450cdf0e10cSrcweir 451cdf0e10cSrcweir //-------------------------------------------------------------------- onTerminated()452cdf0e10cSrcweir void SAL_CALL FileViewContentEnumerator::onTerminated() 453cdf0e10cSrcweir { 454cdf0e10cSrcweir release(); 455cdf0e10cSrcweir } 456cdf0e10cSrcweir 457cdf0e10cSrcweir //........................................................................ 458cdf0e10cSrcweir } // namespace svt 459cdf0e10cSrcweir //........................................................................ 460cdf0e10cSrcweir 461