author | mickeyl <mickeyl> | 2004-04-20 14:34:17 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2004-04-20 14:34:17 (UTC) |
commit | 3fb65729e122d85a27b2a6194f96e37eaed3edd1 (patch) (unidiff) | |
tree | 6168c3efa9a41dc5d56669ce0f36f58196b3dabb | |
parent | ccba33667c0152cb58a6d0502170b388889571c9 (diff) | |
download | opie-3fb65729e122d85a27b2a6194f96e37eaed3edd1.zip opie-3fb65729e122d85a27b2a6194f96e37eaed3edd1.tar.gz opie-3fb65729e122d85a27b2a6194f96e37eaed3edd1.tar.bz2 |
2nd milestone reached: Notification now works with deleted, renamed, and
inode-modified files.
Next milestone: Make it work for files which are not yet there (DN_CREATE)
-rw-r--r-- | libopie2/opiecore/ofilenotify.cpp | 15 | ||||
-rw-r--r-- | libopie2/opiecore/ofilenotify.h | 10 |
2 files changed, 23 insertions, 2 deletions
diff --git a/libopie2/opiecore/ofilenotify.cpp b/libopie2/opiecore/ofilenotify.cpp index de4c63b..270570e 100644 --- a/libopie2/opiecore/ofilenotify.cpp +++ b/libopie2/opiecore/ofilenotify.cpp | |||
@@ -199,12 +199,20 @@ bool OFileNotification::hasChanged() | |||
199 | bool c = false; | 199 | bool c = false; |
200 | 200 | ||
201 | struct stat newstat; | 201 | struct stat newstat; |
202 | ::memset( &newstat, 0, sizeof newstat ); | 202 | ::memset( &newstat, 0, sizeof newstat ); |
203 | ::stat( _path, &newstat ); | 203 | int result = ::stat( _path, &newstat ); // may fail if file has been renamed or deleted. that doesn't matter :) |
204 | 204 | ||
205 | qDebug( "result of newstat call is %d (%s=%d)", result, strerror( errno ), errno ); | ||
205 | qDebug( "stat.atime = %0lx, newstat.atime = %0lx", (long)_stat.st_atime, (long)newstat.st_atime ); | 206 | qDebug( "stat.atime = %0lx, newstat.atime = %0lx", (long)_stat.st_atime, (long)newstat.st_atime ); |
206 | qDebug( "stat.mtime = %0lx, newstat.mtime = %0lx", (long)_stat.st_mtime, (long)newstat.st_mtime ); | 207 | qDebug( "stat.mtime = %0lx, newstat.mtime = %0lx", (long)_stat.st_mtime, (long)newstat.st_mtime ); |
208 | qDebug( "stat.ctime = %0lx, newstat.ctime = %0lx", (long)_stat.st_ctime, (long)newstat.st_ctime ); | ||
209 | |||
210 | if ( !c && (_type & (Delete|Rename)) && (long)newstat.st_atime == 0 && (long)newstat.st_mtime == 0 && (long)newstat.st_ctime == 0) | ||
211 | { | ||
212 | qDebug( "OFileNotification::hasChanged(): file has been deleted or renamed" ); | ||
213 | c = true; | ||
214 | } | ||
207 | if ( !c && (_type & Access) && (long)_stat.st_atime < (long)newstat.st_atime ) | 215 | if ( !c && (_type & Access) && (long)_stat.st_atime < (long)newstat.st_atime ) |
208 | { | 216 | { |
209 | qDebug( "OFileNotification::hasChanged(): atime changed" ); | 217 | qDebug( "OFileNotification::hasChanged(): atime changed" ); |
210 | c = true; | 218 | c = true; |
@@ -213,8 +221,13 @@ bool OFileNotification::hasChanged() | |||
213 | { | 221 | { |
214 | qDebug( "OFileNotification::hasChanged(): mtime changed" ); | 222 | qDebug( "OFileNotification::hasChanged(): mtime changed" ); |
215 | c = true; | 223 | c = true; |
216 | } | 224 | } |
225 | if ( !c && (_type & Attrib) && (long)_stat.st_ctime < (long)newstat.st_ctime ) | ||
226 | { | ||
227 | qDebug( "OFileNotification::hasChanged(): ctime changed" ); | ||
228 | c = true; | ||
229 | } | ||
217 | 230 | ||
218 | return c; | 231 | return c; |
219 | } | 232 | } |
220 | 233 | ||
diff --git a/libopie2/opiecore/ofilenotify.h b/libopie2/opiecore/ofilenotify.h index 5315896..13b5a6b 100644 --- a/libopie2/opiecore/ofilenotify.h +++ b/libopie2/opiecore/ofilenotify.h | |||
@@ -75,9 +75,9 @@ class OFileNotification : public QObject | |||
75 | void triggered(); | 75 | void triggered(); |
76 | 76 | ||
77 | protected: | 77 | protected: |
78 | bool activate(); | 78 | bool activate(); |
79 | bool hasChanged(); | 79 | virtual bool hasChanged(); |
80 | static bool registerSignalHandler(); | 80 | static bool registerSignalHandler(); |
81 | static void unregisterSignalHandler(); | 81 | static void unregisterSignalHandler(); |
82 | static void __signalHandler( int sig, siginfo_t *si, void *data ); | 82 | static void __signalHandler( int sig, siginfo_t *si, void *data ); |
83 | 83 | ||
@@ -89,8 +89,16 @@ class OFileNotification : public QObject | |||
89 | bool _active; | 89 | bool _active; |
90 | struct stat _stat; | 90 | struct stat _stat; |
91 | }; | 91 | }; |
92 | 92 | ||
93 | |||
94 | class ODirectoryNotification : public OFileNotification | ||
95 | { | ||
96 | public: | ||
97 | virtual bool hasChanged() { return true; }; | ||
98 | }; | ||
99 | |||
100 | |||
93 | } | 101 | } |
94 | } | 102 | } |
95 | 103 | ||
96 | #endif | 104 | #endif |