Skip to content
This repository has been archived by the owner on Feb 12, 2023. It is now read-only.

Commit

Permalink
fix: Replace hardcored roaming path on QStandartPath
Browse files Browse the repository at this point in the history
Fix #4436

In most system user can change AppData location, so hardcored path can
lead to the wrong directory.
  • Loading branch information
Diadlo committed Jun 4, 2017
1 parent 099dd30 commit f616ff3
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 13 deletions.
59 changes: 46 additions & 13 deletions src/persistence/settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -715,21 +715,35 @@ QString Settings::getSettingsDirPath() const
if (makeToxPortable)
return qApp->applicationDirPath() + QDir::separator();

QString path;
#if (QT_VERSION < QT_VERSION_CHECK(5, 4, 0))
// workaround for https://bugreports.qt-project.org/browse/QTBUG-38845
#ifdef Q_OS_WIN
# ifdef Q_OS_WIN
return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)
+ QDir::separator() + "AppData" + QDir::separator() + "Roaming"
+ QDir::separator() + "tox")
+ QDir::separator();
#elif defined(Q_OS_OSX)
# elif defined(Q_OS_OSX)
return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)
+ QDir::separator() + "Library" + QDir::separator()
+ "Application Support" + QDir::separator() + "Tox")
+ QDir::separator();
#else
# else
return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation)
+ QDir::separator() + "tox")
+ QDir::separator();
# endif
#else
# ifdef Q_OS_WIN
return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)
+ QDir::separator() + "tox") + QDir::separator();
# elif defined(Q_OS_OSX)
return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)
+ QDir::separator() + "Tox") + QDir::separator();
# else
return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation)
+ QDir::separator() + "tox") + QDir::separator();
# endif
#endif
}

Expand All @@ -743,25 +757,31 @@ QString Settings::getAppDataDirPath() const
if (makeToxPortable)
return qApp->applicationDirPath() + QDir::separator();

#if (QT_VERSION < QT_VERSION_CHECK(5, 4, 0))
// workaround for https://bugreports.qt-project.org/browse/QTBUG-38845
#ifdef Q_OS_WIN
# ifdef Q_OS_WIN
return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)
+ QDir::separator() + "AppData" + QDir::separator() + "Roaming"
+ QDir::separator() + "tox")
+ QDir::separator();
#elif defined(Q_OS_OSX)
# elif defined(Q_OS_OSX)
return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)
+ QDir::separator() + "Library" + QDir::separator()
+ "Application Support" + QDir::separator() + "Tox")
+ QDir::separator();
#else
/*
* TODO: Change QStandardPaths::DataLocation to AppDataLocation when upgrate Qt to 5.4+
* For now we need support Qt 5.3, so we use deprecated DataLocation
* BTW, it's not a big deal since for linux AppDataLocation and DataLocation are equal
*/
# else
return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::DataLocation))
+ QDir::separator();
# endif
#else
# if defined(Q_OS_OSX)
# elif defined(Q_OS_OSX)
return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)
+ QDir::separator() + "Tox") + QDir::separator();
# else
return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)
+ QDir::separator() + "tox") + QDir::separator();
# endif
#endif
}

Expand All @@ -775,20 +795,33 @@ QString Settings::getAppCacheDirPath() const
if (makeToxPortable)
return qApp->applicationDirPath() + QDir::separator();

#if (QT_VERSION < QT_VERSION_CHECK(5, 4, 0))
// workaround for https://bugreports.qt-project.org/browse/QTBUG-38845
#ifdef Q_OS_WIN
# ifdef Q_OS_WIN
return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)
+ QDir::separator() + "AppData" + QDir::separator() + "Roaming"
+ QDir::separator() + "tox")
+ QDir::separator();
#elif defined(Q_OS_OSX)
# elif defined(Q_OS_OSX)
return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)
+ QDir::separator() + "Library" + QDir::separator()
+ "Application Support" + QDir::separator() + "Tox")
+ QDir::separator();
# else
return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::CacheLocation))
+ QDir::separator();
# endif
#else
# ifdef Q_OS_WIN
return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)
+ QDir::separator() + "tox") + QDir::separator();
# elif defined(Q_OS_OSX)
return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)
+ QDir::separator() + "Tox") + QDir::separator();
# else
return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::CacheLocation))
+ QDir::separator();
# endif
#endif
}

Expand Down
6 changes: 6 additions & 0 deletions updater/settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -108,9 +108,15 @@ QString Settings::getSettingsDirPath() const
}

if (isOld) {
#if (QT_VERSION < QT_VERSION_CHECK(5, 4, 0))
return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)
+ QDir::separator() + "AppData" + QDir::separator() + "Roaming"
+ QDir::separator() + "tox" + QDir::separator());
#else
return QDir::cleanPath(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)
+ QDir::separator() + "tox" + QDir::separator());
#endif

} else {
QString pathStr = QString::fromStdWString(path);
pathStr.replace("\\", "/");
Expand Down

0 comments on commit f616ff3

Please sign in to comment.