Use only single database

This commit is contained in:
2025-03-18 14:46:08 +01:00
parent f30dd2a520
commit 6fd17fbdf5
7 changed files with 38 additions and 22 deletions
+3 -2
View File
@@ -67,7 +67,8 @@ void BatchProcessing::scanScriptDir()
if(idx>=0)_ui->scriptsList->setCurrentRow(idx); if(idx>=0)_ui->scriptsList->setCurrentRow(idx);
} }
BatchProcessing::BatchProcessing(QWidget *parent) : QDialog(parent) BatchProcessing::BatchProcessing(Database *database, QWidget *parent) : QDialog(parent)
, _database(database)
{ {
_ui = new Ui::BatchProcessing; _ui = new Ui::BatchProcessing;
_ui->setupUi(this); _ui->setupUi(this);
@@ -200,7 +201,7 @@ void BatchProcessing::runScript()
auto selectedItems = _ui->scriptsList->selectedItems(); auto selectedItems = _ui->scriptsList->selectedItems();
if(selectedItems.size()) if(selectedItems.size())
{ {
_engineThread = new Script::ScriptEngineThread(this); _engineThread = new Script::ScriptEngineThread(_database, this);
connect(_engineThread, &Script::ScriptEngineThread::newMessage, this, &BatchProcessing::newMessage); connect(_engineThread, &Script::ScriptEngineThread::newMessage, this, &BatchProcessing::newMessage);
connect(_engineThread, &Script::ScriptEngineThread::finished, this, &BatchProcessing::scriptFinished); connect(_engineThread, &Script::ScriptEngineThread::finished, this, &BatchProcessing::scriptFinished);
QStringList paths; QStringList paths;
+4 -1
View File
@@ -7,6 +7,8 @@
namespace Ui { class BatchProcessing; } namespace Ui { class BatchProcessing; }
class Database;
class BatchProcessing : public QDialog class BatchProcessing : public QDialog
{ {
Q_OBJECT Q_OBJECT
@@ -15,10 +17,11 @@ class BatchProcessing : public QDialog
QFileSystemWatcher _fileWatcher; QFileSystemWatcher _fileWatcher;
Script::ScriptEngineThread *_engineThread = nullptr; Script::ScriptEngineThread *_engineThread = nullptr;
QColor _textColor; QColor _textColor;
Database *_database;
private slots: private slots:
void scanScriptDir(); void scanScriptDir();
public: public:
explicit BatchProcessing(QWidget *parent = nullptr); explicit BatchProcessing(Database *database, QWidget *parent = nullptr);
~BatchProcessing(); ~BatchProcessing();
protected: protected:
void closeEvent(QCloseEvent *event); void closeEvent(QCloseEvent *event);
+12 -5
View File
@@ -15,7 +15,7 @@ bool Database::init(const QLatin1String &connectionName)
QString path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); QString path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
QDir dir(path); QDir dir(path);
QSqlDatabase database = QSqlDatabase::addDatabase("QSQLITE", connectionName); database = QSqlDatabase::addDatabase("QSQLITE", connectionName);
if(!dir.mkpath(".")) if(!dir.mkpath("."))
return false; return false;
@@ -27,7 +27,7 @@ bool Database::init(const QLatin1String &connectionName)
{ {
QSqlQuery query(database); QSqlQuery query(database);
query.exec("PRAGMA foreign_keys = ON"); query.exec("PRAGMA foreign_keys = ON");
int version = checkVersion(); int version = checkVersion(database);
if(version == 0) if(version == 0)
{ {
query.exec("PRAGMA user_version = 1"); query.exec("PRAGMA user_version = 1");
@@ -76,6 +76,14 @@ bool Database::init(const QLatin1String &connectionName)
} }
qDebug() << error.text(); qDebug() << error.text();
} }
else
{
qDebug() << "Failed to open database" << connectionName;
}
}
else
{
qDebug() << "Database is invalid";
} }
return false; return false;
} }
@@ -146,10 +154,9 @@ bool Database::checkError(QSqlQuery &query)
} }
} }
int Database::checkVersion() int Database::checkVersion(QSqlDatabase &db)
{ {
QSqlDatabase db = QSqlDatabase::database(); QSqlQuery query("PRAGMA user_version", db);
QSqlQuery query("PRAGMA user_version");
if(query.next()) if(query.next())
return query.value(0).toInt(); return query.value(0).toInt();
return -1; return -1;
+2 -1
View File
@@ -10,6 +10,7 @@
class Database : public QObject class Database : public QObject
{ {
Q_OBJECT Q_OBJECT
QSqlDatabase database;
QSqlQuery m_markQuery; QSqlQuery m_markQuery;
QSqlQuery m_unmarkQuery; QSqlQuery m_unmarkQuery;
QSqlQuery m_isMarkedQuery; QSqlQuery m_isMarkedQuery;
@@ -40,7 +41,7 @@ protected:
bool indexDir2(const QDir &dir, QProgressDialog *progress, QStringList &scannedDirs); bool indexDir2(const QDir &dir, QProgressDialog *progress, QStringList &scannedDirs);
bool indexFile(const QFileInfo &file); bool indexFile(const QFileInfo &file);
bool checkError(QSqlQuery &query); bool checkError(QSqlQuery &query);
int checkVersion(); int checkVersion(QSqlDatabase &db);
signals: signals:
void databaseChanged(); void databaseChanged();
}; };
+1 -1
View File
@@ -167,7 +167,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
fileMenu->addAction(tr("Reindex files"), this, SLOT(reindex())); fileMenu->addAction(tr("Reindex files"), this, SLOT(reindex()));
fileMenu->addAction(tr("Export database to CSV"), this, &MainWindow::exportCSV); fileMenu->addAction(tr("Export database to CSV"), this, &MainWindow::exportCSV);
fileMenu->addAction(tr("Batch processing"), Qt::Key_B | Qt::CTRL, [this](){ fileMenu->addAction(tr("Batch processing"), Qt::Key_B | Qt::CTRL, [this](){
BatchProcessing *batchProcessing = new BatchProcessing(this); BatchProcessing *batchProcessing = new BatchProcessing(m_database, this);
batchProcessing->exec(); batchProcessing->exec();
delete batchProcessing; delete batchProcessing;
}); });
+13 -9
View File
@@ -17,9 +17,9 @@
namespace Script namespace Script
{ {
ScriptEngine::ScriptEngine(BatchProcessing *parent) ScriptEngine::ScriptEngine(Database *database, BatchProcessing *parent)
: _jsEngine(new QJSEngine(this)) : _jsEngine(new QJSEngine(this))
, _database(new Database(this)) , _database(database)
, _parent(parent) , _parent(parent)
, _pool(new QThreadPool(this)) , _pool(new QThreadPool(this))
{ {
@@ -27,7 +27,6 @@ ScriptEngine::ScriptEngine(BatchProcessing *parent)
_jsEngine->globalObject().setProperty("core", core); _jsEngine->globalObject().setProperty("core", core);
QJSValue fitsRecordObject = _jsEngine->newQMetaObject(&FITSRecordModify::staticMetaObject); QJSValue fitsRecordObject = _jsEngine->newQMetaObject(&FITSRecordModify::staticMetaObject);
_jsEngine->globalObject().setProperty("FITSRecordModify", fitsRecordObject); _jsEngine->globalObject().setProperty("FITSRecordModify", fitsRecordObject);
_database->init(QLatin1String("scriptengine"));
_semaphore.release(_pool->maxThreadCount()); _semaphore.release(_pool->maxThreadCount());
_pool->setThreadPriority(QThread::LowPriority); _pool->setThreadPriority(QThread::LowPriority);
@@ -73,17 +72,22 @@ void ScriptEngine::log(const QString &message)
void ScriptEngine::mark(File *file) void ScriptEngine::mark(File *file)
{ {
_database->mark(file->absoluteFilePath()); QString path = file->absoluteFilePath();
QMetaObject::invokeMethod(_database, [this, path](){ _database->mark(path); }, Qt::QueuedConnection);
} }
void ScriptEngine::unmark(File *file) void ScriptEngine::unmark(File *file)
{ {
_database->unmark(file->absoluteFilePath()); QString path = file->absoluteFilePath();
QMetaObject::invokeMethod(_database, [this, path](){ _database->unmark(path); }, Qt::QueuedConnection);
} }
bool ScriptEngine::isMarked(const File *file) const bool ScriptEngine::isMarked(const File *file)
{ {
return _database->isMarked(file->absoluteFilePath()); bool ret;
QString path = file->absoluteFilePath();
QMetaObject::invokeMethod(_database, [this, path](){ _database->isMarked(path); }, Qt::BlockingQueuedConnection, &ret);
return ret;
} }
void ScriptEngine::setMaxThread(int maxthread) void ScriptEngine::setMaxThread(int maxthread)
@@ -765,11 +769,11 @@ QJSValue File::extractStars(bool hfr)
} }
#endif // PLATESOLVER #endif // PLATESOLVER
ScriptEngineThread::ScriptEngineThread(BatchProcessing *parent) : QObject(parent) ScriptEngineThread::ScriptEngineThread(Database *database, BatchProcessing *parent) : QObject(parent)
{ {
_thread = new QThread(); _thread = new QThread();
_thread->setObjectName("ScriptEngine"); _thread->setObjectName("ScriptEngine");
_engine = new ScriptEngine(parent); _engine = new ScriptEngine(database, parent);
_engine->moveToThread(_thread); _engine->moveToThread(_thread);
connect(_engine, &ScriptEngine::finished, _thread, &QThread::quit); connect(_engine, &ScriptEngine::finished, _thread, &QThread::quit);
connect(_engine, &ScriptEngine::newMessage, this, &ScriptEngineThread::newMessage); connect(_engine, &ScriptEngine::newMessage, this, &ScriptEngineThread::newMessage);
+3 -3
View File
@@ -31,7 +31,7 @@ class ScriptEngine : public QObject
QList<QPair<QString, QString>> _paths; QList<QPair<QString, QString>> _paths;
Solver *_solver = nullptr; Solver *_solver = nullptr;
public: public:
explicit ScriptEngine(BatchProcessing *parent = nullptr); explicit ScriptEngine(Database *database, BatchProcessing *parent = nullptr);
void setParams(const QString &scriptPath, const QList<QPair<QString, QString>> &paths, const QString &outputDir); void setParams(const QString &scriptPath, const QList<QPair<QString, QString>> &paths, const QString &outputDir);
void reportError(const QString &message); void reportError(const QString &message);
const QString& outputDir() const; const QString& outputDir() const;
@@ -40,7 +40,7 @@ public:
Q_INVOKABLE void log(const QString &message); Q_INVOKABLE void log(const QString &message);
Q_INVOKABLE void mark(File *file); Q_INVOKABLE void mark(File *file);
Q_INVOKABLE void unmark(File *file); Q_INVOKABLE void unmark(File *file);
Q_INVOKABLE bool isMarked(const File *file) const; Q_INVOKABLE bool isMarked(const File *file);
Q_INVOKABLE void setMaxThread(int maxthread); Q_INVOKABLE void setMaxThread(int maxthread);
Q_INVOKABLE void sync(); Q_INVOKABLE void sync();
Q_INVOKABLE QJSValue getString(const QString &label = QString(), const QString &text = QString()) const; Q_INVOKABLE QJSValue getString(const QString &label = QString(), const QString &text = QString()) const;
@@ -71,7 +71,7 @@ class ScriptEngineThread : public QObject
QThread *_thread; QThread *_thread;
ScriptEngine *_engine; ScriptEngine *_engine;
public: public:
ScriptEngineThread(BatchProcessing *parent = nullptr); ScriptEngineThread(Database *database, BatchProcessing *parent = nullptr);
~ScriptEngineThread(); ~ScriptEngineThread();
void setParams(const QString &scriptPath, const QList<QPair<QString, QString>> &paths, const QString &outputDir); void setParams(const QString &scriptPath, const QList<QPair<QString, QString>> &paths, const QString &outputDir);
void start(); void start();