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
+13 -10
View File
@@ -1,5 +1,6 @@
#include "batchprocessing.h"
#include "ui_batchprocessing.h"
#include <functional>
#include <QDir>
#include <QFileDialog>
#include <QStandardPaths>
@@ -16,28 +17,30 @@
#include <QMessageBox>
#endif
void scanDirectory(const QString &path, QStringList &files)
QStringList scanDirectories(const QStringList &paths)
{
QStringList files;
QStringList scannedDirs;
std::function<void(const QString &path)> scanDirectory = [&](const QString &path)
{
QFileInfo info(path);
if(info.isDir())
if(info.isDir() && !scannedDirs.contains(info.canonicalPath()))
{
scannedDirs.append(info.canonicalPath());
QDir dir(path);
QStringList entries = dir.entryList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);
for(QString &entry : entries)
scanDirectory(dir.absoluteFilePath(entry), files);
scanDirectory(dir.absoluteFilePath(entry));
}
else if(info.isFile())
{
files.append(path);
}
}
QStringList scanDirectories(const QStringList &paths)
{
QStringList files;
};
for(const QString &path : paths)
scanDirectory(path, files);
scanDirectory(path);
return files;
}
@@ -205,7 +208,7 @@ void BatchProcessing::scriptFinished()
_ui->startButton->setEnabled(true);
_ui->stopButton->setEnabled(false);
qDebug() << "script finished";
delete _engineThread;
_engineThread->deleteLater();
_engineThread = nullptr;
}
+2 -2
View File
@@ -154,11 +154,11 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
fileMenu->addAction(tr("Index directory"), this, SLOT(indexDir()));
fileMenu->addAction(tr("Reindex files"), this, SLOT(reindex()));
fileMenu->addAction(tr("Export database to CSV"), this, &MainWindow::exportCSV);
/*fileMenu->addAction(tr("Batch processing"), [this](){
fileMenu->addAction(tr("Batch processing"), [this](){
BatchProcessing *batchProcessing = new BatchProcessing(this);
batchProcessing->exec();
delete batchProcessing;
}, Qt::Key_B | Qt::CTRL);*/
}, Qt::Key_B | Qt::CTRL);
fileMenu->addSeparator();
QAction *liveModeAction = fileMenu->addAction(tr("Live mode"), this, SLOT(liveMode(bool)));
liveModeAction->setCheckable(true);
+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);
}
+3
View File
@@ -31,6 +31,7 @@ public:
Q_INVOKABLE void mark(File *file);
Q_INVOKABLE void unmark(File *file);
Q_INVOKABLE bool isMarked(const File *file) const;
QJSValue newObject();
public slots:
void run();
signals:
@@ -64,6 +65,7 @@ class File : public QObject
QMap<QString, QString> _fitsKeywords;
void loadFitsKeywords();
bool mkpath(const QString &path) const;
QJSValue _stats;
public:
explicit File(const QString &path, ScriptEngine *engine);
Q_INVOKABLE QString fileName() const;
@@ -79,6 +81,7 @@ public:
Q_INVOKABLE bool copy(const QString &newpath) const;
Q_INVOKABLE bool move(const QString &newpath) const;
Q_INVOKABLE bool convertTo(const QString &format);
Q_INVOKABLE QJSValue stats();
};
}