diff options
author | Michele Calgaro <michele.calgaro@yahoo.it> | 2025-08-28 22:44:34 +0900 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2025-08-31 23:30:34 +0900 |
commit | f9abd9d505434c9244c03eac708e29a0ca042f6b (patch) | |
tree | 30a197ab4c413849188bc131ff859212e636c821 /src/app/VFS/krdirwatch.cpp | |
parent | 14d42d284de233f9937becf3fc9ee0dabede3b21 (diff) | |
download | krusader-r14.1.x.tar.gz krusader-r14.1.x.zip |
Restructure source foldersr14.1.x
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
(cherry picked from commit 086012dcad8a976a0dabbb7cbc20c9cb612cdfa9)
Diffstat (limited to 'src/app/VFS/krdirwatch.cpp')
-rw-r--r-- | src/app/VFS/krdirwatch.cpp | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/src/app/VFS/krdirwatch.cpp b/src/app/VFS/krdirwatch.cpp new file mode 100644 index 0000000..fe4e2de --- /dev/null +++ b/src/app/VFS/krdirwatch.cpp @@ -0,0 +1,124 @@ +/*************************************************************************** + krdirwatch.cpp + ------------------- + copyright : (C) 2000 by Shie Erlich & Rafi Yanai + e-mail : 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 + + S o u rc e 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. * + * * + ***************************************************************************/ +#include "krdirwatch.h" +#include <unistd.h> +#include <sys/types.h> +#include <kdebug.h> +#include "krpermhandler.h" +#include "tqstringlist.h" +#include <tqdir.h> + +KRdirWatch::KRdirWatch(int msec,bool dirOnly): + delay(msec),t(this), changed(false) { + if(dirOnly) dir.setFilter( TQDir::Dirs | TQDir::Hidden | TQDir::NoSymLinks ); + watched.setAutoDelete(true); + connect(&t,TQ_SIGNAL(timeout()),this, TQ_SLOT(checkDirs())); + startScan(); +} + +KRdirWatch::~KRdirWatch(){ + clearList(); + stopScan(); +} + +void KRdirWatch::removeDir(TQString path){ + t.stop(); + for ( it = watched.first(); it != 0; ) + if (it->path == path) watched.remove(); + else it = watched.next(); + if (!stopped) startScan(); +} + +void KRdirWatch::addDir(TQString path, bool checkPermissions){ + t.stop(); + + krDirEntry* temp = new krDirEntry; + if (!dir.cd(path)){ // if it's not a dir or don't exist - don't add it + //kdDebug() << "KRDirWatch: can't watch " + path +", (don't exist)" << endl; + return; + } + if( checkPermissions ) { + // if we can't read it - don't bother + if (getgid() != 0 && !KRpermHandler::fileReadable(path) ){ + //kdDebug() << "KRDirWatch: can't watch " + path +", (not readable)" << endl; + return; + } + if (!KRpermHandler::fileWriteable(path) ){ // read-only directorys can't be changed + //kdDebug() << "KRDirWatch: not watching " + path +", (read-only directory)" << endl; + return; + } + } + qfi.setFile(path); + + temp->path = dir.path(); + temp->count = dir.entryList(TQDir::All | TQDir::AccessMask).count(); + temp->lastModified = qfi.lastModified(); + + watched.append(temp); + if (!stopped) startScan(); +} + +// here we do the actual checking +void KRdirWatch::checkDirs(){ + t.stop(); + + TQString path; + unsigned long count; + TQDateTime dt; + + for ( it = watched.first(); it != 0; it = watched.next() ){ + path = it->path; + qfi.setFile(path); + if (!dir.cd(path)){ + clearList(); + emit dirty(); + return; + } + dt = qfi.lastModified(); + count = dir.entryList(TQDir::All | TQDir::AccessMask).count(); + // check for changes + if(it->lastModified!=dt || it->count!=count){ + changed = true; + it->lastModified=dt; + it->count=count; + startScan(); + return; + } + if(changed){ + changed = false; + clearList(); + emit dirty(); + return; + } + } + if (!stopped) startScan(); +} + +#include "krdirwatch.moc" |