forked from blue/squawk
somewhat working...
This commit is contained in:
parent
9d688e8596
commit
297e08ba41
@ -84,7 +84,7 @@ bool Core::Archive::addElement(const Shared::Message& message) {
|
||||
order->addRecord(message.getTime().toMSecsSinceEpoch(), id, txn);
|
||||
QString stanzaId = message.getStanzaId();
|
||||
if (!stanzaId.isEmpty())
|
||||
stanzaIdToId->addRecord(stanzaId, id);
|
||||
stanzaIdToId->addRecord(stanzaId, id, txn);
|
||||
|
||||
txn.commit();
|
||||
return true;
|
||||
@ -199,14 +199,15 @@ unsigned int Core::Archive::addElements(const std::list<Shared::Message>& messag
|
||||
if (!added)
|
||||
continue;
|
||||
|
||||
order->addRecord(message.getTime().toMSecsSinceEpoch(), id);
|
||||
order->addRecord(message.getTime().toMSecsSinceEpoch(), id, txn);
|
||||
|
||||
QString sid = message.getStanzaId();
|
||||
if (!sid.isEmpty())
|
||||
stanzaIdToId->addRecord(sid, id);
|
||||
stanzaIdToId->addRecord(sid, id, txn);
|
||||
|
||||
++success;
|
||||
}
|
||||
txn.commit();
|
||||
|
||||
return success;
|
||||
}
|
||||
@ -217,23 +218,17 @@ long unsigned int Core::Archive::size() const {
|
||||
|
||||
std::list<Shared::Message> Core::Archive::getBefore(unsigned int count, const QString& id) {
|
||||
LMDBAL::Transaction txn = db.beginReadOnlyTransaction();
|
||||
std::list<Shared::Message> res;
|
||||
try {
|
||||
cursor.open(txn);
|
||||
if (id.isEmpty()) {
|
||||
cursor.last();
|
||||
} else {
|
||||
if (!id.isEmpty()) {
|
||||
Shared::Message reference = messages->getRecord(id, txn);
|
||||
uint64_t stamp = reference.getTime().toMSecsSinceEpoch();
|
||||
cursor.set(stamp);
|
||||
cursor.prev();
|
||||
}
|
||||
|
||||
std::list<Shared::Message> res;
|
||||
for (unsigned int i = 0; i < count; ++i) {
|
||||
std::pair<uint64_t, QString> pair;
|
||||
if (i == 0)
|
||||
cursor.current(pair.first, pair.second);
|
||||
else
|
||||
cursor.prev(pair.first, pair.second);
|
||||
|
||||
res.emplace_back();
|
||||
@ -242,6 +237,12 @@ std::list<Shared::Message> Core::Archive::getBefore(unsigned int count, const QS
|
||||
}
|
||||
cursor.close();
|
||||
|
||||
return res;
|
||||
} catch (const LMDBAL::NotFound& e) {
|
||||
cursor.close();
|
||||
if (res.empty())
|
||||
throw e;
|
||||
else
|
||||
return res;
|
||||
} catch (...) {
|
||||
cursor.close();
|
||||
@ -273,7 +274,7 @@ bool Core::Archive::setEncryptionEnabled(bool is) {
|
||||
LMDBAL::WriteTransaction txn = db.beginTransaction();
|
||||
bool current = false;
|
||||
try {
|
||||
current = stats->getRecord("isEncryptionEnabled").toBool();
|
||||
current = stats->getRecord("isEncryptionEnabled", txn).toBool();
|
||||
} catch (const LMDBAL::NotFound& e) {}
|
||||
|
||||
if (is != current) {
|
||||
|
Loading…
Reference in New Issue
Block a user