22 #include <QApplication>
26 #include <QStandardPaths>
28 #include <QStringBuilder>
29 #include <QStringList>
35 const QLatin1String globalSettingsFile{
"qtox.ini"};
36 const QLatin1String profileFolder{
"profiles"};
37 const QLatin1String themeFolder{
"themes"};
38 const QLatin1String avatarsFolder{
"avatars"};
39 const QLatin1String transfersFolder{
"transfers"};
40 const QLatin1String screenshotsFolder{
"screenshots"};
44 const QLatin1String TCSToxFileFolder{
"%APPDATA%/tox/"};
45 #elif defined(Q_OS_OSX)
46 const QLatin1String TCSToxFileFolder{
"~/Library/Application Support/Tox"};
48 const QLatin1String TCSToxFileFolder{
"~/.config/tox/"};
81 bool portableFromMode(Portable mode)
83 bool portable =
false;
84 const QString basePortable = qApp->applicationDirPath();
85 const QString baseNonPortable = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
86 const QString portableSettingsPath = basePortable % QDir::separator() % globalSettingsFile;
89 case Portable::Portable:
90 qDebug() <<
"Forcing portable";
92 case Portable::NonPortable:
93 qDebug() <<
"Forcing non-portable";
96 if (QFile(portableSettingsPath).exists()) {
97 QSettings ps(portableSettingsPath, QSettings::IniFormat);
98 ps.setIniCodec(
"UTF-8");
99 ps.beginGroup(
"Advanced");
100 portable = ps.value(
"makeToxPortable",
false).toBool();
105 qDebug()<<
"Auto portable mode:" << portable;
108 assert(!
"Unhandled enum class Paths::Portable value");
112 QString basePathFromPortable(
bool portable)
114 const QString basePortable = qApp->applicationDirPath();
115 const QString baseNonPortable = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
116 QString basePath = portable ? basePortable : baseNonPortable;
117 if (basePath.isEmpty()) {
118 assert(!
"Couldn't find writeable path");
119 qCritical() <<
"Couldn't find writable path";
138 auto oldVal =
portable.exchange(newPortable);
139 if (oldVal != newPortable) {
154 #if PATHS_VERSION_TCS_COMPLIANT
159 QString Paths::getGlobalSettingsPath()
const
166 path = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);
167 if (path.isEmpty()) {
168 qDebug() <<
"Can't find writable location for settings file";
175 return path % QDir::separator() % globalSettingsFile;
182 QString Paths::getProfilesDir()
const
184 return basePath % QDir::separator() % profileFolder % QDir::separator();
192 QString Paths::getToxSaveDir()
const
195 return basePath % QDir::separator() % profileFolder % QDir::separator();
205 return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)
206 + QDir::separator() +
"AppData" + QDir::separator() +
"Roaming"
207 + QDir::separator() +
"tox")
209 #elif defined(Q_OS_OSX)
210 return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)
211 + QDir::separator() +
"Library" + QDir::separator()
212 +
"Application Support" + QDir::separator() +
"Tox")
217 return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation)
218 + QDir::separator() +
"tox")
228 QString Paths::getAvatarsDir()
const
232 QString path = getToxSaveDir();
233 if (path.isEmpty()) {
234 qDebug() <<
"Can't find location for avatars directory";
238 return path % avatarsFolder % QDir::separator();
245 QString Paths::getScreenshotsDir()
const
247 return basePath % QDir::separator() % screenshotsFolder % QDir::separator();
254 QString Paths::getTransfersDir()
const
256 return basePath % QDir::separator() % transfersFolder % QDir::separator();
264 QStringList Paths::getThemeDirs()
const
266 QStringList themeFolders{};
269 themeFolders += QStandardPaths::locate(QStandardPaths::AppDataLocation, themeFolder,
270 QStandardPaths::LocateDirectory);
274 const QString curPath = qApp->applicationDirPath();
275 themeFolders += curPath % QDir::separator() % themeFolder % QDir::separator();
289 return qApp->applicationDirPath() + QDir::separator();
293 return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)
294 + QDir::separator() +
"AppData" + QDir::separator() +
"Roaming"
295 + QDir::separator() +
"tox")
297 #elif defined(Q_OS_OSX)
298 return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)
299 + QDir::separator() +
"Library" + QDir::separator()
300 +
"Application Support" + QDir::separator() +
"Tox")
303 return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation)
304 + QDir::separator() +
"tox")
317 return qApp->applicationDirPath() + QDir::separator();
321 return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)
322 + QDir::separator() +
"AppData" + QDir::separator() +
"Roaming"
323 + QDir::separator() +
"tox")
325 #elif defined(Q_OS_OSX)
326 return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)
327 + QDir::separator() +
"Library" + QDir::separator()
328 +
"Application Support" + QDir::separator() +
"Tox")
336 return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::DataLocation))
349 return qApp->applicationDirPath() + QDir::separator();
353 return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)
354 + QDir::separator() +
"AppData" + QDir::separator() +
"Roaming"
355 + QDir::separator() +
"tox")
357 #elif defined(Q_OS_OSX)
358 return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)
359 + QDir::separator() +
"Library" + QDir::separator()
360 +
"Application Support" + QDir::separator() +
"Tox")
363 return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::CacheLocation))
371 constexpr
static char nodesFileName[] =
"bootstrapNodes.json";
372 return dir.filePath(nodesFileName);
375 #endif // PATHS_VERSION_TCS_COMPLIANT