From c80be1dd8423fc109f308adbc076f642babee4b9 Mon Sep 17 00:00:00 2001 From: Florian Geyer Date: Wed, 11 Apr 2012 15:57:11 +0200 Subject: [PATCH] Add modified signals for metadata. --- src/core/Database.cpp | 7 ++- src/core/Database.h | 2 +- src/core/Metadata.cpp | 75 +++++++++++++++++++++++--------- src/core/Metadata.h | 7 +++ src/format/KeePass2Reader.cpp | 2 +- src/format/KeePass2XmlReader.cpp | 4 ++ 6 files changed, 74 insertions(+), 23 deletions(-) diff --git a/src/core/Database.cpp b/src/core/Database.cpp index a513c119..353376df 100644 --- a/src/core/Database.cpp +++ b/src/core/Database.cpp @@ -34,6 +34,8 @@ Database::Database() m_cipher = KeePass2::CIPHER_AES; m_compressionAlgo = CompressionGZip; m_transformRounds = 50000; + + connect(m_metadata, SIGNAL(modified()), this, SIGNAL(modified())); } Group* Database::rootGroup() @@ -158,10 +160,13 @@ void Database::setTransformRounds(quint64 rounds) m_transformRounds = rounds; } -void Database::setKey(const CompositeKey& key, const QByteArray& transformSeed) +void Database::setKey(const CompositeKey& key, const QByteArray& transformSeed, bool updateChangedTime) { m_transformSeed = transformSeed; m_transformedMasterKey = key.transform(transformSeed, transformRounds()); + if (updateChangedTime) { + m_metadata->setMasterKeyChanged(QDateTime::currentDateTime()); + } Q_EMIT modified(); } diff --git a/src/core/Database.h b/src/core/Database.h index 079b8498..5b33f244 100644 --- a/src/core/Database.h +++ b/src/core/Database.h @@ -75,7 +75,7 @@ public: void setCipher(const Uuid& cipher); void setCompressionAlgo(Database::CompressionAlgorithm algo); void setTransformRounds(quint64 rounds); - void setKey(const CompositeKey& key, const QByteArray& transformSeed); + void setKey(const CompositeKey& key, const QByteArray& transformSeed, bool updateChangedTime = true); /** * Sets the database key and generates a random transform seed. diff --git a/src/core/Metadata.cpp b/src/core/Metadata.cpp index 0b9382a4..2706bba7 100644 --- a/src/core/Metadata.cpp +++ b/src/core/Metadata.cpp @@ -48,6 +48,37 @@ Metadata::Metadata(Database* parent) m_protectUrl = false; m_protectNotes = false; m_autoEnableVisualHiding = false; + + m_updateDatetime = true; +} + +template bool Metadata::set(T& property, const T& value) { + if (property != value) { + property = value; + Q_EMIT modified(); + return true; + } + else { + return false; + } +} + +template bool Metadata::set(T& property, const T& value, QDateTime& dateTime) { + if (property != value) { + property = value; + if (m_updateDatetime) { + dateTime = QDateTime::currentDateTime(); + } + Q_EMIT modified(); + return true; + } + else { + return false; + } +} + +void Metadata::setUpdateDatetime(bool value) { + m_updateDatetime = value; } QString Metadata::generator() const @@ -187,14 +218,14 @@ QHash Metadata::customFields() const void Metadata::setGenerator(const QString& value) { - m_generator = value; + set(m_generator, value); } void Metadata::setName(const QString& value) { - m_name = value; - - Q_EMIT nameTextChanged(m_parent); + if (set(m_name, value, m_nameChanged)) { + Q_EMIT nameTextChanged(m_parent); + } } void Metadata::setNameChanged(const QDateTime& value) @@ -204,7 +235,7 @@ void Metadata::setNameChanged(const QDateTime& value) void Metadata::setDescription(const QString& value) { - m_description = value; + set(m_description, value, m_descriptionChanged); } void Metadata::setDescriptionChanged(const QDateTime& value) @@ -214,7 +245,7 @@ void Metadata::setDescriptionChanged(const QDateTime& value) void Metadata::setDefaultUserName(const QString& value) { - m_defaultUserName = value; + set(m_defaultUserName, value, m_defaultUserNameChanged); } void Metadata::setDefaultUserNameChanged(const QDateTime& value) @@ -224,37 +255,37 @@ void Metadata::setDefaultUserNameChanged(const QDateTime& value) void Metadata::setMaintenanceHistoryDays(int value) { - m_maintenanceHistoryDays = value; + set(m_maintenanceHistoryDays, value); } void Metadata::setProtectTitle(bool value) { - m_protectTitle = value; + set(m_protectTitle, value); } void Metadata::setProtectUsername(bool value) { - m_protectUsername = value; + set(m_protectUsername, value); } void Metadata::setProtectPassword(bool value) { - m_protectPassword = value; + set(m_protectPassword, value); } void Metadata::setProtectUrl(bool value) { - m_protectUrl = value; + set(m_protectUrl, value); } void Metadata::setProtectNotes(bool value) { - m_protectNotes = value; + set(m_protectNotes, value); } void Metadata::setAutoEnableVisualHiding(bool value) { - m_autoEnableVisualHiding = value; + set(m_autoEnableVisualHiding, value); } void Metadata::addCustomIcon(const Uuid& uuid, const QImage& icon) @@ -263,6 +294,7 @@ void Metadata::addCustomIcon(const Uuid& uuid, const QImage& icon) Q_ASSERT(!m_customIcons.contains(uuid)); m_customIcons.insert(uuid, icon); + Q_EMIT modified(); } void Metadata::removeCustomIcon(const Uuid& uuid) @@ -271,16 +303,17 @@ void Metadata::removeCustomIcon(const Uuid& uuid) Q_ASSERT(m_customIcons.contains(uuid)); m_customIcons.remove(uuid); + Q_EMIT modified(); } void Metadata::setRecycleBinEnabled(bool value) { - m_recycleBinEnabled = value; + set(m_recycleBinEnabled, value); } void Metadata::setRecycleBin(Group* group) { - m_recycleBin = group; + set(m_recycleBin, group, m_recycleBinChanged); } void Metadata::setRecycleBinChanged(const QDateTime& value) @@ -290,7 +323,7 @@ void Metadata::setRecycleBinChanged(const QDateTime& value) void Metadata::setEntryTemplatesGroup(Group* group) { - m_entryTemplatesGroup = group; + set(m_entryTemplatesGroup, group, m_entryTemplatesGroupChanged); } void Metadata::setEntryTemplatesGroupChanged(const QDateTime& value) @@ -300,12 +333,12 @@ void Metadata::setEntryTemplatesGroupChanged(const QDateTime& value) void Metadata::setLastSelectedGroup(Group* group) { - m_lastSelectedGroup = group; + set(m_lastSelectedGroup, group); } void Metadata::setLastTopVisibleGroup(Group* group) { - m_lastTopVisibleGroup = group; + set(m_lastTopVisibleGroup, group); } void Metadata::setMasterKeyChanged(const QDateTime& value) @@ -315,12 +348,12 @@ void Metadata::setMasterKeyChanged(const QDateTime& value) void Metadata::setMasterKeyChangeRec(int value) { - m_masterKeyChangeRec = value; + set(m_masterKeyChangeRec, value); } void Metadata::setMasterKeyChangeForce(int value) { - m_masterKeyChangeForce = value; + set(m_masterKeyChangeForce, value); } void Metadata::addCustomField(const QString& key, const QString& value) @@ -328,6 +361,7 @@ void Metadata::addCustomField(const QString& key, const QString& value) Q_ASSERT(!m_customFields.contains(key)); m_customFields.insert(key, value); + Q_EMIT modified(); } void Metadata::removeCustomField(const QString& key) @@ -335,4 +369,5 @@ void Metadata::removeCustomField(const QString& key) Q_ASSERT(m_customFields.contains(key)); m_customFields.remove(key); + Q_EMIT modified(); } diff --git a/src/core/Metadata.h b/src/core/Metadata.h index 178eaf9c..7ad762ff 100644 --- a/src/core/Metadata.h +++ b/src/core/Metadata.h @@ -90,11 +90,16 @@ public: void setMasterKeyChangeForce(int value); void addCustomField(const QString& key, const QString& value); void removeCustomField(const QString& key); + void setUpdateDatetime(bool value); Q_SIGNALS: void nameTextChanged(Database* db); + void modified(); private: + template inline bool set(T& property, const T& value, QDateTime& dateTime); + template inline bool set(T& property, const T& value); + Database* m_parent; QString m_generator; @@ -128,6 +133,8 @@ private: int m_masterKeyChangeForce; QHash m_customFields; + + bool m_updateDatetime; }; #endif // KEEPASSX_METADATA_H diff --git a/src/format/KeePass2Reader.cpp b/src/format/KeePass2Reader.cpp index 6c35e37a..dc9e19b6 100644 --- a/src/format/KeePass2Reader.cpp +++ b/src/format/KeePass2Reader.cpp @@ -72,7 +72,7 @@ Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& ke // TODO check if all header fields have been parsed - m_db->setKey(key, m_transformSeed); + m_db->setKey(key, m_transformSeed, false); CryptoHash hash(CryptoHash::Sha256); hash.addData(m_masterSeed); diff --git a/src/format/KeePass2XmlReader.cpp b/src/format/KeePass2XmlReader.cpp index 3f6c0ea1..17a87bd2 100644 --- a/src/format/KeePass2XmlReader.cpp +++ b/src/format/KeePass2XmlReader.cpp @@ -39,6 +39,8 @@ void KeePass2XmlReader::readDatabase(QIODevice* device, Database* db, KeePass2Ra m_db = db; m_meta = m_db->metadata(); + m_meta->setUpdateDatetime(false); + m_randomStream = randomStream; m_tmpParent = new Group(); @@ -61,6 +63,8 @@ void KeePass2XmlReader::readDatabase(QIODevice* device, Database* db, KeePass2Ra } } + m_meta->setUpdateDatetime(true); + delete m_tmpParent; }