1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
/*
* BluezQt - Asynchronous Bluez wrapper library
*
* SPDX-FileCopyrightText: 2014 Alejandro Fiestas Olivares <afiestas@kde.org>
* SPDX-FileCopyrightText: 2014 David Rosca <nowrep@gmail.com>
*
* SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
*/
#include "job.h"
#include "job_p.h"
#include <QEventLoop>
namespace BluezQt
{
JobPrivate::JobPrivate()
{
eventLoop = nullptr;
error = Job::NoError;
running = false;
finished = false;
killed = false;
}
Job::Job(QObject *parent)
: QObject(parent)
, d_ptr(new JobPrivate)
{
d_ptr->q_ptr = this;
}
Job::~Job()
{
delete d_ptr;
}
void Job::start()
{
d_func()->running = true;
QMetaObject::invokeMethod(this, "doStart", Qt::QueuedConnection);
}
void Job::kill()
{
Q_D(Job);
Q_ASSERT(!d->eventLoop);
d->running = false;
d->finished = true;
d->killed = true;
deleteLater();
}
void Job::emitResult()
{
Q_D(Job);
if (d->killed) {
return;
}
if (d->eventLoop) {
d->eventLoop->quit();
}
d->running = false;
d->finished = true;
doEmitResult();
deleteLater();
}
int Job::error() const
{
return d_func()->error;
}
QString Job::errorText() const
{
return d_func()->errorText;
}
bool Job::isRunning() const
{
return d_func()->running;
}
bool Job::isFinished() const
{
return d_func()->finished;
}
void Job::setError(int errorCode)
{
d_func()->error = errorCode;
}
void Job::setErrorText(const QString &errorText)
{
d_func()->errorText = errorText;
}
bool Job::exec()
{
Q_D(Job);
Q_ASSERT(!d->eventLoop);
QEventLoop loop(this);
d->eventLoop = &loop;
start();
d->eventLoop->exec(QEventLoop::ExcludeUserInputEvents);
d->running = false;
d->finished = true;
return d->error == NoError;
}
} // namespace BluezQt
#include "moc_job.cpp"
|