23#include <com/sun/star/sdbc/XResultSet.hpp>
24#include <com/sun/star/sdbc/XRow.hpp>
25#include <com/sun/star/ucb/CommandAbortedException.hpp>
26#include <com/sun/star/ucb/XDynamicResultSet.hpp>
27#include <com/sun/star/ucb/XContentAccess.hpp>
28#include <com/sun/star/util/DateTime.hpp>
29#include <com/sun/star/document/DocumentProperties.hpp>
33#include <osl/mutex.hxx>
34#include <osl/diagnose.h>
45#define ROW_DATE_CREATE 4
46#define ROW_IS_FOLDER 5
47#define ROW_TARGET_URL 6
48#define ROW_IS_HIDDEN 7
49#define ROW_IS_VOLUME 8
50#define ROW_IS_REMOTE 9
51#define ROW_IS_REMOVABLE 10
52#define ROW_IS_FLOPPY 11
53#define ROW_IS_COMPACTDISC 12
55 using ::com::sun::star::uno::Reference;
56 using ::com::sun::star::uno::Sequence;
57 using ::com::sun::star::uno::Exception;
58 using ::com::sun::star::uno::UNO_QUERY;
59 using ::com::sun::star::util::DateTime;
60 using ::com::sun::star::sdbc::XResultSet;
61 using ::com::sun::star::sdbc::XRow;
62 using ::com::sun::star::ucb::XDynamicResultSet;
63 using ::com::sun::star::ucb::CommandAbortedException;
64 using ::com::sun::star::ucb::XContentAccess;
65 using ::com::sun::star::ucb::XCommandEnvironment;
66 using ::ucbhelper::INCLUDE_FOLDERS_AND_DOCUMENTS;
73 const Reference< XCommandEnvironment >& _rxCommandEnv,
74 ContentData& _rContentToFill, ::osl::Mutex& _rContentMutex )
75 :Thread (
"FileViewContentEnumerator" )
77 ,m_rContentMutex ( _rContentMutex )
78 ,m_xCommandEnv ( _rxCommandEnv )
79 ,m_pResultHandler ( nullptr )
80 ,m_bCancelled ( false )
102 const css::uno::Sequence< OUString >& rDenyList )
105 std::unique_lock aGuard(
m_aMutex );
117 std::unique_lock aGuard(
m_aMutex );
122 "FileViewContentEnumerator::enumerateFolderContent: invalid folder descriptor!" );
138 Reference< XResultSet > xResultSet;
139 Sequence< OUString > aProps{
"Title",
152 Reference< XCommandEnvironment > xEnvironment;
157 std::unique_lock aGuard(
m_aMutex );
165 std::unique_lock aGuard(
m_aMutex );
172 if ( xDynResultSet.is() )
173 xResultSet = xDynResultSet->getStaticResultSet();
175 catch( CommandAbortedException& )
183 if ( xResultSet.is() )
185 Reference< XRow > xRow( xResultSet, UNO_QUERY );
186 Reference< XContentAccess > xContentAccess( xResultSet, UNO_QUERY );
192 bool bCancelled =
false;
193 while ( !bCancelled && xResultSet->next() )
197 if ( !bIsHidden || xRow->wasNull() )
200 bool bContainsDate = !xRow->wasNull();
201 if ( !bContainsDate )
204 bContainsDate = !xRow->wasNull();
207 OUString aContentURL = xContentAccess->queryContentIdentifierString();
209 bool bHasTargetURL = !xRow->wasNull() && !
aTargetURL.isEmpty();
211 OUString sRealURL = bHasTargetURL ?
aTargetURL : aContentURL;
215 std::unique_lock aGuard(
m_aMutex );
221 pData->maTargetURL = sRealURL;
232 if ( bHasTargetURL &&
233 INetURLObject( aContentURL ).GetProtocol() == INetProtocol::VndSunStarHier )
249 if (
pData->mbIsFolder )
253 pData->mbIsCompactDisc );
267 std::unique_lock aGuard(
m_aMutex );
275 TOOLS_WARN_EXCEPTION(
"svtools.contnr",
"FileViewContentEnumerator::enumerateFolderContent: caught an exception while enumerating");
286 std::unique_lock aGuard(
m_aMutex );
307 std::u16string_view entryName = sRealURL.substr( sRealURL.rfind(
'/' ) + 1 );
virtual ~FileViewContentEnumerator() override
css::uno::Reference< css::ucb::XCommandEnvironment > m_xCommandEnv
::osl::Mutex & m_rContentMutex
css::uno::Sequence< OUString > m_rDenyList
EnumerationResult enumerateFolderContentSync(const FolderDescriptor &_rFolder, const css::uno::Sequence< OUString > &rDenyList)
enumerates the content of a given folder synchronously
FolderDescriptor m_aFolder
virtual void execute() override
EnumerationResult enumerateFolderContent()
::std::vector< std::unique_ptr< SortingData_Impl > > ContentData
bool URLOnDenyList(std::u16string_view sRealURL)
void cancel()
cancels the running operation.
FileViewContentEnumerator(const css::uno::Reference< css::ucb::XCommandEnvironment > &_rxCommandEnv, ContentData &_rContentToFill, ::osl::Mutex &_rContentMutex)
constructs an enumerator instance
IEnumerationResultHandler * m_pResultHandler
virtual void enumerationDone(EnumerationResult _eResult)=0
css::uno::Any getPropertyValue(const OUString &rPropertyName)
css::uno::Reference< css::ucb::XContent > get() const
css::uno::Reference< css::ucb::XDynamicResultSet > createDynamicCursor(const css::uno::Sequence< OUString > &rPropertyNames, ResultSetInclude eMode=INCLUDE_FOLDERS_AND_DOCUMENTS)
Content_Impl & m_rContent
#define ROW_IS_COMPACTDISC
#define TOOLS_WARN_EXCEPTION(area, stream)
std::unique_ptr< sal_Int32[]> pData
sal_Int32 findValue(const css::uno::Sequence< T1 > &_rList, const T2 &_rValue)
Reference< XComponentContext > getProcessComponentContext()
@ ERROR
the enumeration was successful
INCLUDE_FOLDERS_AND_DOCUMENTS
::ucbhelper::Content aContent
a content object describing the folder.
OUString sURL
the URL of a folder.