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
8namespace score
9{
10struct DocumentContext;
11
14enum class FileKind
15{
16 Unknown,
17 Audio,
18 Video,
19 Image,
20 Midi,
21 Model3D,
22 Shader,
23 Script,
24 Data,
25 Folder,
26 Plugin
27};
28
31SCORE_LIB_BASE_EXPORT
32FileKind guessFileKind(const QString& path) noexcept;
33
35SCORE_LIB_BASE_EXPORT
36QString mediaSubfolder(FileKind k) noexcept;
37
42struct SCORE_LIB_BASE_EXPORT PathRoots
43{
46 QString documentFile;
48 QString library;
49
51 QString documentFolder() const noexcept;
52};
53
60SCORE_LIB_BASE_EXPORT
61QString pickerStartFolder(
62 const QString& current, const PathRoots& roots, const QString& userDocuments,
63 const QString& workingDir) noexcept;
64
66SCORE_LIB_BASE_EXPORT
67PathRoots pathRoots(const score::DocumentContext& ctx) noexcept;
68
71SCORE_LIB_BASE_EXPORT
72QString locateFilePath(const QString& filename, const PathRoots& roots) noexcept;
73
77SCORE_LIB_BASE_EXPORT
78QString relativizeFilePath(const QString& filename, const PathRoots& roots) noexcept;
79
83SCORE_LIB_BASE_EXPORT
84bool isUnderFolder(const QString& path, const QString& folder) noexcept;
85
87SCORE_LIB_BASE_EXPORT
88bool isProjectRelativePath(const QString& path) noexcept;
89SCORE_LIB_BASE_EXPORT
90bool isLibraryRelativePath(const QString& path) noexcept;
91
96SCORE_LIB_BASE_EXPORT
97QString sanitizeFileName(const QString& name) noexcept;
98
101SCORE_LIB_BASE_EXPORT
102bool sameFileContents(const QString& lhs, const QString& rhs) noexcept;
103
105enum class CopyMode
106{
107 Copy,
108 Symlink,
109 Hardlink
110};
111
112struct SCORE_LIB_BASE_EXPORT ConsolidateOptions
113{
114 CopyMode mode = CopyMode::Copy;
115
119 bool collectLibraryFiles = false;
120
123 bool useKindSubfolders = true;
124
127 bool keepSourceFolderName = false;
128};
129
143class SCORE_LIB_BASE_EXPORT FilePlacement
144{
145public:
146 explicit FilePlacement(QString projectFolder, ConsolidateOptions opts = {}) noexcept;
147
149 {
151 QString destination;
153 bool alreadyInProject{};
156 bool reused{};
157 };
158
159 Placement place(const QString& absoluteSource, FileKind kind);
160
161 const QString& projectFolder() const noexcept { return m_root; }
162 const ConsolidateOptions& options() const noexcept { return m_opts; }
163
164private:
165 QString subfolderFor(const QString& absoluteSource, FileKind kind) const;
166
167 QString m_root;
168 QString m_canonicalRoot;
169 ConsolidateOptions m_opts;
170 QHash<QString, Placement> m_placed;
171 QSet<QString> m_claimed;
172};
173
177SCORE_LIB_BASE_EXPORT
178bool materializeFile(
179 const QString& source, const QString& destination, CopyMode mode, QString& error);
180}
Decides where each source file goes inside a project folder.
Definition ProjectFiles.hpp:144
Base toolkit upon which the software is built.
Definition Application.cpp:113
FileKind guessFileKind(const QString &path) noexcept
Definition ProjectFiles.cpp:30
QString mediaSubfolder(FileKind k) noexcept
Name of the project sub-folder collected files of that kind go into.
Definition ProjectFiles.cpp:76
bool materializeFile(const QString &source, const QString &destination, CopyMode mode, QString &error)
Definition ProjectFiles.cpp:422
CopyMode
How a collected file is materialized in the project folder.
Definition ProjectFiles.hpp:106
@ Symlink
A symbolic link to the original.
@ Hardlink
A hard link.
@ Copy
An independent copy.
FileKind
Definition ProjectFiles.hpp:15
Definition ProjectFiles.hpp:113
Definition DocumentContext.hpp:18
Definition ProjectFiles.hpp:149
QString destination
Absolute destination path.
Definition ProjectFiles.hpp:151
Definition ProjectFiles.hpp:43
QString library
Absolute path of the user library root. May be empty.
Definition ProjectFiles.hpp:48
QString documentFile
Definition ProjectFiles.hpp:46
Definition PluginRequirements_QtInterface.hpp:13