forked from blue/squawk
DONT TAKE, BROKEN! first application of delay manager in code, reception of bundles
This commit is contained in:
parent
5ba97ecc25
commit
927bdf0dab
16 changed files with 261 additions and 139 deletions
|
@ -89,8 +89,12 @@ QXmppTask<QXmpp::TrustLevel> Core::TrustHandler::trustLevel(
|
|||
const QString& keyOwnerJid,
|
||||
const QByteArray& keyId)
|
||||
{
|
||||
Keys map = getCache(encryption)->getRecord(keyOwnerJid);
|
||||
Shared::TrustLevel level = map.at(keyId);
|
||||
KeyCache* cache = getCache(encryption);
|
||||
Shared::TrustLevel level = Shared::TrustLevel::undecided;
|
||||
try {
|
||||
Keys map = cache->getRecord(keyOwnerJid);
|
||||
level = map.at(keyId);
|
||||
} catch (const DataBase::NotFound& e) {}
|
||||
return Core::makeReadyTask(std::move(convert(level)));
|
||||
}
|
||||
|
||||
|
@ -134,15 +138,22 @@ QXmppTask<QHash<QString, QMultiHash<QString, QByteArray>>> Core::TrustHandler::s
|
|||
for (MultySB::const_iterator itr = keyIds.begin(), end = keyIds.end(); itr != end; ++itr) {
|
||||
const QString& keyOwnerJid = itr.key();
|
||||
const QByteArray& keyId = itr.value();
|
||||
Keys map = cache->getRecord(keyOwnerJid);
|
||||
std::pair<Keys::iterator, bool> result = map.insert(std::make_pair(keyId, level));
|
||||
if (result.second) {
|
||||
try {
|
||||
Keys map = cache->getRecord(keyOwnerJid);
|
||||
std::pair<Keys::iterator, bool> result = map.insert(std::make_pair(keyId, level));
|
||||
bool changed = result.second;
|
||||
if (!changed && result.first->second != level) {
|
||||
result.first->second = level;
|
||||
changed = true;
|
||||
}
|
||||
if (changed) {
|
||||
modifiedKeys[encryption].insert(keyOwnerJid, keyId);
|
||||
cache->changeRecord(keyOwnerJid, map);
|
||||
}
|
||||
} catch (const DataBase::NotFound& e) {
|
||||
Keys map({{keyId, level}});
|
||||
modifiedKeys[encryption].insert(keyOwnerJid, keyId);
|
||||
cache->changeRecord(keyOwnerJid, map);
|
||||
} else if (result.first->second != level) {
|
||||
result.first->second = level;
|
||||
modifiedKeys[encryption].insert(keyOwnerJid, keyId);
|
||||
cache->changeRecord(keyOwnerJid, map);
|
||||
cache->addRecord(keyOwnerJid, map);
|
||||
}
|
||||
}
|
||||
return Core::makeReadyTask(std::move(modifiedKeys));
|
||||
|
@ -199,9 +210,8 @@ QXmppTask<QHash<QXmpp::TrustLevel, QMultiHash<QString, QByteArray>>> TrustHandle
|
|||
for (const std::pair<const QString, Keys>& value : storage) {
|
||||
for (const std::pair<const QByteArray, Shared::TrustLevel>& pair : value.second) {
|
||||
QXmpp::TrustLevel level = convert(pair.second);
|
||||
if (!trustLevels || trustLevels.testFlag(level)) {
|
||||
if (!trustLevels || trustLevels.testFlag(level))
|
||||
res[level].insert(value.first, pair.first);
|
||||
}
|
||||
}
|
||||
}
|
||||
return Core::makeReadyTask(std::move(res));
|
||||
|
@ -219,9 +229,8 @@ QXmppTask<void> TrustHandler::removeKeys(const QString& encryption, const QStrin
|
|||
|
||||
QXmppTask<void> TrustHandler::removeKeys(const QString& encryption, const QList<QByteArray>& keyIds) {
|
||||
std::set<QByteArray> set;
|
||||
for (const QByteArray& keyId : keyIds) {
|
||||
for (const QByteArray& keyId : keyIds)
|
||||
set.insert(keyId);
|
||||
}
|
||||
|
||||
KeyCache* cache = getCache(encryption);
|
||||
std::map<QString, Keys> data = cache->readAll();
|
||||
|
@ -233,19 +242,16 @@ QXmppTask<void> TrustHandler::removeKeys(const QString& encryption, const QList<
|
|||
if (set.erase(keyId)) {
|
||||
byOwner.erase(itr++);
|
||||
changed = true;
|
||||
} else {
|
||||
} else
|
||||
++itr;
|
||||
}
|
||||
}
|
||||
if (byOwner.size() > 0) {
|
||||
if (byOwner.size() > 0)
|
||||
data.erase(cItr++);
|
||||
} else {
|
||||
else
|
||||
++cItr;
|
||||
}
|
||||
}
|
||||
if (changed) {
|
||||
if (changed)
|
||||
cache->replaceAll(data);
|
||||
}
|
||||
|
||||
return Core::makeReadyTask();
|
||||
}
|
||||
|
@ -266,9 +272,8 @@ QXmppTask<void> TrustHandler::addKeys(
|
|||
} catch (const DataBase::NotFound& e) {}
|
||||
for (const QByteArray& keyId : keyIds) {
|
||||
std::pair<Keys::iterator, bool> result = data.insert(std::make_pair(keyId, level));
|
||||
if (!result.second) {
|
||||
if (!result.second)
|
||||
result.first->second = level;
|
||||
}
|
||||
}
|
||||
|
||||
if (had) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue