Add running script as CLI option
This commit is contained in:
+51
-4
@@ -18,7 +18,6 @@
|
||||
#include "chartgraph.h"
|
||||
|
||||
#ifdef Q_OS_LINUX
|
||||
#include <QCloseEvent>
|
||||
#include <QDBusConnection>
|
||||
#include <QDBusMessage>
|
||||
#endif
|
||||
@@ -99,12 +98,12 @@ BatchProcessing::BatchProcessing(Database *database, QWidget *parent) : QDialog(
|
||||
qWarning() << "Failed to get app data location";
|
||||
}
|
||||
|
||||
connect(_ui->addFilesButton, &QPushButton::released, this, &BatchProcessing::addFiles);
|
||||
connect(_ui->addDirButton, &QPushButton::released, this, &BatchProcessing::addDir);
|
||||
connect(_ui->addFilesButton, &QPushButton::released, this, static_cast<void (BatchProcessing::*)()>(&BatchProcessing::addFiles));
|
||||
connect(_ui->addDirButton, &QPushButton::released, this, static_cast<void (BatchProcessing::*)()>(&BatchProcessing::addDir));
|
||||
connect(_ui->addMarkedButton, &QPushButton::released, this, &BatchProcessing::addMarked);
|
||||
connect(_ui->removeButton, &QPushButton::released, this, &BatchProcessing::removePath);
|
||||
connect(_ui->removeAllButton, &QPushButton::released, this, &BatchProcessing::removeAllPaths);
|
||||
connect(_ui->startButton, &QPushButton::released, this, &BatchProcessing::runScript);
|
||||
connect(_ui->startButton, &QPushButton::released, this, static_cast<void (BatchProcessing::*)()>(&BatchProcessing::runScript));
|
||||
connect(_ui->stopButton, &QPushButton::released, this, &BatchProcessing::stopScript);
|
||||
connect(_ui->browseButton, &QPushButton::released, this, &BatchProcessing::browse);
|
||||
connect(_ui->openScriptsButton, &QPushButton::released, this, &BatchProcessing::openScriptDir);
|
||||
@@ -148,6 +147,17 @@ BatchProcessing::~BatchProcessing()
|
||||
delete _ui;
|
||||
}
|
||||
|
||||
void BatchProcessing::setOutputDir(const QString &output)
|
||||
{
|
||||
_ui->outputPath->setText(output);
|
||||
}
|
||||
|
||||
void BatchProcessing::setPaths(const QStringList &paths)
|
||||
{
|
||||
_ui->pathsList->addItems(paths);
|
||||
refreshPaths();
|
||||
}
|
||||
|
||||
void BatchProcessing::closeEvent(QCloseEvent *event)
|
||||
{
|
||||
if(_engineThread)
|
||||
@@ -266,6 +276,35 @@ void BatchProcessing::runScript()
|
||||
else
|
||||
{
|
||||
QMessageBox::warning(this, tr("Invalid output directory"), tr("Output directory path doesn't exist or is not writable"));
|
||||
delete _engineThread;
|
||||
_engineThread = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void BatchProcessing::runScript(const QString &script, bool exit)
|
||||
{
|
||||
_ui->log->clear();
|
||||
{
|
||||
_engineThread = new Script::ScriptEngineThread(_database, this);
|
||||
connect(_engineThread, &Script::ScriptEngineThread::newMessage, this, &BatchProcessing::newMessage);
|
||||
connect(_engineThread, &Script::ScriptEngineThread::newMessage, this, &BatchProcessing::newMessageCli);
|
||||
connect(_engineThread, &Script::ScriptEngineThread::finished, this, &BatchProcessing::scriptFinished);
|
||||
if(exit)connect(_engineThread, &Script::ScriptEngineThread::finished, this, &BatchProcessing::accept);
|
||||
|
||||
QFileInfo outDir(_ui->outputPath->text());
|
||||
if(outDir.exists() && outDir.isWritable())
|
||||
{
|
||||
_engineThread->setParams(script, _paths, _ui->outputPath->text());
|
||||
_engineThread->start();
|
||||
_ui->startButton->setEnabled(false);
|
||||
_ui->stopButton->setEnabled(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
QMessageBox::warning(this, tr("Invalid output directory"), tr("Output directory path doesn't exist or is not writable"));
|
||||
delete _engineThread;
|
||||
_engineThread = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -293,6 +332,14 @@ void BatchProcessing::newMessage(const QString &message, bool error)
|
||||
_ui->log->append(message);
|
||||
}
|
||||
|
||||
void BatchProcessing::newMessageCli(const QString &message, bool error)
|
||||
{
|
||||
if(error)
|
||||
qWarning() << message;
|
||||
else
|
||||
qDebug() << message;
|
||||
}
|
||||
|
||||
QJSValue BatchProcessing::getString(const QString &label, const QString &text)
|
||||
{
|
||||
bool ok = false;
|
||||
|
||||
@@ -30,6 +30,8 @@ private slots:
|
||||
public:
|
||||
explicit BatchProcessing(Database *database, QWidget *parent = nullptr);
|
||||
~BatchProcessing();
|
||||
void setOutputDir(const QString &output);
|
||||
void setPaths(const QStringList &paths);
|
||||
protected:
|
||||
void closeEvent(QCloseEvent *event);
|
||||
void refreshPaths();
|
||||
@@ -42,9 +44,11 @@ public slots:
|
||||
void browse();
|
||||
void openScriptDir();
|
||||
void runScript();
|
||||
void runScript(const QString &script, bool exit);
|
||||
void stopScript();
|
||||
void scriptFinished();
|
||||
void newMessage(const QString &message, bool error);
|
||||
void newMessageCli(const QString &message, bool error);
|
||||
|
||||
QJSValue getString(const QString &label, const QString &text);
|
||||
QJSValue getInt(const QString &label, int value);
|
||||
|
||||
+17
-2
@@ -35,7 +35,10 @@ int main(int argc, char *argv[])
|
||||
cmd.addOption({"gles", "Use OpenGL ES. This is default on ARM platform."});
|
||||
cmd.addOption({{"thumb", "thumbnail"}, "Generate thumbnail and save it to path.", "path"});
|
||||
cmd.addOption({{"s", "size"}, "Size of the thumbnails in pixels (default: 128)", "size", "128"});
|
||||
cmd.addPositionalArgument("file", "File to open");
|
||||
cmd.addPositionalArgument("file", "Files or paths to open");
|
||||
cmd.addOption({"script", "Execute script", "script"});
|
||||
cmd.addOption({"outdir", "Output dir for script (default: CWD)", "dir", "."});
|
||||
cmd.addOption({"noexit", "Do not exit application when script finish"});
|
||||
cmd.addHelpOption();
|
||||
QStringList cmdArgs;
|
||||
for(int i = 0; i < argc; i++)
|
||||
@@ -107,7 +110,7 @@ int main(int argc, char *argv[])
|
||||
MainWindow w;
|
||||
w.show();
|
||||
|
||||
if(!cmd.positionalArguments().isEmpty())
|
||||
if(!cmd.positionalArguments().isEmpty() && !cmd.isSet("script"))
|
||||
{
|
||||
QStringList files = cmd.positionalArguments();
|
||||
QStringList paths;
|
||||
@@ -124,5 +127,17 @@ int main(int argc, char *argv[])
|
||||
w.loadFiles(paths);
|
||||
}
|
||||
|
||||
if(cmd.isSet("script"))
|
||||
{
|
||||
QStringList paths = cmd.positionalArguments();
|
||||
QString script = cmd.value("script");
|
||||
QString outdir = cmd.value("outdir");
|
||||
if(!QDir::isAbsolutePath(script))script = QDir::currentPath() + "/" + script;
|
||||
if(!QDir::isAbsolutePath(outdir))outdir = QDir::currentPath() + "/" + outdir;
|
||||
bool noexit = cmd.isSet("noexit");
|
||||
if(!noexit)w.hide();
|
||||
w.runScript(script, outdir, paths, !noexit);
|
||||
}
|
||||
|
||||
return a.exec();
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <QDesktopServices>
|
||||
#include <QJsonDocument>
|
||||
#include <QNetworkReply>
|
||||
#include <QTimer>
|
||||
#include "loadrunable.h"
|
||||
#include "markedfiles.h"
|
||||
#include "about.h"
|
||||
@@ -847,6 +848,20 @@ void MainWindow::openFileManager()
|
||||
#endif
|
||||
}
|
||||
|
||||
void MainWindow::runScript(const QString &script, const QString &outdir, const QStringList &paths, bool exit)
|
||||
{
|
||||
BatchProcessing *batchProcessing = new BatchProcessing(m_database, this);
|
||||
batchProcessing->setOutputDir(outdir);
|
||||
batchProcessing->setPaths(paths);
|
||||
if(exit)batchProcessing->hide();
|
||||
QTimer::singleShot(500, [batchProcessing, script, exit](){
|
||||
batchProcessing->runScript(script, exit);
|
||||
batchProcessing->exec();
|
||||
delete batchProcessing;
|
||||
if(exit)QCoreApplication::exit();
|
||||
});
|
||||
}
|
||||
|
||||
void MainWindow::updateWindowTitle()
|
||||
{
|
||||
ImagePtr ptr = m_ringList->currentImage();
|
||||
|
||||
Reference in New Issue
Block a user