From 28a3824d2d594429b38ca441ff0a718b6ec7092a Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Thu, 21 Mar 2019 17:36:57 -0400 Subject: [PATCH] Use existing database open function on startup * Fix #2828 --- src/gui/DatabaseTabWidget.cpp | 13 +++++++++---- src/gui/DatabaseTabWidget.h | 5 ++++- src/gui/MainWindow.cpp | 23 ++--------------------- src/gui/MainWindow.h | 2 +- 4 files changed, 16 insertions(+), 27 deletions(-) diff --git a/src/gui/DatabaseTabWidget.cpp b/src/gui/DatabaseTabWidget.cpp index c908a82ec..7693c9016 100644 --- a/src/gui/DatabaseTabWidget.cpp +++ b/src/gui/DatabaseTabWidget.cpp @@ -137,10 +137,15 @@ void DatabaseTabWidget::openDatabase() * database has been opened already. * * @param filePath database file path - * @param password optional, password to unlock database * @param inBackground optional, don't focus tab after opening + * @param password optional, password to unlock database + * @param keyfile optional, path to keyfile to unlock database + * */ -void DatabaseTabWidget::addDatabaseTab(const QString& filePath, bool inBackground, const QString& password) +void DatabaseTabWidget::addDatabaseTab(const QString& filePath, + bool inBackground, + const QString& password, + const QString& keyfile) { QFileInfo fileInfo(filePath); QString canonicalFilePath = fileInfo.canonicalFilePath(); @@ -154,7 +159,7 @@ void DatabaseTabWidget::addDatabaseTab(const QString& filePath, bool inBackgroun Q_ASSERT(dbWidget); if (dbWidget && dbWidget->database()->filePath() == canonicalFilePath) { if (!password.isEmpty()) { - dbWidget->performUnlockDatabase(password); + dbWidget->performUnlockDatabase(password, keyfile); } if (!inBackground) { // switch to existing tab if file is already open @@ -167,7 +172,7 @@ void DatabaseTabWidget::addDatabaseTab(const QString& filePath, bool inBackgroun auto* dbWidget = new DatabaseWidget(QSharedPointer::create(filePath), this); addDatabaseTab(dbWidget, inBackground); if (!password.isEmpty()) { - dbWidget->performUnlockDatabase(password); + dbWidget->performUnlockDatabase(password, keyfile); } updateLastDatabases(filePath); } diff --git a/src/gui/DatabaseTabWidget.h b/src/gui/DatabaseTabWidget.h index eda28839a..bafbfa37a 100644 --- a/src/gui/DatabaseTabWidget.h +++ b/src/gui/DatabaseTabWidget.h @@ -48,7 +48,10 @@ public: bool hasLockableDatabases() const; public slots: - void addDatabaseTab(const QString& filePath, bool inBackground = false, const QString& password = {}); + void addDatabaseTab(const QString& filePath, + bool inBackground = false, + const QString& password = {}, + const QString& keyfile = {}); void addDatabaseTab(DatabaseWidget* dbWidget, bool inBackground = false); bool closeDatabaseTab(int index); bool closeDatabaseTab(DatabaseWidget* dbWidget); diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index e91f35ed9..03fa54945 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -496,28 +496,9 @@ void MainWindow::clearLastDatabases() } } -void MainWindow::openDatabase(const QString& filePath, const QString& pw, const QString& keyFile) +void MainWindow::openDatabase(const QString& filePath, const QString& password, const QString& keyfile) { - if (pw.isEmpty() && keyFile.isEmpty()) { - m_ui->tabWidget->addDatabaseTab(filePath); - return; - } - - auto db = QSharedPointer::create(); - auto key = QSharedPointer::create(); - if (!pw.isEmpty()) { - key->addKey(QSharedPointer::create(pw)); - } - if (!keyFile.isEmpty()) { - auto fileKey = QSharedPointer::create(); - fileKey->load(keyFile); - key->addKey(fileKey); - } - if (db->open(filePath, key, nullptr, false)) { - auto* dbWidget = new DatabaseWidget(db, this); - m_ui->tabWidget->addDatabaseTab(dbWidget); - dbWidget->switchToMainView(true); - } + m_ui->tabWidget->addDatabaseTab(filePath, false, password, keyfile); } void MainWindow::setMenuActionState(DatabaseWidget::Mode mode) diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h index cd7b1a39b..14083da70 100644 --- a/src/gui/MainWindow.h +++ b/src/gui/MainWindow.h @@ -56,7 +56,7 @@ public: }; public slots: - void openDatabase(const QString& filePath, const QString& pw = {}, const QString& keyFile = {}); + void openDatabase(const QString& filePath, const QString& password = {}, const QString& keyfile = {}); void appExit(); void displayGlobalMessage(const QString& text, MessageWidget::MessageType type,