Add calculating stats with script

This commit is contained in:
2024-02-04 00:11:14 +01:00
parent 90035f44ed
commit dc2a781d3b
4 changed files with 57 additions and 20 deletions
+31
View File
@@ -3,6 +3,7 @@
#include <QFileInfo>
#include <QDebug>
#include "loadrunable.h"
#include "rawimage.h"
namespace Script
{
@@ -63,6 +64,11 @@ bool ScriptEngine::isMarked(const File *file) const
return _database->isMarked(file->absoluteFilePath());
}
QJSValue ScriptEngine::newObject()
{
return _jsEngine->newObject();
}
void ScriptEngine::run()
{
QJSValue jsPaths = _jsEngine->newArray(_paths.size());
@@ -73,7 +79,11 @@ void ScriptEngine::run()
QFile scriptFile(_scriptPath);
if(!scriptFile.open(QIODevice::ReadOnly))
{
emit newMessage("Failed to open " + _scriptPath, true);
emit finished();
return;
}
QTextStream stream(&scriptFile);
QString contents = stream.readAll();
@@ -226,6 +236,26 @@ bool File::convertTo(const QString &format)
return false;
}
QJSValue File::stats()
{
if(_stats.isUndefined())
{
ImageInfoData info;
std::shared_ptr<RawImage> rawImage;
loadImage(_path, info, rawImage);
rawImage->calcStats();
RawImage::Stats stats = rawImage->imageStats();
_stats = _engine->newObject();
_stats.setProperty("mean", stats.m_mean[0]);
_stats.setProperty("stddev", stats.m_stdDev[0]);
_stats.setProperty("median", stats.m_median[0]);
_stats.setProperty("min", stats.m_min[0]);
_stats.setProperty("max", stats.m_max[0]);
_stats.setProperty("mad", stats.m_mean[0]);
}
return _stats;
}
ScriptEngineThread::ScriptEngineThread(QObject *parent) : QObject(parent)
{
_thread = new QThread();
@@ -236,6 +266,7 @@ ScriptEngineThread::ScriptEngineThread(QObject *parent) : QObject(parent)
connect(_engine, &ScriptEngine::newMessage, this, &ScriptEngineThread::newMessage);
connect(_thread, &QThread::started, _engine, &ScriptEngine::run);
connect(_thread, &QThread::finished, _engine, &ScriptEngine::deleteLater);
connect(_engine, &ScriptEngine::destroyed, [this](){ _engine = nullptr; });
connect(_thread, &QThread::finished, _thread, &QThread::deleteLater);
connect(_thread, &QThread::finished, this, &ScriptEngineThread::finished);
}