20 #ifndef LIBREPCB_CORE_TRANSACTIONALFILESYSTEM_H 21 #define LIBREPCB_CORE_TRANSACTIONALFILESYSTEM_H 26 #include "../exceptions.h" 141 QString(
"Autosave backup detected in directory '%1'.")
149 const FilePath& filepath,
bool writable =
false,
152 QObject* parent =
nullptr);
163 virtual QStringList
getDirs(
const QString& path =
"")
const noexcept
override;
164 virtual QStringList
getFiles(
const QString& path =
"")
const 166 virtual bool fileExists(
const QString& path)
const noexcept
override;
167 virtual QByteArray
read(
const QString& path)
const override;
168 virtual QByteArray
readIfExists(
const QString& path)
const override;
169 virtual void write(
const QString& path,
const QByteArray& content)
override;
170 virtual void removeFile(
const QString& path)
override;
176 QByteArray
exportToZip(FilterFunction filter =
nullptr)
const;
184 static std::shared_ptr<TransactionalFileSystem>
open(
185 const FilePath& filepath,
bool writable,
188 QObject* parent =
nullptr) {
189 return std::make_shared<TransactionalFileSystem>(
190 filepath, writable, restoreCallback, lockCallback, parent);
192 static std::shared_ptr<TransactionalFileSystem>
openRO(
195 QObject* parent =
nullptr) {
196 return open(filepath,
false, restoreCallback,
nullptr, parent);
198 static std::shared_ptr<TransactionalFileSystem>
openRW(
202 QObject* parent =
nullptr) {
203 return open(filepath,
true, restoreCallback, lockCallback, parent);
205 static QString
cleanPath(QString path) noexcept;
208 bool isRemoved(
const QString& path)
const noexcept;
210 const QString& dir, FilterFunction filter)
const;
211 void saveDiff(
const QString& type)
const;
const FilePath mFilePath
Definition: transactionalfilesystem.h:216
TransactionalFileSystem()=delete
virtual QByteArray readIfExists(const QString &path) const override
Definition: transactionalfilesystem.cpp:180
Transactional librepcb::FileSystem implementation.
Definition: transactionalfilesystem.h:71
void exportDirToZip(QuaZipFile &file, const FilePath &zipFp, const QString &dir, FilterFunction filter) const
Definition: transactionalfilesystem.cpp:429
Definition: occmodel.cpp:76
void discardChanges() noexcept
Definition: transactionalfilesystem.cpp:311
const bool mIsWritable
Definition: transactionalfilesystem.h:217
void loadDiff(const FilePath &fp)
Definition: transactionalfilesystem.cpp:509
void removeDiff(const QString &type)
Definition: transactionalfilesystem.cpp:532
virtual void write(const QString &path, const QByteArray &content) override
Definition: transactionalfilesystem.cpp:194
virtual FilePath getAbsPath(const QString &path="") const noexcept override
Definition: transactionalfilesystem.cpp:95
static bool yes(const FilePath &dir)
Always restore the backup, if there is any.
Definition: transactionalfilesystem.h:124
void loadFromZip(QByteArray content)
Definition: transactionalfilesystem.cpp:230
static std::shared_ptr< TransactionalFileSystem > open(const FilePath &filepath, bool writable, RestoreCallback restoreCallback=&RestoreMode::no, DirectoryLock::LockHandlerCallback lockCallback=nullptr, QObject *parent=nullptr)
Definition: transactionalfilesystem.h:184
QByteArray exportToZip(FilterFunction filter=nullptr) const
Definition: transactionalfilesystem.cpp:269
bool isWritable() const noexcept
Definition: transactionalfilesystem.h:158
std::function< bool(const FilePath &dir, LockStatus status, const QString &user)> LockHandlerCallback
Callback type used to determine whether a lock should be overridden or not.
Definition: directorylock.h:193
virtual ~TransactionalFileSystem() noexcept
Definition: transactionalfilesystem.cpp:76
QStringList checkForModifications() const
Definition: transactionalfilesystem.cpp:318
virtual QByteArray read(const QString &path) const override
Definition: transactionalfilesystem.cpp:169
void save()
Definition: transactionalfilesystem.cpp:356
virtual QStringList getDirs(const QString &path="") const noexcept override
Definition: transactionalfilesystem.cpp:100
const FilePath & getPath() const noexcept
Definition: transactionalfilesystem.h:157
DirectoryLock mLock
Definition: transactionalfilesystem.h:218
virtual bool fileExists(const QString &path) const noexcept override
Definition: transactionalfilesystem.cpp:157
The RuntimeError class.
Definition: exceptions.h:216
QHash< QString, QByteArray > mModifiedFiles
Definition: transactionalfilesystem.h:223
static std::shared_ptr< TransactionalFileSystem > openRW(const FilePath &filepath, RestoreCallback restoreCallback=&RestoreMode::no, DirectoryLock::LockHandlerCallback lockCallback=nullptr, QObject *parent=nullptr)
Definition: transactionalfilesystem.h:198
This class represents absolute, well-formatted paths to files or directories.
Definition: filepath.h:127
Convenience class providing standard implementations for librepcb::TransactionalFileSystem::RestoreCa...
Definition: transactionalfilesystem.h:104
QString toNative() const noexcept
Get the absolute filepath with native directory separators.
Definition: filepath.cpp:108
static bool abort(const FilePath &dir)
If there exists a backup, abort opening the directory by raising an exception.
Definition: transactionalfilesystem.h:139
std::function< bool(const QString &filePath)> FilterFunction
Function to filter files.
Definition: transactionalfilesystem.h:83
bool mRestoredFromAutosave
Definition: transactionalfilesystem.h:219
virtual void removeFile(const QString &path) override
Definition: transactionalfilesystem.cpp:202
QMutex mMutex
Definition: transactionalfilesystem.h:220
QSet< QString > mRemovedFiles
Definition: transactionalfilesystem.h:224
QSet< QString > mRemovedDirs
Definition: transactionalfilesystem.h:225
Base class / interface for all file system implementations.
Definition: filesystem.h:45
bool isRestoredFromAutosave() const noexcept
Definition: transactionalfilesystem.h:159
std::function< bool(const FilePath &dir)> RestoreCallback
Callback type used to determine whether a backup should be restored or not.
Definition: transactionalfilesystem.h:96
static bool no(const FilePath &dir)
Never restore a backup.
Definition: transactionalfilesystem.h:112
bool isRemoved(const QString &path) const noexcept
Definition: transactionalfilesystem.cpp:415
static QString cleanPath(QString path) noexcept
Definition: transactionalfilesystem.cpp:403
static std::shared_ptr< TransactionalFileSystem > openRO(const FilePath &filepath, RestoreCallback restoreCallback=&RestoreMode::no, QObject *parent=nullptr)
Definition: transactionalfilesystem.h:192
virtual QStringList getFiles(const QString &path="") const noexcept override
Definition: transactionalfilesystem.cpp:129
virtual void removeDirRecursively(const QString &path="") override
Definition: transactionalfilesystem.cpp:209
This class can be used to implement file-based directory locks.
Definition: directorylock.h:154
void autosave()
Definition: transactionalfilesystem.cpp:351
void saveDiff(const QString &type) const
Definition: transactionalfilesystem.cpp:473