1
0
forked from blue/squawk

somewhat working...

This commit is contained in:
Blue 2023-11-03 20:13:45 -03:00
parent 9d688e8596
commit 297e08ba41
Signed by untrusted user: blue
GPG Key ID: 9B203B252A63EE38

View File

@ -84,7 +84,7 @@ bool Core::Archive::addElement(const Shared::Message& message) {
order->addRecord(message.getTime().toMSecsSinceEpoch(), id, txn); order->addRecord(message.getTime().toMSecsSinceEpoch(), id, txn);
QString stanzaId = message.getStanzaId(); QString stanzaId = message.getStanzaId();
if (!stanzaId.isEmpty()) if (!stanzaId.isEmpty())
stanzaIdToId->addRecord(stanzaId, id); stanzaIdToId->addRecord(stanzaId, id, txn);
txn.commit(); txn.commit();
return true; return true;
@ -199,14 +199,15 @@ unsigned int Core::Archive::addElements(const std::list<Shared::Message>& messag
if (!added) if (!added)
continue; continue;
order->addRecord(message.getTime().toMSecsSinceEpoch(), id); order->addRecord(message.getTime().toMSecsSinceEpoch(), id, txn);
QString sid = message.getStanzaId(); QString sid = message.getStanzaId();
if (!sid.isEmpty()) if (!sid.isEmpty())
stanzaIdToId->addRecord(sid, id); stanzaIdToId->addRecord(sid, id, txn);
++success; ++success;
} }
txn.commit();
return success; return success;
} }
@ -217,24 +218,18 @@ long unsigned int Core::Archive::size() const {
std::list<Shared::Message> Core::Archive::getBefore(unsigned int count, const QString& id) { std::list<Shared::Message> Core::Archive::getBefore(unsigned int count, const QString& id) {
LMDBAL::Transaction txn = db.beginReadOnlyTransaction(); LMDBAL::Transaction txn = db.beginReadOnlyTransaction();
std::list<Shared::Message> res;
try { try {
cursor.open(txn); cursor.open(txn);
if (id.isEmpty()) { if (!id.isEmpty()) {
cursor.last();
} else {
Shared::Message reference = messages->getRecord(id, txn); Shared::Message reference = messages->getRecord(id, txn);
uint64_t stamp = reference.getTime().toMSecsSinceEpoch(); uint64_t stamp = reference.getTime().toMSecsSinceEpoch();
cursor.set(stamp); cursor.set(stamp);
cursor.prev();
} }
std::list<Shared::Message> res;
for (unsigned int i = 0; i < count; ++i) { for (unsigned int i = 0; i < count; ++i) {
std::pair<uint64_t, QString> pair; std::pair<uint64_t, QString> pair;
if (i == 0) cursor.prev(pair.first, pair.second);
cursor.current(pair.first, pair.second);
else
cursor.prev(pair.first, pair.second);
res.emplace_back(); res.emplace_back();
Shared::Message& msg = res.back(); Shared::Message& msg = res.back();
@ -243,6 +238,12 @@ std::list<Shared::Message> Core::Archive::getBefore(unsigned int count, const QS
cursor.close(); cursor.close();
return res; return res;
} catch (const LMDBAL::NotFound& e) {
cursor.close();
if (res.empty())
throw e;
else
return res;
} catch (...) { } catch (...) {
cursor.close(); cursor.close();
throw; throw;
@ -273,7 +274,7 @@ bool Core::Archive::setEncryptionEnabled(bool is) {
LMDBAL::WriteTransaction txn = db.beginTransaction(); LMDBAL::WriteTransaction txn = db.beginTransaction();
bool current = false; bool current = false;
try { try {
current = stats->getRecord("isEncryptionEnabled").toBool(); current = stats->getRecord("isEncryptionEnabled", txn).toBool();
} catch (const LMDBAL::NotFound& e) {} } catch (const LMDBAL::NotFound& e) {}
if (is != current) { if (is != current) {