Use only single database
This commit is contained in:
+3
-2
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user