From 3e03fed1a2da8fcda77da5bab96a3d814a711419 Mon Sep 17 00:00:00 2001 From: Albert S Date: Fri, 27 May 2022 09:26:37 +0200 Subject: [PATCH] gui: IpcServer: Use IPCPreviewWorker --- gui/ipc.h | 11 ++++++++--- gui/ipcserver.cpp | 25 ++++++++++++++++++++----- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/gui/ipc.h b/gui/ipc.h index b09a161..efc875d 100644 --- a/gui/ipc.h +++ b/gui/ipc.h @@ -3,8 +3,13 @@ enum IPCCommand { - DocOpen, - FileOpen, - AddFile, + GeneratePreviews = 23, + StopGeneratePreviews, }; + +enum IPCReply +{ + FinishedGeneratePreviews, +}; + #endif // IPC_H diff --git a/gui/ipcserver.cpp b/gui/ipcserver.cpp index e4140b8..be2892d 100644 --- a/gui/ipcserver.cpp +++ b/gui/ipcserver.cpp @@ -9,6 +9,9 @@ #include "common.h" #include "databasefactory.h" #include "../shared/logger.h" +#include "renderconfig.h" +#include "rendertarget.h" +#include "ipcpreviewworker.h" IpcServer::IpcServer() { @@ -23,22 +26,34 @@ bool IpcServer::startSpawner(QString socketPath) void IpcServer::spawnerNewConnection() { - QScopedPointer socket{this->spawningServer.nextPendingConnection()}; - if(!socket.isNull()) + QLocalSocket *socket = this->spawningServer.nextPendingConnection(); + connect(socket, &QLocalSocket::disconnected, socket, &QLocalSocket::deleteLater); + if(socket != nullptr) { if(!socket->waitForReadyRead()) { return; } - QDataStream stream(socket.get()); + QDataStream stream(socket); IPCCommand command; stream >> command; if(command == GeneratePreviews) { + IPCPreviewWorker *worker = new IPCPreviewWorker(); RenderConfig renderConfig; QVector targets; - stream >> renderConfig; - stream >> targets; + + do + { + /* TODO: this is not entirely robust */ + socket->waitForReadyRead(100); + stream.startTransaction(); + stream >> renderConfig >> targets; + } while(!stream.commitTransaction() && socket->state() == QLocalSocket::ConnectedState); + + stream << targets.count(); + socket->flush(); + worker->start(renderConfig, targets, socket); } } }