-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 | |||
@@ -200,10 +200,18 @@ bool OFileNotification::hasChanged() | |||
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" ); |
@@ -214,6 +222,11 @@ bool OFileNotification::hasChanged() | |||
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 | } |
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 | |||
@@ -76,7 +76,7 @@ class OFileNotification : public QObject | |||
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 ); |
@@ -90,6 +90,14 @@ class OFileNotification : public QObject | |||
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 | ||