From 746276edea2cb170effa90fe5d3a7145254ec3a4 Mon Sep 17 00:00:00 2001 From: osx user Date: Tue, 6 Jul 2021 00:00:38 +0300 Subject: [PATCH] Enhance last used directory settings * Use hash based storage for last used directories instead of a key/value for each type * Explicitly declare certain operations as sensitive and follow the "Remember Last Database" setting for those. * Introduce database backup directory location (close #6619) --- src/core/Config.cpp | 14 +++--- src/core/Config.h | 4 -- src/gui/ApplicationSettingsWidget.cpp | 5 +- src/gui/DatabaseOpenWidget.cpp | 3 -- src/gui/DatabaseTabWidget.cpp | 43 ++++++++++------ src/gui/DatabaseWidget.cpp | 4 +- src/gui/EditWidgetIcons.cpp | 12 +++-- src/gui/FileDialog.cpp | 50 +++++++++---------- src/gui/FileDialog.h | 13 ++--- src/gui/entry/EditEntryWidget.cpp | 5 +- src/gui/entry/EntryAttachmentsWidget.cpp | 19 ++----- src/keeshare/SettingsWidgetKeeShare.cpp | 19 ++----- .../group/EditGroupWidgetKeeShare.cpp | 8 +-- 13 files changed, 92 insertions(+), 107 deletions(-) diff --git a/src/core/Config.cpp b/src/core/Config.cpp index 3864953f..58a92c1d 100644 --- a/src/core/Config.cpp +++ b/src/core/Config.cpp @@ -28,7 +28,7 @@ #include #include -#define CONFIG_VERSION 1 +#define CONFIG_VERSION 2 #define QS QStringLiteral enum ConfigType @@ -86,7 +86,6 @@ static const QHash configStrings = { {Config::LastActiveDatabase, {QS("LastActiveDatabase"), Local, {}}}, {Config::LastOpenedDatabases, {QS("LastOpenedDatabases"), Local, {}}}, {Config::LastDir, {QS("LastDir"), Local, QDir::homePath()}}, - {Config::LastAttachmentDir, {QS("LastAttachmentDir"), Local, {}}}, // GUI {Config::GUI_Language, {QS("GUI/Language"), Roaming, QS("system")}}, @@ -182,9 +181,6 @@ static const QHash configStrings = { {Config::KeeShare_Own, {QS("KeeShare/Own"), Roaming, {}}}, {Config::KeeShare_Foreign, {QS("KeeShare/Foreign"), Roaming, {}}}, {Config::KeeShare_Active, {QS("KeeShare/Active"), Roaming, {}}}, - {Config::KeeShare_LastDir, {QS("KeeShare/LastDir"), Local, QDir::homePath()}}, - {Config::KeeShare_LastKeyDir, {QS("KeeShare/LastKeyDir"), Local, QDir::homePath()}}, - {Config::KeeShare_LastShareDir, {QS("KeeShare/LastShareDir"), Local, QDir::homePath()}}, // PasswordGenerator {Config::PasswordGenerator_LowerCase, {QS("PasswordGenerator/LowerCase"), Roaming, true}}, @@ -353,7 +349,13 @@ static const QHash deprecationMap = { {QS("generator/Type"), Config::PasswordGenerator_Type}, {QS("QtErrorMessageShown"), Config::Messages_Qt55CompatibilityWarning}, {QS("GUI/HidePasswords"), Config::Deleted}, - {QS("GUI/DarkTrayIcon"), Config::Deleted}}; + {QS("GUI/DarkTrayIcon"), Config::Deleted}, + + // 2.7.0 + {QS("LastAttachmentDir"), Config::Deleted}, + {QS("KeeShare/LastDir"), Config::Deleted}, + {QS("KeeShare/LastKeyDir"), Config::Deleted}, + {QS("KeeShare/LastShareDir"), Config::Deleted}}; /** * Migrate settings from previous versions. diff --git a/src/core/Config.h b/src/core/Config.h index 34ec01e0..e29179a0 100644 --- a/src/core/Config.h +++ b/src/core/Config.h @@ -68,7 +68,6 @@ public: LastActiveDatabase, LastOpenedDatabases, LastDir, - LastAttachmentDir, GUI_Language, GUI_HideToolbar, @@ -158,9 +157,6 @@ public: KeeShare_Own, KeeShare_Foreign, KeeShare_Active, - KeeShare_LastDir, - KeeShare_LastKeyDir, - KeeShare_LastShareDir, PasswordGenerator_LowerCase, PasswordGenerator_UpperCase, diff --git a/src/gui/ApplicationSettingsWidget.cpp b/src/gui/ApplicationSettingsWidget.cpp index 3015f021..e26163f9 100644 --- a/src/gui/ApplicationSettingsWidget.cpp +++ b/src/gui/ApplicationSettingsWidget.cpp @@ -397,15 +397,15 @@ void ApplicationSettingsWidget::saveSettings() // Security: clear storage if related settings are disabled if (!config()->get(Config::RememberLastDatabases).toBool()) { + config()->remove(Config::LastDir); config()->remove(Config::LastDatabases); config()->remove(Config::LastActiveDatabase); - config()->remove(Config::LastAttachmentDir); } if (!config()->get(Config::RememberLastKeyFiles).toBool()) { + config()->remove(Config::LastDir); config()->remove(Config::LastKeyFiles); config()->remove(Config::LastChallengeResponse); - config()->remove(Config::LastDir); } for (const ExtraPage& page : asConst(m_extraPages)) { @@ -438,7 +438,6 @@ void ApplicationSettingsWidget::resetSettings() // Clear recently used data config()->remove(Config::LastDatabases); config()->remove(Config::LastActiveDatabase); - config()->remove(Config::LastAttachmentDir); config()->remove(Config::LastKeyFiles); config()->remove(Config::LastDir); diff --git a/src/gui/DatabaseOpenWidget.cpp b/src/gui/DatabaseOpenWidget.cpp index 580cb081..13b971f1 100644 --- a/src/gui/DatabaseOpenWidget.cpp +++ b/src/gui/DatabaseOpenWidget.cpp @@ -356,9 +356,6 @@ void DatabaseOpenWidget::reject() void DatabaseOpenWidget::browseKeyFile() { QString filters = QString("%1 (*);;%2 (*.keyx; *.key)").arg(tr("All files"), tr("Key files")); - if (!config()->get(Config::RememberLastKeyFiles).toBool()) { - fileDialog()->setNextForgetDialog(); - } QString filename = fileDialog()->getOpenFileName(this, tr("Select key file"), QString(), filters); if (QFileInfo(filename).canonicalFilePath() == QFileInfo(m_filename).canonicalFilePath()) { diff --git a/src/gui/DatabaseTabWidget.cpp b/src/gui/DatabaseTabWidget.cpp index fee21f73..ce71588c 100644 --- a/src/gui/DatabaseTabWidget.cpp +++ b/src/gui/DatabaseTabWidget.cpp @@ -123,9 +123,10 @@ DatabaseWidget* DatabaseTabWidget::newDatabase() void DatabaseTabWidget::openDatabase() { - QString filter = QString("%1 (*.kdbx);;%2 (*)").arg(tr("KeePass 2 Database"), tr("All files")); - QString fileName = fileDialog()->getOpenFileName(this, tr("Open database"), "", filter); + auto filter = QString("%1 (*.kdbx);;%2 (*)").arg(tr("KeePass 2 Database"), tr("All files")); + auto fileName = fileDialog()->getOpenFileName(this, tr("Open database"), FileDialog::getLastDir("db"), filter); if (!fileName.isEmpty()) { + FileDialog::saveLastDir("db", fileName, true); addDatabaseTab(fileName); } } @@ -211,13 +212,14 @@ void DatabaseTabWidget::addDatabaseTab(DatabaseWidget* dbWidget, bool inBackgrou void DatabaseTabWidget::importCsv() { - QString filter = QString("%1 (*.csv);;%2 (*)").arg(tr("CSV file"), tr("All files")); - QString fileName = fileDialog()->getOpenFileName(this, tr("Select CSV file"), "", filter); - + auto filter = QString("%1 (*.csv);;%2 (*)").arg(tr("CSV file"), tr("All files")); + auto fileName = fileDialog()->getOpenFileName(this, tr("Select CSV file"), FileDialog::getLastDir("csv"), filter); if (fileName.isEmpty()) { return; } + FileDialog::saveLastDir("csv", fileName, true); + auto db = execNewDatabaseWizard(); if (!db) { return; @@ -232,9 +234,11 @@ void DatabaseTabWidget::mergeDatabase() { auto dbWidget = currentDatabaseWidget(); if (dbWidget && !dbWidget->isLocked()) { - QString filter = QString("%1 (*.kdbx);;%2 (*)").arg(tr("KeePass 2 Database"), tr("All files")); - const QString fileName = fileDialog()->getOpenFileName(this, tr("Merge database"), QString(), filter); + auto filter = QString("%1 (*.kdbx);;%2 (*)").arg(tr("KeePass 2 Database"), tr("All files")); + auto fileName = + fileDialog()->getOpenFileName(this, tr("Merge database"), FileDialog::getLastDir("merge"), filter); if (!fileName.isEmpty()) { + FileDialog::saveLastDir("merge", fileName, true); mergeDatabase(fileName); } } @@ -247,13 +251,15 @@ void DatabaseTabWidget::mergeDatabase(const QString& filePath) void DatabaseTabWidget::importKeePass1Database() { - QString filter = QString("%1 (*.kdb);;%2 (*)").arg(tr("KeePass 1 database"), tr("All files")); - QString fileName = fileDialog()->getOpenFileName(this, tr("Open KeePass 1 database"), QString(), filter); - + auto filter = QString("%1 (*.kdb);;%2 (*)").arg(tr("KeePass 1 database"), tr("All files")); + auto fileName = + fileDialog()->getOpenFileName(this, tr("Open KeePass 1 database"), FileDialog::getLastDir("kp1"), filter); if (fileName.isEmpty()) { return; } + FileDialog::saveLastDir("kp1", fileName, true); + auto db = QSharedPointer::create(); auto* dbWidget = new DatabaseWidget(db, this); addDatabaseTab(dbWidget); @@ -262,16 +268,19 @@ void DatabaseTabWidget::importKeePass1Database() void DatabaseTabWidget::importOpVaultDatabase() { + auto defaultDir = FileDialog::getLastDir("opvault"); #ifdef Q_OS_MACOS - QString fileName = fileDialog()->getOpenFileName(this, tr("Open OPVault"), {}, "OPVault (*.opvault)"); + QString fileName = fileDialog()->getOpenFileName(this, tr("Open OPVault"), defaultDir, "OPVault (*.opvault)"); #else - QString fileName = fileDialog()->getExistingDirectory(this, tr("Open OPVault")); + QString fileName = fileDialog()->getExistingDirectory(this, tr("Open OPVault"), defaultDir); #endif if (fileName.isEmpty()) { return; } + FileDialog::saveLastDir("opvault", fileName); + auto db = QSharedPointer::create(); auto* dbWidget = new DatabaseWidget(db, this); addDatabaseTab(dbWidget); @@ -413,12 +422,14 @@ void DatabaseTabWidget::exportToCsv() return; } - const QString fileName = fileDialog()->getSaveFileName( - this, tr("Export database to CSV file"), QString(), tr("CSV file").append(" (*.csv)"), nullptr, nullptr); + auto fileName = fileDialog()->getSaveFileName( + this, tr("Export database to CSV file"), FileDialog::getLastDir("csv"), tr("CSV file").append(" (*.csv)")); if (fileName.isEmpty()) { return; } + FileDialog::saveLastDir("csv", fileName, true); + CsvExporter csvExporter; if (!csvExporter.exportDatabase(fileName, db)) { emit messageGlobal(tr("Writing the CSV file failed.").append("\n").append(csvExporter.errorString()), @@ -439,11 +450,13 @@ void DatabaseTabWidget::exportToHtml() } const QString fileName = fileDialog()->getSaveFileName( - this, tr("Export database to HTML file"), QString(), tr("HTML file").append(" (*.html)"), nullptr, nullptr); + this, tr("Export database to HTML file"), FileDialog::getLastDir("html"), tr("HTML file").append(" (*.html)")); if (fileName.isEmpty()) { return; } + FileDialog::saveLastDir("html", fileName, true); + HtmlExporter htmlExporter; if (!htmlExporter.exportDatabase(fileName, db)) { emit messageGlobal(tr("Writing the HTML file failed.").append("\n").append(htmlExporter.errorString()), diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp index a3a0ec10..58f6f2f8 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -1880,9 +1880,10 @@ bool DatabaseWidget::saveBackup() oldFilePath = QDir::toNativeSeparators(config()->get(Config::LastDir).toString() + "/" + tr("Passwords").append(".kdbx")); } + const QString newFilePath = fileDialog()->getSaveFileName(this, tr("Save database backup"), - oldFilePath, + FileDialog::getLastDir("backup"), tr("KeePass 2 Database").append(" (*.kdbx)"), nullptr, nullptr); @@ -1906,6 +1907,7 @@ bool DatabaseWidget::saveBackup() // Source database is marked as clean when copy is saved, even if source has unsaved changes m_db->markAsModified(); } + FileDialog::saveLastDir("backup", newFilePath, true); return true; } diff --git a/src/gui/EditWidgetIcons.cpp b/src/gui/EditWidgetIcons.cpp index bbac88ac..3158a6c9 100644 --- a/src/gui/EditWidgetIcons.cpp +++ b/src/gui/EditWidgetIcons.cpp @@ -19,12 +19,11 @@ #include "EditWidgetIcons.h" #include "ui_EditWidgetIcons.h" -#include - #include "core/Config.h" #include "core/Database.h" #include "core/Metadata.h" #include "core/Tools.h" +#include "gui/FileDialog.h" #include "gui/IconModels.h" #ifdef WITH_XC_NETWORKING #include "gui/IconDownloader.h" @@ -232,9 +231,9 @@ void EditWidgetIcons::addCustomIconFromFile() return; } - QString filter = QString("%1 (%2);;%3 (*)").arg(tr("Images"), Tools::imageReaderFilter(), tr("All files")); - - auto filenames = QFileDialog::getOpenFileNames(this, tr("Select Image(s)"), "", filter); + auto filter = QString("%1 (%2);;%3 (*)").arg(tr("Images"), Tools::imageReaderFilter(), tr("All files")); + auto filenames = + fileDialog()->getOpenFileNames(this, tr("Select Image(s)"), FileDialog::getLastDir("icons"), filter); if (!filenames.empty()) { QStringList errornames; int numexisting = 0; @@ -250,6 +249,9 @@ void EditWidgetIcons::addCustomIconFromFile() } } + // Save last used directory using first image path + FileDialog::saveLastDir("icons", filenames[0]); + int numloaded = filenames.size() - errornames.size() - numexisting; QString msg; diff --git a/src/gui/FileDialog.cpp b/src/gui/FileDialog.cpp index 05b1b044..0d46898f 100644 --- a/src/gui/FileDialog.cpp +++ b/src/gui/FileDialog.cpp @@ -21,6 +21,10 @@ FileDialog* FileDialog::m_instance(nullptr); +FileDialog::FileDialog() +{ +} + QString FileDialog::getOpenFileName(QWidget* parent, const QString& caption, const QString& dir, @@ -43,7 +47,6 @@ QString FileDialog::getOpenFileName(QWidget* parent, parent->activateWindow(); } #endif - saveLastDir(result); return result; } } @@ -73,9 +76,6 @@ QStringList FileDialog::getOpenFileNames(QWidget* parent, parent->activateWindow(); } #endif - if (!results.isEmpty()) { - saveLastDir(results[0]); - } return results; } } @@ -102,7 +102,6 @@ QString FileDialog::getSaveFileName(QWidget* parent, parent->activateWindow(); } #endif - saveLastDir(result); return result; } } @@ -127,7 +126,6 @@ QString FileDialog::getExistingDirectory(QWidget* parent, parent->activateWindow(); } #endif - saveLastDir(result); return result; } } @@ -137,32 +135,32 @@ void FileDialog::setNextFileName(const QString& fileName) m_nextFileName = fileName; } -void FileDialog::setNextFileNames(const QStringList& fileNames) +void FileDialog::setNextDirectory(const QString& path) { - m_nextFileNames = fileNames; + m_nextDirName = path; } -void FileDialog::setNextDirName(const QString& dirName) +void FileDialog::saveLastDir(const QString& role, const QString& path, bool sensitive) { - m_nextDirName = dirName; -} - -void FileDialog::setNextForgetDialog() -{ - m_forgetLastDir = true; -} - -FileDialog::FileDialog() -{ -} - -void FileDialog::saveLastDir(const QString& dir) -{ - if (!dir.isEmpty() && !m_forgetLastDir) { - config()->set(Config::LastDir, QFileInfo(dir).absolutePath()); + auto lastDirs = config()->get(Config::LastDir).toHash(); + if (sensitive && !config()->get(Config::RememberLastDatabases).toBool()) { + // Ensure this role is forgotten + lastDirs.remove(role); + } else { + auto pathInfo = QFileInfo(path); + if (!pathInfo.exists()) { + lastDirs.remove(role); + } else { + lastDirs.insert(role, pathInfo.absolutePath()); + } } + config()->set(Config::LastDir, lastDirs); +} - m_forgetLastDir = false; +QString FileDialog::getLastDir(const QString& role, const QString& defaultDir) +{ + auto lastDirs = config()->get(Config::LastDir).toHash(); + return lastDirs.value(role, defaultDir).toString(); } FileDialog* FileDialog::instance() diff --git a/src/gui/FileDialog.h b/src/gui/FileDialog.h index 4221a620..fa36a7d3 100644 --- a/src/gui/FileDialog.h +++ b/src/gui/FileDialog.h @@ -49,14 +49,14 @@ public: const QString& dir = QString(), const QFileDialog::Options options = QFileDialog::ShowDirsOnly); - void setNextForgetDialog(); /** - * Sets the result of the next get* method call. - * Use only for testing. + * Bypasses the selection process and returns the provided filename/directory immediately (for testing) */ void setNextFileName(const QString& fileName); - void setNextFileNames(const QStringList& fileNames); - void setNextDirName(const QString& dirName); + void setNextDirectory(const QString& path); + + static void saveLastDir(const QString& role, const QString& path, bool sensitive = false); + static QString getLastDir(const QString& role, const QString& defaultDir = QDir::homePath()); static FileDialog* instance(); @@ -65,9 +65,6 @@ private: QString m_nextFileName; QStringList m_nextFileNames; QString m_nextDirName; - bool m_forgetLastDir = false; - - void saveLastDir(const QString&); static FileDialog* m_instance; diff --git a/src/gui/entry/EditEntryWidget.cpp b/src/gui/entry/EditEntryWidget.cpp index cd73090a..5687351b 100644 --- a/src/gui/entry/EditEntryWidget.cpp +++ b/src/gui/entry/EditEntryWidget.cpp @@ -26,7 +26,6 @@ #include #include -#include #include #include @@ -50,6 +49,7 @@ #include "gui/Clipboard.h" #include "gui/EditWidgetIcons.h" #include "gui/EditWidgetProperties.h" +#include "gui/FileDialog.h" #include "gui/Font.h" #include "gui/Icons.h" #include "gui/MessageBox.h" @@ -677,8 +677,9 @@ void EditEntryWidget::toKeeAgentSettings(KeeAgentSettings& settings) const void EditEntryWidget::browsePrivateKey() { - QString fileName = QFileDialog::getOpenFileName(this, tr("Select private key"), ""); + auto fileName = fileDialog()->getOpenFileName(this, tr("Select private key"), FileDialog::getLastDir("sshagent")); if (!fileName.isEmpty()) { + FileDialog::saveLastDir("sshagent", fileName); m_sshAgentUi->externalFileEdit->setText(fileName); m_sshAgentUi->externalFileRadioButton->setChecked(true); updateSSHAgentKeyInfo(); diff --git a/src/gui/entry/EntryAttachmentsWidget.cpp b/src/gui/entry/EntryAttachmentsWidget.cpp index f57f8320..5d1e9240 100644 --- a/src/gui/entry/EntryAttachmentsWidget.cpp +++ b/src/gui/entry/EntryAttachmentsWidget.cpp @@ -133,12 +133,7 @@ void EntryAttachmentsWidget::insertAttachments() return; } - QString defaultDirPath = config()->get(Config::LastAttachmentDir).toString(); - const bool dirExists = !defaultDirPath.isEmpty() && QDir(defaultDirPath).exists(); - if (!dirExists) { - defaultDirPath = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation).first(); - } - + QString defaultDirPath = FileDialog::getLastDir("attachments"); const auto filenames = fileDialog()->getOpenFileNames(this, tr("Select files"), defaultDirPath); if (filenames.isEmpty()) { return; @@ -147,7 +142,8 @@ void EntryAttachmentsWidget::insertAttachments() if (confirmedFileNames.isEmpty()) { return; } - config()->set(Config::LastAttachmentDir, QFileInfo(filenames.first()).absolutePath()); + // Save path to first filename + FileDialog::saveLastDir("attachments", filenames[0]); QString errorMessage; if (!insertAttachments(confirmedFileNames, errorMessage)) { errorOccurred(errorMessage); @@ -195,12 +191,7 @@ void EntryAttachmentsWidget::saveSelectedAttachments() return; } - QString defaultDirPath = config()->get(Config::LastAttachmentDir).toString(); - const bool dirExists = !defaultDirPath.isEmpty() && QDir(defaultDirPath).exists(); - if (!dirExists) { - defaultDirPath = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); - } - + QString defaultDirPath = FileDialog::getLastDir("attachments"); const QString saveDirPath = fileDialog()->getExistingDirectory(this, tr("Save attachments"), defaultDirPath); if (saveDirPath.isEmpty()) { return; @@ -213,7 +204,7 @@ void EntryAttachmentsWidget::saveSelectedAttachments() return; } } - config()->set(Config::LastAttachmentDir, QFileInfo(saveDir.absolutePath()).absolutePath()); + FileDialog::saveLastDir("attachments", saveDirPath); QStringList errors; for (const QModelIndex& index : indexes) { diff --git a/src/keeshare/SettingsWidgetKeeShare.cpp b/src/keeshare/SettingsWidgetKeeShare.cpp index ccff9544..1dcb4ad0 100644 --- a/src/keeshare/SettingsWidgetKeeShare.cpp +++ b/src/keeshare/SettingsWidgetKeeShare.cpp @@ -140,15 +140,10 @@ void SettingsWidgetKeeShare::generateCertificate() void SettingsWidgetKeeShare::importCertificate() { - QString defaultDirPath = config()->get(Config::KeeShare_LastKeyDir).toString(); - const bool dirExists = !defaultDirPath.isEmpty() && QDir(defaultDirPath).exists(); - if (!dirExists) { - defaultDirPath = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation).first(); - } + auto defaultDirPath = FileDialog::getLastDir("keeshare_key"); const auto filetype = tr("key.share", "Filetype for KeeShare key"); const auto filters = QString("%1 (*." + filetype + ");;%2 (*)").arg(tr("KeeShare key file"), tr("All files")); - QString filename = fileDialog()->getOpenFileName( - this, tr("Select path"), defaultDirPath, filters, nullptr, QFileDialog::Options(0)); + QString filename = fileDialog()->getOpenFileName(this, tr("Select path"), defaultDirPath, filters); if (filename.isEmpty()) { return; } @@ -157,7 +152,7 @@ void SettingsWidgetKeeShare::importCertificate() QTextStream stream(&file); m_own = KeeShareSettings::Own::deserialize(stream.readAll()); file.close(); - config()->set(Config::KeeShare_LastKeyDir, QFileInfo(filename).absolutePath()); + FileDialog::saveLastDir("keeshare_key", filename); updateOwnCertificate(); } @@ -176,11 +171,7 @@ void SettingsWidgetKeeShare::exportCertificate() return; } } - QString defaultDirPath = config()->get(Config::KeeShare_LastKeyDir).toString(); - const bool dirExists = !defaultDirPath.isEmpty() && QDir(defaultDirPath).exists(); - if (!dirExists) { - defaultDirPath = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation).first(); - } + auto defaultDirPath = FileDialog::getLastDir("keeshare_key"); const auto filetype = tr("key.share", "Filetype for KeeShare key"); const auto filters = QString("%1 (*." + filetype + ");;%2 (*)").arg(tr("KeeShare key file"), tr("All files")); QString filename = QString("%1.%2").arg(m_own.certificate.signer).arg(filetype); @@ -194,7 +185,7 @@ void SettingsWidgetKeeShare::exportCertificate() stream << KeeShareSettings::Own::serialize(m_own); stream.flush(); file.close(); - config()->set(Config::KeeShare_LastKeyDir, QFileInfo(filename).absolutePath()); + FileDialog::saveLastDir("keeshare_key", filename); } void SettingsWidgetKeeShare::trustSelectedCertificates() diff --git a/src/keeshare/group/EditGroupWidgetKeeShare.cpp b/src/keeshare/group/EditGroupWidgetKeeShare.cpp index 70a24ba2..6067ec41 100644 --- a/src/keeshare/group/EditGroupWidgetKeeShare.cpp +++ b/src/keeshare/group/EditGroupWidgetKeeShare.cpp @@ -224,11 +224,6 @@ void EditGroupWidgetKeeShare::launchPathSelectionDialog() if (!m_temporaryGroup) { return; } - QString defaultDirPath = config()->get(Config::KeeShare_LastShareDir).toString(); - const bool dirExists = !defaultDirPath.isEmpty() && QDir(defaultDirPath).exists(); - if (!dirExists) { - defaultDirPath = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation).first(); - } auto reference = KeeShare::referenceOf(m_temporaryGroup); QString defaultFiletype = ""; auto supportedExtensions = QStringList(); @@ -252,6 +247,7 @@ void EditGroupWidgetKeeShare::launchPathSelectionDialog() #endif const auto filters = knownFilters.join(";;"); + auto defaultDirPath = FileDialog::getLastDir("keeshare"); auto filename = reference.path; if (filename.isEmpty()) { filename = m_temporaryGroup->name(); @@ -285,7 +281,7 @@ void EditGroupWidgetKeeShare::launchPathSelectionDialog() m_ui->pathEdit->setText(filename); selectPath(); - config()->set(Config::KeeShare_LastShareDir, QFileInfo(filename).absolutePath()); + FileDialog::saveLastDir("keeshare", filename); updateSharingState(); }