diff options
Diffstat (limited to 'src/app/VFS/krquery.h')
-rw-r--r-- | src/app/VFS/krquery.h | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/src/app/VFS/krquery.h b/src/app/VFS/krquery.h new file mode 100644 index 0000000..6481782 --- /dev/null +++ b/src/app/VFS/krquery.h @@ -0,0 +1,209 @@ +/*************************************************************************** + krquery.h + ------------------- + copyright : (C) 2001 by Shie Erlich & Rafi Yanai + email : krusader@users.sourceforge.net + web site : http://krusader.sourceforge.net + --------------------------------------------------------------------------- + Description + *************************************************************************** + + A + + db dD d8888b. db db .d8888. .d8b. d8888b. d88888b d8888b. + 88 ,8P' 88 `8D 88 88 88' YP d8' `8b 88 `8D 88' 88 `8D + 88,8P 88oobY' 88 88 `8bo. 88ooo88 88 88 88ooooo 88oobY' + 88`8b 88`8b 88 88 `Y8b. 88~~~88 88 88 88~~~~~ 88`8b + 88 `88. 88 `88. 88b d88 db 8D 88 88 88 .8D 88. 88 `88. + YP YD 88 YD ~Y8888P' `8888Y' YP YP Y8888D' Y88888P 88 YD + + H e a d e r F i l e + + *************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ +#ifndef KRQUERY_H +#define KRQUERY_H + +#include <tqstringlist.h> +#include <tqdatetime.h> +#include <time.h> +#include <kurl.h> +#include <tdeio/jobclasses.h> +#include "vfile.h" + +class KFileItem; + +class KRQuery : public TQObject { + TQ_OBJECT + + +public: + // null query + KRQuery(); + // query only with name filter + KRQuery( const TQString &name, bool matchCase = true ); + // copy constructor + KRQuery( const KRQuery & ); + // let operator + KRQuery& operator=(const KRQuery &); + // destructor + virtual ~KRQuery(); + + // matching a file with the query + bool match( vfile *file ) const;// checks if the given vfile object matches the conditions + // matching a TDEIO file with the query + bool match( KFileItem *file ) const;// checks if the given vfile object matches the conditions + // matching a name with the query + bool match( const TQString &name ) const;// matching the filename only + // matching the name of the directory + bool matchDirName( const TQString &name ) const; + + // sets the text for name filtering + void setNameFilter( const TQString &text, bool cs=true ); + // returns the current filter mask + const TQString& nameFilter() const { return origFilter; } + // returns whether the filter is case sensitive + bool isCaseSensitive() { return matchesCaseSensitive; } + + // returns if the filter is null (was cancelled) + bool isNull() {return bNull;}; + + // sets the content part of the query + void setContent( const TQString &content, bool cs=true, bool wholeWord=false, bool remoteSearch=false ); + + // sets the minimum file size limit + void setMinimumFileSize( TDEIO::filesize_t ); + // sets the maximum file size limit + void setMaximumFileSize( TDEIO::filesize_t ); + + // sets the time the file newer than + void setNewerThan( time_t time ); + // sets the time the file older than + void setOlderThan( time_t time ); + + // sets the owner + void setOwner( const TQString &ownerIn ); + // sets the group + void setGroup( const TQString &groupIn ); + // sets the permissions + void setPermissions( const TQString &permIn ); + + // sets the mimetype for the query + // type, must be one of the following: + // 1. a valid mime type name + // 2. one of: i18n("Archives"), i18n("Directories"), i18n("Image Files") + // i18n("Text Files"), i18n("Video Files"), i18n("Audio Files") + // 3. i18n("Custom") in which case you must supply a list of valid mime-types + // in the member TQStringList customType + void setMimeType( const TQString &typeIn, TQStringList customList = TQStringList() ); + // true if setMimeType was called + bool hasMimeType() { return type.isEmpty(); } + + // sets the search in archive flag + void setSearchInArchives( bool flag ) { inArchive = flag; } + // gets the search in archive flag + bool searchInArchives() { return inArchive; } + // sets the recursive flag + void setRecursive( bool flag ) { recurse = flag; } + // gets the recursive flag + bool isRecursive() { return recurse; } + // sets whether to follow symbolic links + void setFollowLinks( bool flag ) { followLinksP = flag; } + // gets whether to follow symbolic links + bool followLinks() { return followLinksP; } + + // sets the folders where the searcher will search + void setSearchInDirs( const KURL::List &urls ); + // gets the folders where the searcher searches + const KURL::List & searchInDirs() { return whereToSearch; } + // sets the folders where search is not permitted + void setDontSearchInDirs( const KURL::List &urls ); + // gets the folders where search is not permitted + const KURL::List & dontSearchInDirs() { return whereNotToSearch; } + // checks if a URL is excluded + bool isExcluded( const KURL &url ); + // gives whether we search for content + bool isContentSearched() const { return !contain.isEmpty(); } + + const TQString& foundText() const { return lastSuccessfulGrep; } + +protected: + // important to know whether the event processor is connected + virtual void connectNotify ( const char * signal ); + // important to know whether the event processor is connected + virtual void disconnectNotify ( const char * signal ); + +protected: + TQStringList matches; // what to search + TQStringList excludes; // what to exclude + TQStringList includedDirs; // what dirs to include + TQStringList excludedDirs; // what dirs to exclude + bool matchesCaseSensitive; + + bool bNull; // flag if the query is null + + TQString contain; // file must contain this string + bool containCaseSensetive; + bool containWholeWord; + bool containOnRemote; + + TDEIO::filesize_t minSize; + TDEIO::filesize_t maxSize; + + time_t newerThen; + time_t olderThen; + + TQString owner; + TQString group; + TQString perm; + + TQString type; + TQStringList customType; + + bool inArchive; // if true- search in archive. + bool recurse; // if true recurse ob sub-dirs... + bool followLinksP; + + KURL::List whereToSearch; // directorys to search + KURL::List whereNotToSearch; // directorys NOT to search + +signals: + void status( const TQString &name ); + void processEvents( bool & stopped ); + +private: + bool matchCommon( const TQString &, const TQStringList &, const TQStringList & ) const; + bool checkPerm(TQString perm) const; + bool checkType(TQString mime) const; + bool containsContent( TQString file ) const; + bool containsContent( KURL url ) const; + bool checkBuffer( const char *buffer, int len ) const; + bool checkLines( const char *buffer, int len ) const; + bool checkTimer() const; + TQStringList split( TQString ); + +private slots: + void containsContentData(TDEIO::Job *, const TQByteArray &); + void containsContentFinished(TDEIO::Job*); + +private: + TQString origFilter; + mutable bool busy; + mutable bool containsContentResult; + mutable char * receivedBuffer; + mutable int receivedBufferLen; + mutable TQString lastSuccessfulGrep; + mutable TQString fileName; + mutable TDEIO::filesize_t receivedBytes; + mutable TDEIO::filesize_t totalBytes; + mutable int processEventsConnected; + mutable TQTime timer; +}; + +#endif |