File indexing completed on 2025-02-16 04:50:06

0001 /*
0002     SPDX-FileCopyrightText: 2017-2019 Krzysztof Nowicki <krissn@op.pl>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "fakeewsserverthread.h"
0008 
0009 #include <QEventLoop>
0010 
0011 #include "fakeewsserver_debug.h"
0012 
0013 FakeEwsServerThread::FakeEwsServerThread(QObject *parent)
0014     : QThread(parent)
0015     , mPortNumber(0)
0016     , mIsRunning(0)
0017 {
0018 }
0019 
0020 FakeEwsServerThread::~FakeEwsServerThread() = default;
0021 
0022 void FakeEwsServerThread::run()
0023 {
0024     qCInfoNC(EWSFAKE_LOG) << QStringLiteral("Starting fake server thread");
0025     mMutex.lock();
0026     mServer.reset(new FakeEwsServer(nullptr));
0027     bool ok = mServer->start();
0028     mMutex.unlock();
0029 
0030     if (ok) {
0031         qCInfoNC(EWSFAKE_LOG) << QStringLiteral("Fake server thread started.");
0032         mPortNumber = mServer->portNumber();
0033         Q_EMIT serverStarted(ok);
0034         mIsRunning = 1;
0035         exec();
0036         qCInfoNC(EWSFAKE_LOG) << QStringLiteral("Fake server thread terminating.");
0037     } else {
0038         Q_EMIT serverStarted(ok);
0039         qCInfoNC(EWSFAKE_LOG) << QStringLiteral("Fake server thread start failed.");
0040     }
0041 
0042     mMutex.lock();
0043     mServer.reset();
0044     mMutex.unlock();
0045 }
0046 
0047 void FakeEwsServerThread::setDialog(const FakeEwsServer::DialogEntry::List &dialog)
0048 {
0049     QMutexLocker lock(&mMutex);
0050 
0051     if (mServer) {
0052         mServer->setDialog(dialog);
0053     }
0054 }
0055 
0056 void FakeEwsServerThread::setDefaultReplyCallback(const FakeEwsServer::DialogEntry::ReplyCallback &defaultReplyCallback)
0057 {
0058     QMutexLocker lock(&mMutex);
0059 
0060     if (mServer) {
0061         mServer->setDefaultReplyCallback(defaultReplyCallback);
0062     }
0063 }
0064 
0065 void FakeEwsServerThread::setOverrideReplyCallback(const FakeEwsServer::DialogEntry::ReplyCallback &overrideReplyCallback)
0066 {
0067     QMutexLocker lock(&mMutex);
0068 
0069     if (mServer) {
0070         mServer->setOverrideReplyCallback(overrideReplyCallback);
0071     }
0072 }
0073 
0074 void FakeEwsServerThread::queueEventsXml(const QStringList &events)
0075 {
0076     QMutexLocker lock(&mMutex);
0077 
0078     if (mServer) {
0079         metaObject()->invokeMethod(this, "doQueueEventsXml", Q_ARG(QStringList, events));
0080     }
0081 }
0082 
0083 void FakeEwsServerThread::doQueueEventsXml(const QStringList &events)
0084 {
0085     mServer->queueEventsXml(events);
0086 }
0087 
0088 bool FakeEwsServerThread::waitServerStarted() const
0089 {
0090     QEventLoop loop;
0091     {
0092         QMutexLocker lock(&mMutex);
0093         if (isFinished()) {
0094             return false;
0095         }
0096         if (mIsRunning) {
0097             return true;
0098         }
0099         connect(this, &FakeEwsServerThread::serverStarted, this, [&loop](bool ok) {
0100             loop.exit(ok ? 1 : 0);
0101         });
0102     }
0103     return loop.exec();
0104 }
0105 
0106 #include "moc_fakeewsserverthread.cpp"