some hopefully final preparations for delay manager

This commit is contained in:
Blue 2023-03-08 23:28:48 +03:00
parent 9fff409630
commit 5ba97ecc25
Signed by untrusted user: blue
GPG key ID: 9B203B252A63EE38
8 changed files with 148 additions and 56 deletions

View file

@ -21,7 +21,7 @@
#include "owncardinternal.h"
#include "owninfoforuser.h"
Core::DelayManager::Manager::Manager(Job::Id mpj, QObject* parent) :
Core::DelayManager::Manager::Manager(const QString& poj, Job::Id mpj, QObject* parent) :
QObject(parent),
maxParallelJobs(mpj),
nextJobId(1),
@ -34,8 +34,9 @@ Core::DelayManager::Manager::Manager(Job::Id mpj, QObject* parent) :
scheduledVCards(),
requestedVCards(),
#ifdef WITH_OMEMO
requestedBundles()
requestedBundles(),
#endif
ownJid(poj)
{
}
@ -49,7 +50,7 @@ Core::DelayManager::Manager::~Manager() {
}
}
Core::Job::Id Core::DelayManager::Manager::getNextJobId() {
Core::DelayManager::Job::Id Core::DelayManager::Manager::getNextJobId() {
Job::Id id = nextJobId++;
if (id == 0)
id = nextJobId++;
@ -94,7 +95,7 @@ void Core::DelayManager::Manager::getOwnVCard() {
scheduleJob(new OwnCardInternal(getNextJobId()));
}
Core::Job* Core::DelayManager::Manager::getVCardJob(const QString& jid) {
Core::DelayManager::Job* Core::DelayManager::Manager::getVCardJob(const QString& jid) {
Job* job = nullptr;
std::map<QString, Job::Id>::const_iterator sitr = scheduledVCards.find(jid);
if (sitr == scheduledVCards.end()) {
@ -107,7 +108,7 @@ Core::Job* Core::DelayManager::Manager::getVCardJob(const QString& jid) {
return job;
}
void Core::DelayManager::Manager::preScheduleJob(Core::Job* job) {
void Core::DelayManager::Manager::preScheduleJob(Job* job) {
switch (job->type) {
case Job::Type::cardInternal:
scheduledVCards.emplace(dynamic_cast<CardInternal*>(job)->jid, job->id);
@ -125,7 +126,7 @@ void Core::DelayManager::Manager::preScheduleJob(Core::Job* job) {
}
}
void Core::DelayManager::Manager::scheduleJob(Core::Job* job) {
void Core::DelayManager::Manager::scheduleJob(Job* job) {
preScheduleJob(job);
if (runningJobs.size() < maxParallelJobs) {
executeJob(job);
@ -134,7 +135,7 @@ void Core::DelayManager::Manager::scheduleJob(Core::Job* job) {
}
}
void Core::DelayManager::Manager::preExecuteJob(Core::Job* job) {
void Core::DelayManager::Manager::preExecuteJob(Job* job) {
switch (job->type) {
case Job::Type::cardInternal:
case Job::Type::infoForUser: {
@ -149,7 +150,7 @@ void Core::DelayManager::Manager::preExecuteJob(Core::Job* job) {
}
}
void Core::DelayManager::Manager::executeJob(Core::Job* job) {
void Core::DelayManager::Manager::executeJob(Job* job) {
preExecuteJob(job);
runningJobs.emplace(job->id, job);
switch (job->type) {
@ -179,7 +180,7 @@ void Core::DelayManager::Manager::jobIsDone(Job::Id jobId) {
}
}
void Core::DelayManager::Manager::replaceJob(Core::Job* job) {
void Core::DelayManager::Manager::replaceJob(Job* job) {
preScheduleJob(job);
std::map<Job::Id, Job*>::iterator itr = runningJobs.find(job->id);
if (itr != runningJobs.end()) {
@ -197,7 +198,7 @@ void Core::DelayManager::Manager::replaceJob(Core::Job* job) {
}
}
void Core::DelayManager::Manager::jobIsCanceled(Core::Job* job, bool wasRunning) {
void Core::DelayManager::Manager::jobIsCanceled(Job* job, bool wasRunning) {
switch (job->type) {
case Job::Type::cardInternal: {
CardInternal* jb = dynamic_cast<CardInternal*>(job);
@ -211,13 +212,20 @@ void Core::DelayManager::Manager::jobIsCanceled(Core::Job* job, bool wasRunning)
break;
case Job::Type::infoForUser: {
InfoForUser* jb = dynamic_cast<InfoForUser*>(job);
if (jb->getStage() == InfoForUser::Stage::waitingForVCard) {
if (wasRunning)
requestedVCards.erase(jb->jid);
else
scheduledVCards.erase(jb->jid);
switch (jb->getStage()) {
case InfoForUser::Stage::waitingForVCard:
if (wasRunning)
requestedVCards.erase(jb->jid);
else
scheduledVCards.erase(jb->jid);
emit receivedVCard(jb->jid, Shared::VCard());
emit receivedVCard(jb->jid, Shared::VCard());
break;
case InfoForUser::Stage::waitingForBundles:
requestedBundles.erase(jb->jid);
break;
default:
break;
}
emit receivedInfo(Shared::Info(jb->jid));
}
@ -229,7 +237,7 @@ void Core::DelayManager::Manager::jobIsCanceled(Core::Job* job, bool wasRunning)
emit receivedOwnCard(Shared::VCard());
}
ownInfoJobId = 0;
emit receivedOwnInfo(Shared::Info (""));
emit receivedOwnInfo(Shared::Info (ownJid));
}
break;
@ -257,33 +265,32 @@ void Core::DelayManager::Manager::receivedVCard(const QString& jid, const Shared
std::map<QString, Job::Id>::const_iterator cardItr = requestedVCards.find(jid);
if (cardItr == requestedVCards.end()) {
throw 8575; //never supposed to happen, the state is not correct;
} else {
Job::Id jobId = cardItr->second;
requestedVCards.erase(cardItr);
Job* job = runningJobs.at(jobId);
switch (job->type) {
case Job::Type::cardInternal:
jobIsDone(jobId);
emit receivedCard(jid, card);
break;
case Job::Type::infoForUser:
}
Job::Id jobId = cardItr->second;
requestedVCards.erase(cardItr);
Job* job = runningJobs.at(jobId);
switch (job->type) {
case Job::Type::cardInternal:
jobIsDone(jobId);
emit receivedCard(jid, card);
break;
case Job::Type::infoForUser: {
#ifdef WITH_OMEMO
requestedBundles.emplace(jid, jobId);
//TODO save card!
emit requestBundles(jid);
requestedBundles.emplace(jid, jobId);
InfoForUser* jb = dynamic_cast<InfoForUser*>(job);
jb->receivedVCard(card);
emit requestBundles(jid);
#else
{
Shared::Info info(jid);
info.turnIntoContact(card);
emit receivedInfo(info);
}
jobIsDone(jobId);
Shared::Info info(jid);
info.turnIntoContact(card);
emit receivedInfo(info);
jobIsDone(jobId);
#endif
emit receivedCard(jid, card);
break;
default:
throw 8576;
emit receivedCard(jid, card);
}
break;
default:
throw 8576;
}
}
@ -296,26 +303,54 @@ void Core::DelayManager::Manager::ownVCardReceived(const Shared::VCard& card) {
jobIsDone(jobId);
emit receivedOwnCard(card);
break;
case Job::Type::ownInfoForUser:
case Job::Type::ownInfoForUser: {
#ifdef WITH_OMEMO
//requestedBundles.emplace(jid, jobId);
//TODO save card!
OwnInfoForUser* jb = dynamic_cast<OwnInfoForUser*>(job);
jb->receivedVCard(card);
emit requestOwnBundle();
#else
{
Shared::Info info("");
info.turnIntoOwnAccount(card);
emit receivedOwnInfo(info);
}
Shared::Info info(ownJid);
info.turnIntoOwnAccount(card);
emit receivedOwnInfo(info);
jobIsDone(jobId);
#endif
emit receivedOwnCard(card);
}
break;
default:
throw 8576;
}
}
void Core::DelayManager::Manager::receivedBundles(const QString& jid) {
void Core::DelayManager::Manager::receivedBundles(const QString& jid, const std::list<Shared::KeyInfo>& keys) {
std::map<QString, Job::Id>::const_iterator itr = requestedBundles.find(jid);
if (itr == requestedBundles.end()) {
throw 8577; //never supposed to happen, the state is not correct;
}
Job::Id jobId = itr->second;
requestedBundles.erase(itr);
Job* jb = runningJobs.at(jobId);
InfoForUser* job = dynamic_cast<InfoForUser*>(jb);
Shared::Info info(jid);
info.turnIntoContact(job->claim(), new std::list<Shared::KeyInfo>(keys));
emit receivedInfo(info);
jobIsDone(jobId);
}
void Core::DelayManager::Manager::receivedOwnBundles(const std::list<Shared::KeyInfo>& keys) {
Job::Id jobId = ownInfoJobId;
ownInfoJobId = 0;
Job* jb = runningJobs.at(jobId);
OwnInfoForUser* job = dynamic_cast<OwnInfoForUser*>(jb);
Shared::Info info(ownJid);
info.turnIntoOwnAccount(job->claim(), new std::list<Shared::KeyInfo>(keys));
emit receivedOwnInfo(info);
jobIsDone(jobId);
}
void Core::DelayManager::Manager::setOwnJid(const QString& jid) {
ownJid = jid;
}