From 862412a40afa2d48e5764d303679b8371f661063 Mon Sep 17 00:00:00 2001 From: sgourdas Date: Fri, 23 Aug 2024 23:17:38 +0300 Subject: [PATCH] Use data directory in portable mode --- src/kiwixapp.cpp | 4 ++++ src/settingsmanager.cpp | 27 +++++++++++++++++++++++++-- src/settingsmanager.h | 2 ++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/kiwixapp.cpp b/src/kiwixapp.cpp index 61d76d40d..58fe0e556 100644 --- a/src/kiwixapp.cpp +++ b/src/kiwixapp.cpp @@ -143,6 +143,10 @@ void KiwixApp::newTab() QString KiwixApp::findLibraryDirectory() { auto currentDataDir = QString::fromStdString(kiwix::removeLastPathElement(kiwix::getExecutablePath())); + + if (isPortableMode()) + return currentDataDir + QDir::separator() + "data"; + // Check for library.xml in the same directory as the executable. auto libraryFile = QFileInfo(currentDataDir, "library.xml"); if (libraryFile.exists()) diff --git a/src/settingsmanager.cpp b/src/settingsmanager.cpp index bb5c46a70..4280c7f70 100644 --- a/src/settingsmanager.cpp +++ b/src/settingsmanager.cpp @@ -9,6 +9,11 @@ QString getDataDirectory() { + if (isPortableMode()) { + auto currentDataDir = QString::fromStdString(kiwix::removeLastPathElement(kiwix::getExecutablePath())); + return currentDataDir + QDir::separator() + "data"; + } + QString dataDir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); if (!dataDir.isEmpty() && QDir().mkpath(dataDir)) @@ -17,9 +22,26 @@ QString getDataDirectory() return QString::fromStdString(kiwix::getCurrentDirectory()); } +bool isPortableMode() +{ + auto currentDataDir = QString::fromStdString(kiwix::removeLastPathElement(kiwix::getExecutablePath())); + auto portableFile = QFileInfo(currentDataDir, ".portable"); + + return portableFile.exists(); +} + +QString SettingsManager::getSettingsConfPath() +{ + QString confDirectory = isPortableMode() ? + getDataDirectory() : + QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation); + + return confDirectory + QDir::separator() + "Kiwix-desktop.conf"; +} + SettingsManager::SettingsManager(QObject *parent) : QObject(parent), - m_settings("Kiwix", "Kiwix-desktop"), + m_settings(getSettingsConfPath(), QSettings::NativeFormat), m_view(nullptr) { initSettings(); @@ -162,7 +184,8 @@ void SettingsManager::initSettings() { m_kiwixServerPort = m_settings.value("localKiwixServer/port", 8080).toInt(); m_zoomFactor = m_settings.value("view/zoomFactor", 1).toDouble(); - m_downloadDir = m_settings.value("download/dir", getDataDirectory()).toString(); + QString dataDir = getDataDirectory(); + m_downloadDir = isPortableMode() ? dataDir : m_settings.value("download/dir", dataDir).toString(); m_kiwixServerIpAddress = m_settings.value("localKiwixServer/ipAddress", QString("0.0.0.0")).toString(); m_monitorDir = m_settings.value("monitor/dir", QString("")).toString(); m_moveToTrash = m_settings.value("moveToTrash", true).toBool(); diff --git a/src/settingsmanager.h b/src/settingsmanager.h index 9f1a1351a..0bdb39a38 100644 --- a/src/settingsmanager.h +++ b/src/settingsmanager.h @@ -17,6 +17,7 @@ class SettingsManager : public QObject explicit SettingsManager(QObject *parent = nullptr); virtual ~SettingsManager() {}; + QString getSettingsConfPath(); SettingsView* getView(); void setSettings(const QString &key, const QVariant &value); void deleteSettings(const QString &key); @@ -78,4 +79,5 @@ public slots: }; QString getDataDirectory(); +bool isPortableMode(); #endif // SETTINGSMANAGER_H