LibrePCB Developers Documentation
transactionaldirectory.h
Go to the documentation of this file.
1 /*
2  * LibrePCB - Professional EDA for everyone!
3  * Copyright (C) 2013 LibrePCB Developers, see AUTHORS.md for contributors.
4  * https://librepcb.org/
5  *
6  * This program is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program. If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef LIBREPCB_CORE_TRANSACTIONALDIRECTORY_H
21 #define LIBREPCB_CORE_TRANSACTIONALDIRECTORY_H
22 
23 /*******************************************************************************
24  * Includes
25  ******************************************************************************/
26 #include "filesystem.h"
27 
28 #include <QtCore>
29 
30 #include <memory>
31 
32 /*******************************************************************************
33  * Namespace / Forward Declarations
34  ******************************************************************************/
35 namespace librepcb {
36 
37 class TransactionalFileSystem;
38 
39 /*******************************************************************************
40  * Class TransactionalDirectory
41  ******************************************************************************/
42 
51 class TransactionalDirectory final : public FileSystem {
52  Q_OBJECT
53 
54 public:
55  // Constructors / Destructor
56  TransactionalDirectory(QObject* parent = nullptr);
57  explicit TransactionalDirectory(std::shared_ptr<TransactionalFileSystem> fs,
58  const QString& dir = "",
59  QObject* parent = nullptr) noexcept;
60  // Note: The "other" parameter must not be a const reference because of
61  // const correctness reasons! A const TransactionalDirectory must
62  // not be convertible to a non-const TransactionalDirectory because
63  // it would allow writing to a file system which should actually be
64  // const.
66  const QString& subdir = "",
67  QObject* parent = nullptr) noexcept;
68  virtual ~TransactionalDirectory() noexcept;
69 
70  // Getters
71  std::shared_ptr<const TransactionalFileSystem> getFileSystem() const
72  noexcept {
73  return mFileSystem;
74  }
75  std::shared_ptr<TransactionalFileSystem> getFileSystem() noexcept {
76  return mFileSystem;
77  }
78  const QString& getPath() const noexcept { return mPath; }
79  bool isWritable() const noexcept;
80  bool isRestoredFromAutosave() const noexcept;
81 
82  // Inherited from FileSystem
83  virtual FilePath getAbsPath(const QString& path = "") const noexcept override;
84  virtual QStringList getDirs(const QString& path = "") const noexcept override;
85  virtual QStringList getFiles(const QString& path = "") const
86  noexcept override;
87  virtual bool fileExists(const QString& path) const noexcept override;
88  virtual QByteArray read(const QString& path) const override;
89  virtual QByteArray readIfExists(const QString& path) const override;
90  virtual void write(const QString& path, const QByteArray& content) override;
91  virtual void renameFile(const QString& src, const QString& dst) override;
92  virtual void removeFile(const QString& path) override;
93  virtual void removeDirRecursively(const QString& path = "") override;
94 
95  // General Methods
96  void copyTo(TransactionalDirectory& dest) const;
97  void saveTo(TransactionalDirectory& dest);
98  void moveTo(TransactionalDirectory& dest);
99 
100 private: // Methods
101  static void copyDirRecursively(TransactionalFileSystem& srcFs,
102  const QString& srcDir,
104  const QString& dstDir);
105 
106 private: // Data
107  std::shared_ptr<TransactionalFileSystem> mFileSystem;
108  QString mPath;
109 };
110 
111 /*******************************************************************************
112  * End of File
113  ******************************************************************************/
114 
115 } // namespace librepcb
116 
117 #endif
virtual FilePath getAbsPath(const QString &path="") const noexcept override
Definition: transactionaldirectory.cpp:79
virtual void renameFile(const QString &src, const QString &dst) override
Definition: transactionaldirectory.cpp:111
Transactional librepcb::FileSystem implementation.
Definition: transactionalfilesystem.h:71
Definition: occmodel.cpp:76
void copyTo(TransactionalDirectory &dest) const
Definition: transactionaldirectory.cpp:128
virtual QByteArray readIfExists(const QString &path) const override
Definition: transactionaldirectory.cpp:102
TransactionalDirectory(QObject *parent=nullptr)
Definition: transactionaldirectory.cpp:36
virtual void removeDirRecursively(const QString &path="") override
Definition: transactionaldirectory.cpp:120
Helper class to access a subdirectory of TransactionalFileSystem.
Definition: transactionaldirectory.h:51
virtual QStringList getDirs(const QString &path="") const noexcept override
Definition: transactionaldirectory.cpp:84
virtual QStringList getFiles(const QString &path="") const noexcept override
Definition: transactionaldirectory.cpp:89
bool isWritable() const noexcept
Definition: transactionaldirectory.cpp:67
QString mPath
Definition: transactionaldirectory.h:108
virtual QByteArray read(const QString &path) const override
Definition: transactionaldirectory.cpp:98
virtual bool fileExists(const QString &path) const noexcept override
Definition: transactionaldirectory.cpp:94
static void copyDirRecursively(TransactionalFileSystem &srcFs, const QString &srcDir, TransactionalFileSystem &dstFs, const QString &dstDir)
Definition: transactionaldirectory.cpp:161
std::shared_ptr< const TransactionalFileSystem > getFileSystem() const noexcept
Definition: transactionaldirectory.h:71
This class represents absolute, well-formatted paths to files or directories.
Definition: filepath.h:127
virtual ~TransactionalDirectory() noexcept
Definition: transactionaldirectory.cpp:60
bool isRestoredFromAutosave() const noexcept
Definition: transactionaldirectory.cpp:71
std::shared_ptr< TransactionalFileSystem > mFileSystem
Definition: transactionaldirectory.h:107
Base class / interface for all file system implementations.
Definition: filesystem.h:45
void moveTo(TransactionalDirectory &dest)
Definition: transactionaldirectory.cpp:145
virtual void removeFile(const QString &path) override
Definition: transactionaldirectory.cpp:116
void saveTo(TransactionalDirectory &dest)
Definition: transactionaldirectory.cpp:136
std::shared_ptr< TransactionalFileSystem > getFileSystem() noexcept
Definition: transactionaldirectory.h:75
virtual void write(const QString &path, const QByteArray &content) override
Definition: transactionaldirectory.cpp:106
const QString & getPath() const noexcept
Definition: transactionaldirectory.h:78