mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2025-02-22 15:39:57 -05:00
Change conf path XDG_CACHE_HOME to XDG_STATE_HOME (#9755)
Keepassxc saves application state at XDG_CACHE_HOME which can be cleared on some systems periodicly. This is not desireable as app state like window size is not consistent when openning the app. To avoid this this commit is switching the path to XDG_STATE_HOME which is more fitting based on the freedesktop basedir spec (https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html), this will allow to prevent state file deletion as well. Resolves #9738
This commit is contained in:
parent
cd7a53abbb
commit
509e218676
@ -59,7 +59,7 @@ image::linux_store.png[]
|
||||
|
||||
The Snap and Flatpak options are sandboxed applications (more secure). The Native option is installed with the operating system files. Read more about the limitations of these options here: https://keepassxc.org/docs/#faq-appsnap-yubikey[KeePassXC Snap FAQ]
|
||||
|
||||
NOTE: KeePassXC stores a configuration file in `~/.cache` to remember window position, recent files, and other local settings. If you mount this folder to a tmpdisk you will lose settings after reboot.
|
||||
NOTE: KeePassXC stores a configuration file in `~/.local/state` to remember window position, recent files, and other local settings. If you mount this folder to a tmpdisk you will lose settings after reboot.
|
||||
|
||||
=== macOS
|
||||
To install the KeePassXC app on macOS, double click on the downloaded DMG file and use the click and drag option as shown:
|
||||
|
@ -472,6 +472,28 @@ void Config::init(const QString& configFileName, const QString& localConfigFileN
|
||||
QDir().rmdir(QFileInfo(localConfigFileName).absolutePath());
|
||||
}
|
||||
|
||||
#if defined(Q_OS_LINUX)
|
||||
// Upgrade from previous KeePassXC version which stores its config
|
||||
// in ~/.cache on Linux instead of ~/.local/state.
|
||||
// Move file to correct location before continuing.
|
||||
if (!QFile::exists(localConfigFileName)) {
|
||||
QString oldLocalConfigPath =
|
||||
QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + "/keepassxc";
|
||||
QString suffix;
|
||||
#ifdef QT_DEBUG
|
||||
suffix = "_debug";
|
||||
#endif
|
||||
oldLocalConfigPath += QString("/keepassxc%1.ini").arg(suffix);
|
||||
oldLocalConfigPath = QDir::toNativeSeparators(oldLocalConfigPath);
|
||||
if (QFile::exists(oldLocalConfigPath)) {
|
||||
QDir().mkpath(QFileInfo(localConfigFileName).absolutePath());
|
||||
QFile::copy(oldLocalConfigPath, localConfigFileName);
|
||||
QFile::remove(oldLocalConfigPath);
|
||||
QDir().rmdir(QFileInfo(oldLocalConfigPath).absolutePath());
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
m_settings.reset(new QSettings(configFileName, QSettings::IniFormat));
|
||||
if (!localConfigFileName.isEmpty() && configFileName != localConfigFileName) {
|
||||
m_localSettings.reset(new QSettings(localConfigFileName, QSettings::IniFormat));
|
||||
@ -512,7 +534,16 @@ QPair<QString, QString> Config::defaultConfigFiles()
|
||||
#else
|
||||
// On case-sensitive Operating Systems, force use of lowercase app directories
|
||||
configPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + "/keepassxc";
|
||||
localConfigPath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + "/keepassxc";
|
||||
// Qt does not support XDG_STATE_HOME yet, change this once XDG_STATE_HOME is added
|
||||
QString xdgStateHome = QFile::decodeName(qgetenv("XDG_STATE_HOME"));
|
||||
if (!xdgStateHome.startsWith(u'/')) {
|
||||
xdgStateHome.clear(); // spec says relative paths should be ignored
|
||||
}
|
||||
if (xdgStateHome.isEmpty()) {
|
||||
xdgStateHome = QDir::homePath() + "/.local/state";
|
||||
}
|
||||
|
||||
localConfigPath = xdgStateHome + "/keepassxc";
|
||||
#endif
|
||||
|
||||
QString suffix;
|
||||
|
Loading…
x
Reference in New Issue
Block a user