/*! @file @id $Id$ */ // 1 2 3 4 5 6 7 8 // 45678901234567890123456789012345678901234567890123456789012345678901234567890 #ifndef FILESTORAGE_HXX #define FILESTORAGE_HXX #include #include #include #include #include #include #include #include #include namespace qbrowserlib { //! Store string lists. /** Abstract storage interface to string lists, such as bookmarks. */ class Storage: public QObject { Q_OBJECT; Q_SIGNALS: //! Emitted if file content has changed. void changed(); public: Storage() { TRC; } ~Storage() { TRC; } /*! @return true if readable or writable */ bool valid() { return readable() || writeable(); } /*! @return true if valid */ operator bool() { return valid(); } /*! @return name of the storage, e.g. filename */ virtual QString name() = 0; /*! @return true if storage object already exists */ virtual bool readable() = 0; /*! @return true if storage object exists or could be created */ virtual bool writeable() = 0; /*! @return storage content as string list */ virtual QStringList read() = 0; //! Writes storage content from string list. virtual bool write(const QStringList& out) = 0; public Q_SLOTS: void emitChanged() { TRC; changed(); } }; //! Implement @ref Storage for files. class FileStorage: public Storage { Q_OBJECT; public: /*! @param file full path to storage file */ FileStorage(QString file, int msec=1000): _file(file) { TRC; LOG<<"file: "<=0) res=true; _file.close(); } return res; } private Q_SLOTS: void check() { if (_modified!=QFileInfo(_file).lastModified()) { TRC; _modified = QFileInfo(_file).lastModified(); LOG<<"file has been modified"<<_modified.toString(); emitChanged(); } } private: QFile _file; QDateTime _modified; QTimer _timer; }; } #endif