]> git.lyx.org Git - lyx.git/blobdiff - src/support/FileMonitor.C
Detect mode_t for safe use of chmod, and for scons/msvc
[lyx.git] / src / support / FileMonitor.C
index 3d5e84326a65272178ea2cf0d3e1c3f400b201d7..715c10f569fa0b09af421c480b4eecc802224dd8 100644 (file)
 
 #include <config.h>
 
-#include "FileMonitor.h"
+#include "support/FileMonitor.h"
+#include "support/lyxlib.h"
 
+// FIXME Interface violation
 #include "frontends/Timeout.h"
 
-#include "support/FileInfo.h"
-#include "support/lyxlib.h"
-
 #include <boost/bind.hpp>
+#include <boost/filesystem/operations.hpp>
 #include <boost/signals/trackable.hpp>
 
 
 using std::string;
 
+namespace fs = boost::filesystem;
 
 namespace lyx {
 namespace support {
 
-struct FileMonitor::Impl : public boost::signals::trackable {
+class FileMonitor::Impl : public boost::signals::trackable {
+public:
 
        ///
        Impl(string const & file_with_path, int interval);
@@ -42,7 +44,7 @@ struct FileMonitor::Impl : public boost::signals::trackable {
        Timeout timer_;
 
        /// This signal is emitted if the file is modified (has a new checksum).
-       boost::signal0<void> fileChanged_;
+       FileMonitor::FileChangedSig fileChanged_;
 
        /** We use these to ascertain whether a file (once loaded successfully)
         *  has changed.
@@ -89,11 +91,10 @@ void FileMonitor::start() const
        if (monitoring())
                return;
 
-       FileInfo finfo(pimpl_->filename_);
-       if (!finfo.isOK())
+       if (!fs::exists(pimpl_->filename_))
                return;
 
-       pimpl_->timestamp_ = finfo.getModificationTime();
+       pimpl_->timestamp_ = fs::last_write_time(pimpl_->filename_);
        pimpl_->checksum_ = sum(pimpl_->filename_);
 
        if (pimpl_->timestamp_ && pimpl_->checksum_) {
@@ -155,14 +156,13 @@ void FileMonitor::Impl::monitorFile()
 {
        bool changed = false;
 
-       FileInfo finfo(filename_);
-       if (!finfo.isOK()) {
+       if (!fs::exists(filename_)) {
                changed = timestamp_ || checksum_;
                timestamp_ = 0;
                checksum_ = 0;
 
        } else {
-               time_t const new_timestamp = finfo.getModificationTime();
+               time_t const new_timestamp = fs::last_write_time(filename_);
 
                if (new_timestamp != timestamp_) {
                        timestamp_ = new_timestamp;