diff --git a/src/core/Database.cpp b/src/core/Database.cpp index 7ac4a2af..dbaffa98 100644 --- a/src/core/Database.cpp +++ b/src/core/Database.cpp @@ -25,19 +25,29 @@ #include "crypto/Random.h" #include "format/KeePass2.h" +QHash Database::m_uuidMap; + Database::Database() : m_metadata(new Metadata(this)) , m_cipher(KeePass2::CIPHER_AES) , m_compressionAlgo(CompressionGZip) , m_transformRounds(50000) , m_hasKey(false) + , m_uuid(Uuid::random()) { setRootGroup(new Group()); rootGroup()->setUuid(Uuid::random()); + m_uuidMap.insert(m_uuid, this); + connect(m_metadata, SIGNAL(modified()), this, SIGNAL(modified())); } +Database::~Database() +{ + m_uuidMap.remove(m_uuid); +} + Group* Database::rootGroup() { return m_rootGroup; @@ -240,3 +250,13 @@ void Database::recycleGroup(Group* group) delete group; } } + +Uuid Database::uuid() +{ + return m_uuid; +} + +Database* Database::databaseByUuid(const Uuid& uuid) +{ + return m_uuidMap.value(uuid, 0); +} diff --git a/src/core/Database.h b/src/core/Database.h index 7190436e..5a6fdd23 100644 --- a/src/core/Database.h +++ b/src/core/Database.h @@ -49,6 +49,7 @@ public: static const quint32 CompressionAlgorithmMax = CompressionGZip; Database(); + ~Database(); Group* rootGroup(); const Group* rootGroup() const; @@ -89,6 +90,13 @@ public: void recycleEntry(Entry* entry); void recycleGroup(Group* group); + /** + * Returns a unique id that is only valid as long as the Database exists. + */ + Uuid uuid(); + + static Database* databaseByUuid(const Uuid& uuid); + Q_SIGNALS: void groupDataChanged(Group* group); void groupAboutToAdd(Group* group, int index); @@ -117,6 +125,9 @@ private: CompositeKey m_key; bool m_hasKey; + + Uuid m_uuid; + static QHash m_uuidMap; }; #endif // KEEPASSX_DATABASE_H