Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/keepassxreboot/keepassxc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/DatabaseManager.cpp')
-rw-r--r--src/gui/DatabaseManager.cpp49
1 files changed, 43 insertions, 6 deletions
diff --git a/src/gui/DatabaseManager.cpp b/src/gui/DatabaseManager.cpp
index 6b92005df..6546cebc8 100644
--- a/src/gui/DatabaseManager.cpp
+++ b/src/gui/DatabaseManager.cpp
@@ -65,6 +65,7 @@ void DatabaseManager::openDatabase(const QString& fileName)
DatabaseManagerStruct dbStruct;
QScopedPointer<QFile> file(new QFile(fileName));
+ // TODO error handling
if (!file->open(QIODevice::ReadWrite)) {
if (!file->open(QIODevice::ReadOnly)) {
// can only open read-only
@@ -117,13 +118,41 @@ void DatabaseManager::saveDatabase(Database* db)
DatabaseManagerStruct& dbStruct = m_dbList[db];
// TODO ensure that the data is actually written to disk
- dbStruct.file->reset();
- m_writer.writeDatabase(dbStruct.file, db);
- dbStruct.file->resize(dbStruct.file->pos());
- dbStruct.file->flush();
+ if (dbStruct.file) {
+ dbStruct.file->reset();
+ m_writer.writeDatabase(dbStruct.file, db);
+ dbStruct.file->resize(dbStruct.file->pos());
+ dbStruct.file->flush();
- dbStruct.modified = false;
- updateTabName(db);
+ dbStruct.modified = false;
+ updateTabName(db);
+ }
+ else {
+ saveDatabaseAs(db);
+ }
+}
+
+void DatabaseManager::saveDatabaseAs(Database* db)
+{
+ QString fileName = QFileDialog::getSaveFileName(m_window, tr("Save database as"),
+ QString(), tr("KeePass 2 Database").append(" (*.kdbx)"));
+ if (!fileName.isEmpty()) {
+ DatabaseManagerStruct& dbStruct = m_dbList[db];
+
+ delete dbStruct.file;
+ QScopedPointer<QFile> file(new QFile(fileName));
+ // TODO error handling
+ if (!file->open(QIODevice::ReadWrite)) {
+ return;
+ }
+ dbStruct.file = file.take();
+ // TODO ensure that the data is actually written to disk
+ m_writer.writeDatabase(dbStruct.file, db);
+ dbStruct.file->flush();
+
+ dbStruct.modified = false;
+ updateTabName(db);
+ }
}
void DatabaseManager::closeDatabase(int index)
@@ -144,6 +173,14 @@ void DatabaseManager::saveDatabase(int index)
saveDatabase(indexDatabase(index));
}
+void DatabaseManager::saveDatabaseAs(int index)
+{
+ if (index == -1) {
+ index = m_tabWidget->currentIndex();
+ }
+ saveDatabaseAs(indexDatabase(index));
+}
+
void DatabaseManager::updateTabName(Database* db)
{
int index = databaseIndex(db);