fbdaemon/fbcoordinator.cpp fbdaemon/fbcoordinator.h jobs/sequentialcompositejob.cpp
Christian Mollekopf
mollekopf at kolabsys.com
Wed Jul 25 10:11:01 CEST 2012
fbdaemon/fbcoordinator.cpp | 37 ++++++++++++++++++++++++++-----------
fbdaemon/fbcoordinator.h | 4 ++++
jobs/sequentialcompositejob.cpp | 1 +
3 files changed, 31 insertions(+), 11 deletions(-)
New commits:
commit a6a5afc54f2ca3fdf08e4e400f026199d1b03e2a
Author: Christian Mollekopf <mollekopf at kolabsys.com>
Date: Wed Jul 25 10:10:11 2012 +0200
use a queue containing the user identifiers instead of generating loads of jobs right away.
diff --git a/fbdaemon/fbcoordinator.cpp b/fbdaemon/fbcoordinator.cpp
index 9d72d10..4568bcb 100644
--- a/fbdaemon/fbcoordinator.cpp
+++ b/fbdaemon/fbcoordinator.cpp
@@ -32,28 +32,40 @@ FBCoordinator::FBCoordinator(QObject* parent)
void FBCoordinator::generateForAllUsers()
{
+ if (!mUserQueue.isEmpty()) {
+ kWarning() << "there is an existing processing queue, aborting";
+ return;
+ }
GetUserListJob *getUsersJob = new GetUserListJob(Settings::instance().getServerUri(), Settings::instance().getServerPort(), this);
connect(getUsersJob, SIGNAL(result(KJob*)), this, SLOT(onGotUserList(KJob*)));
getUsersJob->start();
}
void FBCoordinator::onGotUserList(KJob *job)
{
- const QString server = Settings::instance().getServerUri();
- const qint16 port = Settings::instance().getServerPort();
GetUserListJob *getUsersJob = static_cast<GetUserListJob*>(job);
- SequentialCompositeJob *generateJobs = new SequentialCompositeJob(this);
- SequentialCompositeJob *aggregateJobs = new SequentialCompositeJob(this);
foreach(const QString &user, getUsersJob->getUserList()) {
- generateJobs->addSubjob(new FBGeneratorJob(server, port, user, generateJobs));
- aggregateJobs->addSubjob(new FBAggregatorJob(server, port, user, aggregateJobs));
+ mUserQueue.enqueue(user);
}
- SequentialCompositeJob *allJobs = new SequentialCompositeJob(this);
- allJobs->addSubjob(generateJobs);
- allJobs->addSubjob(aggregateJobs);
- connect(allJobs, SIGNAL(result(KJob*)), this, SLOT(onGeneratorDone(KJob*)));
- allJobs->start();
+ processQueue();
}
+bool FBCoordinator::processQueue()
+{
+ if (mUserQueue.isEmpty()) {
+ return false;
+ }
+
+ const QString server = Settings::instance().getServerUri();
+ const qint16 port = Settings::instance().getServerPort();
+ const QString user = mUserQueue.dequeue();
+ kDebug() << user;
+ SequentialCompositeJob *userJob = new SequentialCompositeJob(this);
+// userJob->addSubjob(new FBGeneratorJob(server, port, user, userJob));
+// userJob->addSubjob(new FBAggregatorJob(server, port, user, userJob));
+ connect(userJob, SIGNAL(result(KJob*)), this, SLOT(onGeneratorDone(KJob*)));
+ userJob->start();
+ return true;
+}
void FBCoordinator::generateForUser(const QString& user)
{
@@ -72,6 +84,9 @@ void FBCoordinator::aggregateForUser(const QString& user)
void FBCoordinator::onGeneratorDone(KJob *job)
{
+ if (processQueue()) {
+ return;
+ }
kDebug() << "done";
emit quit();
}
diff --git a/fbdaemon/fbcoordinator.h b/fbdaemon/fbcoordinator.h
index d1531ef..9d7afea 100644
--- a/fbdaemon/fbcoordinator.h
+++ b/fbdaemon/fbcoordinator.h
@@ -19,6 +19,7 @@
#ifndef FBCOORDINATOR_H
#define FBCOORDINATOR_H
#include <QObject>
+#include <qqueue.h>
#include <kjob.h>
/**
@@ -51,6 +52,9 @@ private slots:
void onGeneratorDone(KJob*);
public slots:
void onGotUserList(KJob*);
+private:
+ bool processQueue();
+ QQueue<QString> mUserQueue;
};
#endif // FBCOORDINATOR_H
diff --git a/jobs/sequentialcompositejob.cpp b/jobs/sequentialcompositejob.cpp
index 854829e..c4e613e 100644
--- a/jobs/sequentialcompositejob.cpp
+++ b/jobs/sequentialcompositejob.cpp
@@ -61,5 +61,6 @@ void SequentialCompositeJob::start()
nextJob->start();
} else {
kWarning() << "no jobs";
+ emitResult();
}
}
More information about the commits
mailing list