diff --git a/python/gui/auto_generated/history/qgshistoryentry.sip.in b/python/gui/auto_generated/history/qgshistoryentry.sip.in index a77be84bacf..fe0aa3d412e 100644 --- a/python/gui/auto_generated/history/qgshistoryentry.sip.in +++ b/python/gui/auto_generated/history/qgshistoryentry.sip.in @@ -45,6 +45,8 @@ Returns ``True`` if the entry is valid. .. versionadded:: 3.32 %End + long long id; + QDateTime timestamp; QString providerId; diff --git a/src/gui/history/qgshistoryentry.h b/src/gui/history/qgshistoryentry.h index 25e335e2ee7..6cc41a4c64f 100644 --- a/src/gui/history/qgshistoryentry.h +++ b/src/gui/history/qgshistoryentry.h @@ -59,6 +59,13 @@ class GUI_EXPORT QgsHistoryEntry */ bool isValid() const; + /** + * Entry ID. + * + * \since QGIS 3.32 + */ + long long id = 0; + //! Entry timestamp QDateTime timestamp; diff --git a/src/gui/history/qgshistoryproviderregistry.cpp b/src/gui/history/qgshistoryproviderregistry.cpp index ab2ca1f20d5..981be5bc167 100644 --- a/src/gui/history/qgshistoryproviderregistry.cpp +++ b/src/gui/history/qgshistoryproviderregistry.cpp @@ -115,7 +115,10 @@ long long QgsHistoryProviderRegistry::addEntry( const QgsHistoryEntry &entry, bo } id = static_cast< int >( sqlite3_last_insert_rowid( mLocalDB.get() ) ); - emit entryAdded( id, entry, Qgis::HistoryProviderBackend::LocalProfile ); + QgsHistoryEntry addedEntry( entry ); + addedEntry.id = id; + + emit entryAdded( id, addedEntry, Qgis::HistoryProviderBackend::LocalProfile ); } return id; @@ -163,11 +166,13 @@ QgsHistoryEntry QgsHistoryProviderRegistry::entry( long long id, bool &ok, Qgis: } ok = true; - return QgsHistoryEntry( - statement.columnAsText( 0 ), - QDateTime::fromString( statement.columnAsText( 2 ), QStringLiteral( "yyyy-MM-dd HH:mm:ss" ) ), - QgsXmlUtils::readVariant( doc.documentElement() ).toMap() - ); + QgsHistoryEntry res = QgsHistoryEntry( + statement.columnAsText( 0 ), + QDateTime::fromString( statement.columnAsText( 2 ), QStringLiteral( "yyyy-MM-dd HH:mm:ss" ) ), + QgsXmlUtils::readVariant( doc.documentElement() ).toMap() + ); + res.id = id; + return res; } QgsDebugMsg( QStringLiteral( "Cannot find history item with matching ID" ) ); @@ -213,7 +218,7 @@ QList QgsHistoryProviderRegistry::queryEntries( const QDateTime return {}; } - QString sql = QStringLiteral( "SELECT provider_id, xml, timestamp FROM history" ); + QString sql = QStringLiteral( "SELECT id, provider_id, xml, timestamp FROM history" ); QStringList whereClauses; if ( !providerId.isEmpty() ) { @@ -237,17 +242,20 @@ QList QgsHistoryProviderRegistry::queryEntries( const QDateTime while ( nErr == SQLITE_OK && sqlite3_step( statement.get() ) == SQLITE_ROW ) { QDomDocument doc; - if ( !doc.setContent( statement.columnAsText( 1 ) ) ) + if ( !doc.setContent( statement.columnAsText( 2 ) ) ) { QgsDebugMsg( QStringLiteral( "Cannot read history entry" ) ); continue; } - entries.append( QgsHistoryEntry( - statement.columnAsText( 0 ), - QDateTime::fromString( statement.columnAsText( 2 ), QStringLiteral( "yyyy-MM-dd HH:mm:ss" ) ), - QgsXmlUtils::readVariant( doc.documentElement() ).toMap() - ) ); + QgsHistoryEntry entry( + statement.columnAsText( 1 ), + QDateTime::fromString( statement.columnAsText( 3 ), QStringLiteral( "yyyy-MM-dd HH:mm:ss" ) ), + QgsXmlUtils::readVariant( doc.documentElement() ).toMap() + ); + entry.id = statement.columnAsInt64( 0 ); + + entries.append( entry ); } } diff --git a/tests/src/python/test_qgshistoryproviderregistry.py b/tests/src/python/test_qgshistoryproviderregistry.py index b55fb832749..3072ef4990f 100644 --- a/tests/src/python/test_qgshistoryproviderregistry.py +++ b/tests/src/python/test_qgshistoryproviderregistry.py @@ -110,6 +110,7 @@ class TestQgsHistoryProviderRegistry(unittest.TestCase): self.assertEqual(len(added_spy), 1) self.assertEqual(added_spy[-1][0], id_1) self.assertEqual(added_spy[-1][1].providerId, 'my provider') + self.assertEqual(added_spy[-1][1].id, id_1) self.assertEqual(added_spy[-1][1].entry, {'some var': 5, 'other_var': [1, 2, 3], 'final_var': {'a': 'b'}}) id_2, ok = reg.addEntry('my provider 2', {'some var': 6}, @@ -118,14 +119,17 @@ class TestQgsHistoryProviderRegistry(unittest.TestCase): self.assertEqual(len(added_spy), 2) self.assertEqual(added_spy[-1][0], id_2) self.assertEqual(added_spy[-1][1].providerId, 'my provider 2') + self.assertEqual(added_spy[-1][1].id, id_2) self.assertEqual(added_spy[-1][1].entry, {'some var': 6}) self.assertEqual(len(reg.queryEntries()), 2) self.assertEqual(reg.queryEntries()[0].providerId, 'my provider') + self.assertEqual(reg.queryEntries()[0].id, id_1) self.assertEqual(reg.queryEntries()[0].timestamp.date(), QDateTime.currentDateTime().date()) self.assertEqual(reg.queryEntries()[0].entry, {'some var': 5, 'other_var': [1, 2, 3], 'final_var': {'a': 'b'}}) self.assertEqual(reg.queryEntries()[1].providerId, 'my provider 2') + self.assertEqual(reg.queryEntries()[1].id, id_2) self.assertEqual(reg.queryEntries()[1].timestamp.date(), QDateTime.currentDateTime().date()) self.assertEqual(reg.queryEntries()[1].entry, {'some var': 6}) @@ -134,11 +138,13 @@ class TestQgsHistoryProviderRegistry(unittest.TestCase): entry, ok = reg.entry(id_1) self.assertTrue(ok) self.assertEqual(entry.providerId, 'my provider') + self.assertEqual(entry.id, id_1) self.assertEqual(entry.timestamp.date(), QDateTime.currentDateTime().date()) self.assertEqual(entry.entry, {'some var': 5, 'other_var': [1, 2, 3], 'final_var': {'a': 'b'}}) entry, ok = reg.entry(id_2) self.assertTrue(ok) self.assertEqual(entry.providerId, 'my provider 2') + self.assertEqual(entry.id, id_2) self.assertEqual(entry.timestamp.date(), QDateTime.currentDateTime().date()) self.assertEqual(entry.entry, {'some var': 6}) @@ -148,16 +154,20 @@ class TestQgsHistoryProviderRegistry(unittest.TestCase): self.assertEqual(len(added_spy), 3) self.assertEqual(added_spy[-1][0], id_3) self.assertEqual(added_spy[-1][1].providerId, 'my provider 3') + self.assertEqual(added_spy[-1][1].id, id_3) self.assertEqual(added_spy[-1][1].entry, {'var': 7}) self.assertEqual(len(reg.queryEntries()), 3) self.assertEqual(reg.queryEntries()[0].providerId, 'my provider') + self.assertEqual(reg.queryEntries()[0].id, id_1) self.assertEqual(reg.queryEntries()[0].timestamp.date(), QDateTime.currentDateTime().date()) self.assertEqual(reg.queryEntries()[0].entry, {'some var': 5, 'other_var': [1, 2, 3], 'final_var': {'a': 'b'}}) self.assertEqual(reg.queryEntries()[1].providerId, 'my provider 2') + self.assertEqual(reg.queryEntries()[1].id, id_2) self.assertEqual(reg.queryEntries()[1].timestamp.date(), QDateTime.currentDateTime().date()) self.assertEqual(reg.queryEntries()[1].entry, {'some var': 6}) self.assertEqual(reg.queryEntries()[2].providerId, 'my provider 3') + self.assertEqual(reg.queryEntries()[2].id, id_3) self.assertEqual(reg.queryEntries()[2].timestamp.date(), QDate(2021, 1, 2)) self.assertEqual(reg.queryEntries()[2].entry, {'var': 7}) @@ -165,12 +175,14 @@ class TestQgsHistoryProviderRegistry(unittest.TestCase): entries = reg.queryEntries(providerId='my provider') self.assertEqual(len(entries), 1) self.assertEqual(entries[0].providerId, 'my provider') + self.assertEqual(entries[0].id, id_1) self.assertEqual(entries[0].timestamp.date(), QDateTime.currentDateTime().date()) self.assertEqual(entries[0].entry, {'some var': 5, 'other_var': [1, 2, 3], 'final_var': {'a': 'b'}}) entries = reg.queryEntries(providerId='my provider 2') self.assertEqual(len(entries), 1) self.assertEqual(entries[0].providerId, 'my provider 2') + self.assertEqual(entries[0].id, id_2) self.assertEqual(entries[0].timestamp.date(), QDateTime.currentDateTime().date()) self.assertEqual(entries[0].entry, {'some var': 6}) @@ -195,6 +207,7 @@ class TestQgsHistoryProviderRegistry(unittest.TestCase): entry, ok = reg.entry(id_1) self.assertEqual(entry.providerId, 'my provider') + self.assertEqual(entry.id, id_1) self.assertEqual(entry.timestamp.date(), QDateTime.currentDateTime().date()) self.assertEqual(entry.entry, {'new_props': 54}) @@ -213,14 +226,18 @@ class TestQgsHistoryProviderRegistry(unittest.TestCase): self.assertEqual(len(added_spy), 5) self.assertEqual(added_spy[-2][1].providerId, 'my provider 4') + self.assertEqual(added_spy[-2][1].id, 1) self.assertEqual(added_spy[-2][1].entry, {'var': 7}) self.assertEqual(added_spy[-1][1].providerId, 'my provider 5') + self.assertEqual(added_spy[-1][1].id, 2) self.assertEqual(added_spy[-1][1].entry, {'var': 8}) self.assertEqual(reg.queryEntries()[0].providerId, 'my provider 4') + self.assertEqual(reg.queryEntries()[0].id, 1) self.assertEqual(reg.queryEntries()[0].entry, {'var': 7}) self.assertEqual(reg.queryEntries()[1].providerId, 'my provider 5') + self.assertEqual(reg.queryEntries()[1].id, 2) self.assertEqual(reg.queryEntries()[1].entry, {'var': 8})