diff --git a/src/browser/NativeMessageInstaller.cpp b/src/browser/NativeMessageInstaller.cpp index 7409989ab7..92b5db2913 100644 --- a/src/browser/NativeMessageInstaller.cpp +++ b/src/browser/NativeMessageInstaller.cpp @@ -19,6 +19,7 @@ #include "NativeMessageInstaller.h" #include "BrowserSettings.h" #include "config-keepassx.h" +#include "core/Config.h" #include #include @@ -209,8 +210,8 @@ QString NativeMessageInstaller::getNativeMessagePath(SupportedBrowsers browser) QString basePath; #if defined(Q_OS_WIN) // If portable settings file exists save the JSON scripts to the application folder - if (QFile::exists(QCoreApplication::applicationDirPath() + QStringLiteral("/keepassxc.ini"))) { - basePath = QCoreApplication::applicationDirPath(); + if (Config::isPortable()) { + basePath = Config::portableConfigDir(); } else { basePath = QStandardPaths::writableLocation(QStandardPaths::DataLocation); } diff --git a/src/core/Config.cpp b/src/core/Config.cpp index b446ace1f2..c8a8f769b1 100644 --- a/src/core/Config.cpp +++ b/src/core/Config.cpp @@ -512,20 +512,8 @@ void Config::init(const QString& configFileName, const QString& localConfigFileN QPair Config::defaultConfigFiles() { // Check if we are running in portable mode, if so store the config files local to the app -#ifdef Q_OS_WIN - // Enable QFileInfo::isWritable check on Windows - extern Q_CORE_EXPORT int qt_ntfs_permission_lookup; - qt_ntfs_permission_lookup++; -#endif - auto portablePath = QCoreApplication::applicationDirPath().append("/%1"); - auto portableFile = portablePath.arg(".portable"); - bool isPortable = QFile::exists(portableFile) && QFileInfo(portableFile).isWritable(); -#ifdef Q_OS_WIN - qt_ntfs_permission_lookup--; -#endif - - if (isPortable) { - return {portablePath.arg("config/keepassxc.ini"), portablePath.arg("config/keepassxc_local.ini")}; + if (isPortable()) { + return {portableConfigDir().append("/keepassxc.ini"), portableConfigDir().append("/keepassxc_local.ini")}; } QString configPath; @@ -602,6 +590,27 @@ void Config::createTempFileInstance() tmpFile->setParent(m_instance); } +bool Config::isPortable() +{ +#ifdef Q_OS_WIN + // Enable QFileInfo::isWritable check on Windows + extern Q_CORE_EXPORT int qt_ntfs_permission_lookup; + qt_ntfs_permission_lookup++; +#endif + auto portablePath = QCoreApplication::applicationDirPath().append("/%1"); + auto portableFile = portablePath.arg(".portable"); + auto isPortable = QFile::exists(portableFile) && QFileInfo(portableFile).isWritable(); +#ifdef Q_OS_WIN + qt_ntfs_permission_lookup--; +#endif + return isPortable; +} + +QString Config::portableConfigDir() +{ + return QCoreApplication::applicationDirPath().append("/config"); +} + QList Config::getShortcuts() const { m_settings->beginGroup("Shortcuts"); diff --git a/src/core/Config.h b/src/core/Config.h index 8da4c0f378..a60ce96405 100644 --- a/src/core/Config.h +++ b/src/core/Config.h @@ -225,6 +225,8 @@ class Config : public QObject static Config* instance(); static void createConfigFromFile(const QString& configFileName, const QString& localConfigFileName = {}); static void createTempFileInstance(); + static bool isPortable(); + static QString portableConfigDir(); signals: void changed(ConfigKey key);