32 #include <QCoreApplication>
35 : m_configurationName {configurationName}
41 return m_configurationName;
46 return (m_configurationName.isEmpty() ? QString() : QLatin1Char(
'_') + m_configurationName);
51 return QCoreApplication::applicationName() + configurationSuffix();
66 return QDir::homePath();
71 return locationWithConfigurationName(QStandardPaths::CacheLocation);
78 return locationWithConfigurationName(QStandardPaths::AppDataLocation);
80 return locationWithConfigurationName(QStandardPaths::AppConfigLocation);
86 #if defined(Q_OS_WIN) || defined (Q_OS_MACOS)
87 return locationWithConfigurationName(QStandardPaths::AppLocalDataLocation);
90 const QString legacyDir = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)
91 + QLatin1String(
"/data/") + profileName();
93 const QString dataDir = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)
94 + QLatin1Char(
'/') + profileName();
96 if (!QDir(dataDir).exists() && QDir(legacyDir).exists())
98 qWarning(
"The legacy data directory '%s' is used. It is recommended to move its content to '%s'",
99 qUtf8Printable(legacyDir), qUtf8Printable(dataDir));
110 return QStandardPaths::writableLocation(QStandardPaths::DownloadLocation);
115 #if defined(Q_OS_WIN) || defined(Q_OS_MACOS)
116 return SettingsPtr(
new QSettings(QSettings::IniFormat, QSettings::UserScope, profileName(), name));
118 return SettingsPtr(
new QSettings(profileName(), name));
124 return QStandardPaths::writableLocation(location) + configurationSuffix();
129 , m_rootDir {rootPath}
130 , m_baseDir {m_rootDir.absoluteFilePath(profileName())}
131 , m_cacheLocation {m_baseDir.absoluteFilePath(QLatin1String(
"cache"))}
132 , m_configLocation {m_baseDir.absoluteFilePath(QLatin1String(
"config"))}
133 , m_dataLocation {m_baseDir.absoluteFilePath(QLatin1String(
"data"))}
134 , m_downloadLocation {m_baseDir.absoluteFilePath(QLatin1String(
"downloads"))}
140 return m_rootDir.absolutePath();
145 return m_baseDir.absolutePath();
150 return m_cacheLocation;
155 return m_configLocation;
160 return m_dataLocation;
165 return m_downloadLocation;
171 #if defined(Q_OS_WIN) || defined(Q_OS_MACOS)
172 const char CONF_FILE_EXTENSION[] =
".ini";
174 const char CONF_FILE_EXTENSION[] =
".conf";
176 const QString settingsFileName {QDir(configLocation()).absoluteFilePath(name + QLatin1String(CONF_FILE_EXTENSION))};
177 return SettingsPtr(
new QSettings(settingsFileName, QSettings::IniFormat));
191 : m_baseDir {basePath}
198 if (path.isEmpty() || m_baseDir.path().isEmpty())
202 if (QDir::isAbsolutePath(path))
204 const QChar driveLeter = path[0].toUpper();
205 const QChar baseDriveLetter = m_baseDir.path()[0].toUpper();
206 const bool onSameDrive = (driveLeter.category() == QChar::Letter_Uppercase) && (driveLeter == baseDriveLetter);
211 return m_baseDir.relativeFilePath(path);
216 if (portablePath.isEmpty() || QDir::isAbsolutePath(portablePath))
219 return QDir::cleanPath(m_baseDir.absoluteFilePath(portablePath));
Converter(const QString &basePath)
QString fromPortablePath(const QString &portablePath) const override
QString toPortablePath(const QString &path) const override
QString cacheLocation() const override
SettingsPtr applicationSettings(const QString &name) const override
QString dataLocation() const override
QString rootPath() const override
QString downloadLocation() const override
QString configLocation() const override
QString basePath() const override
The base path against to which portable (relative) paths are resolved.
CustomProfile(const QString &rootPath, const QString &configurationName)
SettingsPtr applicationSettings(const QString &name) const override
QString configLocation() const override
QString downloadLocation() const override
QString basePath() const override
The base path against to which portable (relative) paths are resolved.
DefaultProfile(const QString &configurationName)
QString locationWithConfigurationName(QStandardPaths::StandardLocation location) const
Standard path writable location for profile files.
QString cacheLocation() const override
QString dataLocation() const override
QString rootPath() const override
QString fromPortablePath(const QString &portablePath) const override
QString toPortablePath(const QString &path) const override
QString profileName() const
QCoreApplication::applicationName() with optional configuration name appended.
QString configurationName() const
Profile(const QString &configurationName)
QString configurationSuffix() const
std::unique_ptr< QSettings > SettingsPtr