void DatabaseOpenWidget::openDatabase() { KeePass2Reader reader; CompositeKey masterKey = databaseKey(); if (masterKey.isEmpty()) { return; } QFile file(m_filename); if (!file.open(QIODevice::ReadOnly)) { // TODO: error message return; } if (m_db) { delete m_db; } QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); m_db = reader.readDatabase(&file, masterKey); QApplication::restoreOverrideCursor(); if (m_db) { Q_EMIT editFinished(true); // this is a c++11 equivalent foreach construct // if c++11 is not available another iteration loop style is needed! for (auto widget : qApp->topLevelWidgets()) { if(widget->inherits("QMainWindow")) static_cast<MainWindow*>(widget)->configuredMinimizeWindow(); } } else { MessageBox::warning(this, tr("Error"), tr("Unable to open the database.").append("\n") .append(reader.errorString())); m_ui->editPassword->clear(); } }
void DatabaseOpenWidget::openDatabase() { KeePass2Reader reader; CompositeKey masterKey = databaseKey(); if (masterKey.isEmpty()) { return; } QFile file(m_filename); if (!file.open(QIODevice::ReadOnly)) { // TODO: error message return; } if (m_db) { delete m_db; } QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); m_db = reader.readDatabase(&file, masterKey); QApplication::restoreOverrideCursor(); if (m_db) { Q_EMIT editFinished(true); } else { MessageBox::warning(this, tr("Error"), tr("Unable to open the database.").append("\n") .append(reader.errorString())); m_ui->editPassword->clear(); } }
/** * Open the database from a file. * Unless `readOnly` is set to false, the database will be opened in * read-write mode and fall back to read-only if that is not possible. * * @param filePath path to the file * @param key composite key for unlocking the database * @param readOnly open in read-only mode * @param error error message in case of failure * @return true on success */ bool Database::open(const QString& filePath, QSharedPointer<const CompositeKey> key, QString* error, bool readOnly) { if (isInitialized() && m_modified) { emit databaseDiscarded(); } setEmitModified(false); QFile dbFile(filePath); if (!dbFile.exists()) { if (error) { *error = tr("File %1 does not exist.").arg(filePath); } return false; } if (!readOnly && !dbFile.open(QIODevice::ReadWrite)) { readOnly = true; } if (!dbFile.isOpen() && !dbFile.open(QIODevice::ReadOnly)) { if (error) { *error = tr("Unable to open file %1.").arg(filePath); } return false; } KeePass2Reader reader; bool ok = reader.readDatabase(&dbFile, std::move(key), this); if (reader.hasError()) { if (error) { *error = tr("Error while reading the database: %1").arg(reader.errorString()); } return false; } setReadOnly(readOnly); setFilePath(filePath); dbFile.close(); setInitialized(ok); markAsClean(); setEmitModified(true); return ok; }
void DatabaseOpenWidget::openDatabase() { KeePass2Reader reader; CompositeKey masterKey = databaseKey(); if (m_db) { delete m_db; } QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); m_db = reader.readDatabase(m_filename, masterKey); QApplication::restoreOverrideCursor(); if (m_db) { // signal switched focus to opened database view Q_EMIT editFinished(true); } else { MessageBox::warning(this, tr("Error"), tr("Unable to open the database.").append("\n") .append(reader.errorString())); m_ui->editPassword->clear(); } }