diff --git a/src/resources/vnote.ini b/src/resources/vnote.ini index 1e68b0b2..20b0c327 100644 --- a/src/resources/vnote.ini +++ b/src/resources/vnote.ini @@ -281,6 +281,10 @@ plantuml_server=http://www.plantuml.com/plantuml ; PlantUML JAR location plantuml_jar= +; Additional PlantUML arguments +; Double quotes to enclose arguments with spaces +plantuml_args= + ; Graphviz Dot location graphviz_dot= diff --git a/src/vconfigmanager.cpp b/src/vconfigmanager.cpp index 8b6fa032..d0dec726 100644 --- a/src/vconfigmanager.cpp +++ b/src/vconfigmanager.cpp @@ -289,6 +289,9 @@ void VConfigManager::initialize() m_plantUMLServer = getConfigFromSettings("web", "plantuml_server").toString(); m_plantUMLJar = getConfigFromSettings("web", "plantuml_jar").toString(); + QString plantUMLArgs = getConfigFromSettings("web", "plantuml_args").toString(); + m_plantUMLArgs = VUtils::parseCombinedArgString(plantUMLArgs); + m_enableGraphviz = getConfigFromSettings("global", "enable_graphviz").toBool(); m_graphvizDot = getConfigFromSettings("web", "graphviz_dot").toString(); } diff --git a/src/vconfigmanager.h b/src/vconfigmanager.h index ff202d7b..4c5928ac 100644 --- a/src/vconfigmanager.h +++ b/src/vconfigmanager.h @@ -478,6 +478,8 @@ public: const QString &getPlantUMLJar() const; void setPlantUMLJar(const QString &p_jarPath); + const QStringList &getPlantUMLArgs() const; + const QString &getGraphvizDot() const; void setGraphvizDot(const QString &p_dotPath); @@ -888,6 +890,8 @@ private: QString m_plantUMLJar; + QStringList m_plantUMLArgs; + // The name of the config file in each directory, obsolete. // Use c_dirConfigFile instead. static const QString c_obsoleteDirConfigFile; @@ -2279,6 +2283,11 @@ inline void VConfigManager::setPlantUMLJar(const QString &p_jarPath) setConfigToSettings("web", "plantuml_jar", p_jarPath); } +inline const QStringList &VConfigManager::getPlantUMLArgs() const +{ + return m_plantUMLArgs; +} + inline const QString &VConfigManager::getGraphvizDot() const { return m_graphvizDot; diff --git a/src/vgraphvizhelper.cpp b/src/vgraphvizhelper.cpp index f8272372..b6d17ee9 100644 --- a/src/vgraphvizhelper.cpp +++ b/src/vgraphvizhelper.cpp @@ -32,7 +32,10 @@ void VGraphvizHelper::processAsync(int p_id, TimeStamp p_timeStamp, const QStrin qDebug() << m_program << args; process->start(m_program, args); - process->write(p_text.toUtf8()); + if (process->write(p_text.toUtf8()) == -1) { + qWarning() << "fail to write to QProcess:" << process->errorString(); + } + process->closeWriteChannel(); } @@ -54,7 +57,12 @@ void VGraphvizHelper::handleProcessFinished(int p_exitCode, QProcess::ExitStatus int id = process->property(TaskIdProperty).toInt(); QString format = process->property(TaskFormatProperty).toString(); TimeStamp timeStamp = process->property(TaskTimeStampProperty).toULongLong(); - qDebug() << "process finished" << id << timeStamp << format << p_exitCode << p_exitStatus; + qDebug() << QString("Graphviz finished: id %1 timestamp %2 format %3 exitcode %4 exitstatus %5") + .arg(id) + .arg(timeStamp) + .arg(format) + .arg(p_exitCode) + .arg(p_exitStatus); bool failed = true; if (p_exitStatus == QProcess::NormalExit) { if (p_exitCode < 0) { @@ -72,13 +80,17 @@ void VGraphvizHelper::handleProcessFinished(int p_exitCode, QProcess::ExitStatus qWarning() << "fail to start Graphviz process" << p_exitCode << p_exitStatus; } - if (failed) { - QByteArray errBa = process->readAllStandardError(); - if (!errBa.isEmpty()) { - QString errStr(QString::fromLocal8Bit(errBa)); + QByteArray errBa = process->readAllStandardError(); + if (!errBa.isEmpty()) { + QString errStr(QString::fromLocal8Bit(errBa)); + if (failed) { qWarning() << "Graphviz stderr:" << errStr; + } else { + qDebug() << "Graphviz stderr:" << errStr; } + } + if (failed) { emit resultReady(id, timeStamp, format, ""); } diff --git a/src/vplantumlhelper.cpp b/src/vplantumlhelper.cpp index 3904526a..745a800b 100644 --- a/src/vplantumlhelper.cpp +++ b/src/vplantumlhelper.cpp @@ -35,7 +35,10 @@ void VPlantUMLHelper::processAsync(int p_id, qDebug() << m_program << args; process->start(m_program, args); - process->write(p_text.toUtf8()); + if (process->write(p_text.toUtf8()) == -1) { + qWarning() << "fail to write to QProcess:" << process->errorString(); + } + process->closeWriteChannel(); } @@ -56,6 +59,7 @@ void VPlantUMLHelper::prepareCommand(QString &p_program, QStringList &p_args) co } p_args << "-pipe"; + p_args << g_config->getPlantUMLArgs(); } void VPlantUMLHelper::handleProcessFinished(int p_exitCode, QProcess::ExitStatus p_exitStatus) @@ -64,7 +68,12 @@ void VPlantUMLHelper::handleProcessFinished(int p_exitCode, QProcess::ExitStatus int id = process->property(TaskIdProperty).toInt(); QString format = process->property(TaskFormatProperty).toString(); TimeStamp timeStamp = process->property(TaskTimeStampProperty).toULongLong(); - qDebug() << "process finished" << id << timeStamp << format << p_exitCode << p_exitStatus; + qDebug() << QString("PlantUML finished: id %1 timestamp %2 format %3 exitcode %4 exitstatus %5") + .arg(id) + .arg(timeStamp) + .arg(format) + .arg(p_exitCode) + .arg(p_exitStatus); bool failed = true; if (p_exitStatus == QProcess::NormalExit) { if (p_exitCode < 0) { @@ -82,13 +91,17 @@ void VPlantUMLHelper::handleProcessFinished(int p_exitCode, QProcess::ExitStatus qWarning() << "fail to start PlantUML process" << p_exitCode << p_exitStatus; } - if (failed) { - QByteArray errBa = process->readAllStandardError(); - if (!errBa.isEmpty()) { - QString errStr(QString::fromLocal8Bit(errBa)); + QByteArray errBa = process->readAllStandardError(); + if (!errBa.isEmpty()) { + QString errStr(QString::fromLocal8Bit(errBa)); + if (failed) { qWarning() << "PlantUML stderr:" << errStr; + } else { + qDebug() << "PlantUML stderr:" << errStr; } + } + if (failed) { emit resultReady(id, timeStamp, format, ""); }