Modify class KFileItem to use a TDEHiddenFileMatcher class

instance to determine whether or not a file is hidden.

KFileItem is initialized to use the single default instance
TDEGlobal::hiddenFileMatcher but a method is provided for
installing an application-specific instance.

Provide a caching mechanism to minimize calls to the match()
method of the TDEHiddenFileMatcher instance after an initial
determination of "hidden" for a filesystem object has been made.

Change names of variables and functions to use *HiddenFiles
instead of *DotFiles terminology.

Signed-off-by: Vincent Reher <tde@4reher.org>
pull/178/head
Vincent Reher 3 years ago
parent a084db1966
commit e9c4a2c039

@ -301,7 +301,7 @@ void KDirOperator::slotSimpleView()
void KDirOperator::slotToggleHidden( bool show ) void KDirOperator::slotToggleHidden( bool show )
{ {
dir->setShowingDotFiles( show ); dir->setShowingHiddenFiles( show );
updateDir(); updateDir();
if ( m_fileView ) if ( m_fileView )
m_fileView->listingCompleted(); m_fileView->listingCompleted();
@ -1486,7 +1486,7 @@ void KDirOperator::readConfig( TDEConfig *kc, const TQString& group )
if ( kc->readBoolEntry( TQString::fromLatin1("Show hidden files"), if ( kc->readBoolEntry( TQString::fromLatin1("Show hidden files"),
DefaultShowHidden ) ) { DefaultShowHidden ) ) {
showHiddenAction->setChecked( true ); showHiddenAction->setChecked( true );
dir->setShowingDotFiles( true ); dir->setShowingHiddenFiles( true );
} }
if ( kc->readBoolEntry( TQString::fromLatin1("Sort reversed"), if ( kc->readBoolEntry( TQString::fromLatin1("Sort reversed"),
DefaultSortReversed ) ) DefaultSortReversed ) )

@ -62,7 +62,7 @@ KFileTreeBranch::KFileTreeBranch( KFileTreeView *parent, const KURL& url,
m_root->setPixmap( 0, pix ); m_root->setPixmap( 0, pix );
m_root->setText( 0, name ); m_root->setText( 0, name );
setShowingDotFiles( showHidden ); setShowingHiddenFiles( showHidden );
connect( this, TQT_SIGNAL( refreshItems(const KFileItemList&)), connect( this, TQT_SIGNAL( refreshItems(const KFileItemList&)),
this, TQT_SLOT ( slotRefreshItems( const KFileItemList& ))); this, TQT_SLOT ( slotRefreshItems( const KFileItemList& )));

@ -44,7 +44,7 @@ public:
complete = false; complete = false;
autoUpdate = false; autoUpdate = false;
isShowingDotFiles = false; isShowingHiddenFiles = false;
dirOnlyMode = false; dirOnlyMode = false;
autoErrorHandling = false; autoErrorHandling = false;
@ -79,7 +79,7 @@ public:
bool complete; bool complete;
bool autoUpdate; bool autoUpdate;
bool isShowingDotFiles; bool isShowingHiddenFiles;
bool dirOnlyMode; bool dirOnlyMode;
bool autoErrorHandling; bool autoErrorHandling;

@ -26,7 +26,7 @@
#include "tdefilefilter.h" #include "tdefilefilter.h"
KSimpleFileFilter::KSimpleFileFilter() KSimpleFileFilter::KSimpleFileFilter()
: m_filterDotFiles( true ), : m_filterHiddenFiles( true ),
m_filterSpecials( true ), m_filterSpecials( true ),
m_modeFilter( 0 ) m_modeFilter( 0 )
{ {
@ -37,9 +37,9 @@ KSimpleFileFilter::~KSimpleFileFilter()
{ {
} }
void KSimpleFileFilter::setFilterDotFiles( bool filter ) void KSimpleFileFilter::setFilterHiddenFiles( bool filter )
{ {
m_filterDotFiles = filter; m_filterHiddenFiles = filter;
} }
void KSimpleFileFilter::setFilterSpecials( bool filter ) void KSimpleFileFilter::setFilterSpecials( bool filter )
@ -84,7 +84,7 @@ bool KSimpleFileFilter::passesFilter( const KFileItem *item ) const
const TQString& name = item->name(); const TQString& name = item->name();
if ( m_filterDotFiles && item->isHidden() ) if ( m_filterHiddenFiles && item->isHidden() )
return false; return false;
if ( m_filterSpecials && (name == dot || name == dotdot) ) if ( m_filterSpecials && (name == dot || name == dotdot) )

@ -60,27 +60,27 @@ class TDEIO_EXPORT KSimpleFileFilter : public KFileFilter
{ {
public: public:
/** /**
* Creates a new filter. By default, it filters only hidden dot files * Creates a new filter. By default, it filters only hidden files
* and "." and "..". * and "." and "..".
*/ */
KSimpleFileFilter(); KSimpleFileFilter();
virtual ~KSimpleFileFilter(); virtual ~KSimpleFileFilter();
/** /**
* Enable or disable filtering hidden dot files. * Enable or disable filtering hidden files.
* This option is enabled by default. * This option is enabled by default.
* @param filter true to enable filtering dot files, false to * @param filter true to enable filtering hidden files, false to
* disable * disable
* @see filterDotFiles * @see filterHiddenFiles
*/ */
virtual void setFilterDotFiles( bool filter ); virtual void setFilterHiddenFiles( bool filter );
/** /**
* Checks whether filtering dot files is enabled. * Checks whether filtering hidden files is enabled.
* This option is enabled by default. * This option is enabled by default.
* @return true if filtering is enabled, false otherwise * @return true if filtering is enabled, false otherwise
* @see setFilterDotFiles * @see setFilterHiddenFiles
*/ */
bool filterDotFiles() const { return m_filterDotFiles; } bool filterHiddenFiles() const { return m_filterHiddenFiles; }
/** /**
* Filters "." and "..", default is true. * Filters "." and "..", default is true.
@ -158,7 +158,7 @@ protected:
private: private:
TQStringList m_mimeFilters; TQStringList m_mimeFilters;
bool m_filterDotFiles :1; bool m_filterHiddenFiles :1;
bool m_filterSpecials :1; bool m_filterSpecials :1;
mode_t m_modeFilter; mode_t m_modeFilter;
protected: protected:

@ -204,6 +204,9 @@ void KFileItem::init( bool _determineMimeTypeOnDemand )
// otherwise, determineMimeType will be able to do better. // otherwise, determineMimeType will be able to do better.
m_bMimeTypeKnown = (!_determineMimeTypeOnDemand) || accurate; m_bMimeTypeKnown = (!_determineMimeTypeOnDemand) || accurate;
} }
// initialize hidden file matching apparatus
setHiddenFileMatcher( TDEGlobal::hiddenFileMatcher() );
} }
void KFileItem::readUDSEntry( bool _urlIsDirectory ) void KFileItem::readUDSEntry( bool _urlIsDirectory )
@ -830,15 +833,44 @@ bool KFileItem::isWritable() const
return true; return true;
} }
void KFileItem::setHiddenFileMatcher( TDEHiddenFileMatcher *hiddenFileMatcher )
{
kdDebug(7077) << "KFileItem::setHiddenFileMatcher(...) called for " << m_url.fileName() << " [" << hiddenFileMatcher->getCriteria() << "]" <<endl ;
m_pHiddenFileMatcher = hiddenFileMatcher;
m_bCheckHidden = true;
m_bHiddenByMatcher = false;
}
void KFileItem::reEvaluateHidden()
{
kdDebug(7077) << "KFileItem::reEvaluateHidden() called for " << m_url.fileName() <<endl ;
m_bCheckHidden = true;
}
void KFileItem::checkHiddenByMatcher()
{
if ( !m_url.isEmpty() )
m_bHiddenByMatcher = m_pHiddenFileMatcher->match( m_url.fileName() );
else // should never happen
m_bHiddenByMatcher = m_pHiddenFileMatcher->match( m_strName );
kdDebug(7077) << "KFileItem::checkHiddenByMatcher() called for " << m_url.fileName() << " [" << m_bHiddenByMatcher << "]" <<endl ;
m_bCheckHidden = false;
}
bool KFileItem::isHidden() const bool KFileItem::isHidden() const
{ {
if ( m_hidden != Auto ) if ( m_hidden != Auto )
return m_hidden == Hidden; return m_hidden == Hidden;
if ( !m_url.isEmpty() ) if ( m_bCheckHidden )
return m_url.fileName()[0] == '.'; const_cast<KFileItem*>(this)->checkHiddenByMatcher();
else // should never happen
return m_strName[0] == '.'; kdDebug(7077) << "KFileItem::isHidden() called for " << m_url.fileName() << " [" << m_bHiddenByMatcher << "]" <<endl ;
return m_bHiddenByMatcher;
} }
bool KFileItem::isDir() const bool KFileItem::isDir() const

@ -24,6 +24,7 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <tqptrlist.h> #include <tqptrlist.h>
#include <tdestringmatcher.h>
#include <tdeio/global.h> #include <tdeio/global.h>
#include <kurl.h> #include <kurl.h>
#include <kacl.h> #include <kacl.h>
@ -228,16 +229,33 @@ public:
*/ */
bool isWritable() const; bool isWritable() const;
/** /**
* Checks whether the file is hidden. * Sets pointer to object that encapsulates criteria for determining
* @return true if the file is hidden. * whether or not a filesystem entity is hidden based on characteristics
* of its name. Pointer is stored in @property m_pHiddenFileMatcher.
*/ */
bool isHidden() const; void setHiddenFileMatcher( TDEHiddenFileMatcher *hiddenFileMatcher );
/**
* Sets @property m_bCheckHidden to true, thereby forcing next call
* to method isHidden() to call method checkHiddenByMatcher() instead
* of simply relying on previously cached result.
*/
void reEvaluateHidden();
/** /**
* Returns the link destination if isLink() == true. Checks whether or not the current filesystem object is "hidden" by
* @return the link destination. TQString::null if the item is not a link calling the match() method of the TDEHiddenFileMatcher object stored
in @property m_pHiddenFileMatcher. Result of this check is cached in
@property m_bHiddenByMatcher.
*/ */
void checkHiddenByMatcher();
/**
Checks whether or not the current filesystem object is "hidden".
*/
bool isHidden() const;
TQString linkDest() const; TQString linkDest() const;
/** /**
@ -261,7 +279,7 @@ public:
* @return the file size, or 0 if not known * @return the file size, or 0 if not known
*/ */
TDEIO::filesize_t size(bool &hasSize) const; TDEIO::filesize_t size(bool &hasSize) const;
//FIXME KDE4 deprecate this in favor of time(unsigned int which, bool &hasSize) //FIXME KDE4 deprecate this in favor of time(unsigned int which, bool &hasSize)
/** /**
* Requests the modification, access or creation time, depending on @p which. * Requests the modification, access or creation time, depending on @p which.
@ -667,9 +685,31 @@ private:
bool m_bMimeTypeKnown:1; bool m_bMimeTypeKnown:1;
// Auto: check leading dot. // Auto: always check if hidden.
enum { Auto, Hidden, Shown } m_hidden:3; enum { Auto, Hidden, Shown } m_hidden:3;
/**
* If true, next call to isHidden() will force a full (re-)evaluation of
* whether or not a filesystem object is hidden based on criteria stored
* in the TDEHiddenFileMatcher object @property m_pHiddenFileMatcher. Can
* be set to true by external callers using method reEvaluateHidden().
*/
mutable bool m_bCheckHidden:1;
/**
* Caches result of most recent call to the TDEHiddenFileMatcher object
* @property m_pHiddenFileMatcher. True if file is "hidden" (i.e. hide-able),
* false otherwise.
*/
mutable bool m_bHiddenByMatcher:1;
/**
* Pointer to object that encapsulates criteria for determining whether
* or not a this filesystem entity is hidden based on characteristics of
* its name. This property is set by method setHiddenFileMatcher().
*/
mutable TDEHiddenFileMatcher *m_pHiddenFileMatcher;
// For special case like link to dirs over FTP // For special case like link to dirs over FTP
TQString m_guessedMimeType; TQString m_guessedMimeType;
mutable TQString m_access; mutable TQString m_access;

Loading…
Cancel
Save