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