Loading...
Searching...
No Matches
ProjectFiles.hpp
1#pragma once
2#include <QHash>
3#include <QSet>
4#include <QString>
5
6#include <score_lib_base_export.h>
7
8#include <vector>
9
10namespace score
11{
12struct DocumentContext;
13
16enum class FileKind
17{
18 Unknown,
19 Audio,
20 Video,
21 Image,
22 Midi,
23 Model3D,
24 Shader,
25 Script,
26 Data,
27 Folder,
28 Plugin
29};
30
33SCORE_LIB_BASE_EXPORT
34FileKind guessFileKind(const QString& path) noexcept;
35
37SCORE_LIB_BASE_EXPORT
38QString mediaSubfolder(FileKind k) noexcept;
39
44struct SCORE_LIB_BASE_EXPORT PathRoots
45{
49 QString documentFile;
51 QString library;
52
54 QString documentFolder() const noexcept;
55};
56
63SCORE_LIB_BASE_EXPORT
64QString pickerStartFolder(
65 const QString& current, const PathRoots& roots, const QString& userDocuments,
66 const QString& workingDir) noexcept;
67
69SCORE_LIB_BASE_EXPORT
70PathRoots pathRoots(const score::DocumentContext& ctx) noexcept;
71
73SCORE_LIB_BASE_EXPORT
74PathRoots pathRoots() noexcept;
75
78SCORE_LIB_BASE_EXPORT
79QString locateFilePath(const QString& filename, const PathRoots& roots) noexcept;
80
84SCORE_LIB_BASE_EXPORT
85QString relativizeFilePath(const QString& filename, const PathRoots& roots) noexcept;
86
90SCORE_LIB_BASE_EXPORT
91bool isUnderFolder(const QString& path, const QString& folder) noexcept;
92
97SCORE_LIB_BASE_EXPORT
98bool isRemoteUrl(const QString& path) noexcept;
99
102SCORE_LIB_BASE_EXPORT
103bool isContainedRelativePath(const QString& relative) noexcept;
104
106SCORE_LIB_BASE_EXPORT
107bool isProjectRelativePath(const QString& path) noexcept;
108SCORE_LIB_BASE_EXPORT
109bool isLibraryRelativePath(const QString& path) noexcept;
110
115SCORE_LIB_BASE_EXPORT
116QString sanitizeFileName(const QString& name) noexcept;
117
120SCORE_LIB_BASE_EXPORT
121bool sameFileContents(const QString& lhs, const QString& rhs) noexcept;
122
124enum class CopyMode
125{
126 Copy,
127 Symlink,
128 Hardlink
129};
130
131struct SCORE_LIB_BASE_EXPORT ConsolidateOptions
132{
133 CopyMode mode = CopyMode::Copy;
134
138 bool collectLibraryFiles = false;
139
142 bool useKindSubfolders = true;
143
146 bool keepSourceFolderName = false;
147};
148
162class SCORE_LIB_BASE_EXPORT FilePlacement
163{
164public:
165 explicit FilePlacement(QString projectFolder, ConsolidateOptions opts = {}) noexcept;
166
168 {
170 QString destination;
172 bool alreadyInProject{};
175 bool reused{};
176 };
177
185 Placement place(
186 const QString& absoluteSource, FileKind kind,
187 const std::vector<QString>& companions = {});
188
189 const QString& projectFolder() const noexcept { return m_root; }
190 const ConsolidateOptions& options() const noexcept { return m_opts; }
191
192private:
193 QString subfolderFor(const QString& absoluteSource, FileKind kind) const;
194 Placement placeWithCompanions(
195 const QString& canonicalSource, FileKind kind,
196 const std::vector<QString>& companions);
197
198 QString m_root;
199 QString m_canonicalRoot;
200 ConsolidateOptions m_opts;
201 QHash<QString, Placement> m_placed;
203 QSet<QString> m_claimed;
206 QSet<QString> m_fileFolders;
207};
208
212SCORE_LIB_BASE_EXPORT
213bool materializeFile(
214 const QString& source, const QString& destination, CopyMode mode, QString& error);
215}
Decides where each source file goes inside a project folder.
Definition ProjectFiles.hpp:163
Base toolkit upon which the software is built.
Definition Application.cpp:83
FileKind guessFileKind(const QString &path) noexcept
Definition ProjectFiles.cpp:59
QString mediaSubfolder(FileKind k) noexcept
Name of the project sub-folder collected files of that kind go into.
Definition ProjectFiles.cpp:105
@ Unknown
Versions unreadable; treated as usable.
bool materializeFile(const QString &source, const QString &destination, CopyMode mode, QString &error)
Definition ProjectFiles.cpp:536
CopyMode
How a collected file is materialized in the project folder.
Definition ProjectFiles.hpp:125
@ Symlink
A symbolic link to the original.
@ Hardlink
A hard link.
@ Copy
An independent copy.
FileKind
Definition ProjectFiles.hpp:17
Definition ProjectFiles.hpp:132
Definition DocumentContext.hpp:18
Definition ProjectFiles.hpp:168
QString destination
Absolute destination path.
Definition ProjectFiles.hpp:170
Definition ProjectFiles.hpp:45
QString library
Absolute path of the user library root. May be empty.
Definition ProjectFiles.hpp:51
QString documentFile
Definition ProjectFiles.hpp:49
Definition PluginRequirements_QtInterface.hpp:13