#include "logviewermanager.h" LogViewerManager::LogViewerManager(std::shared_ptr logStream_, QPlainTextEdit* logTextEdit_, QObject *parent) : QObject(parent), logStream(logStream_), logTextEdit(logTextEdit_), controllerForBgThread(nullptr) { assert(logTextEdit!=nullptr); controllerForBgThread=new i2pd::qt::logviewer::Controller(*this); } namespace i2pd { namespace qt { namespace logviewer { QString Worker::pollAndShootATimerForInfiniteRetries() { std::shared_ptr logStream=logViewerManager.getLogStream(); if(!logStream)return ""; std::streamsize MAX_SZ=64*1024; char*buf=(char*)malloc(MAX_SZ*sizeof(char)); if(buf==nullptr)return ""; std::streamsize read=logStream->readsome(buf, MAX_SZ); if(read<0)read=0; QString ret=QString::fromUtf8(buf, read); free(buf); return ret; } Controller::Controller(LogViewerManager ¶meter1):logViewerManager(parameter1) { Worker *worker = new Worker(parameter1); worker->moveToThread(&workerThread); connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater); connect(this, &Controller::operate1, worker, &Worker::doWork1); connect(worker, &Worker::resultReady, ¶meter1, &LogViewerManager::appendPlainText_atGuiThread); workerThread.start(); timerId=startTimer(100/*millis*/); } } } }