Browse Source

add plantuml_cmd config for custom command

Le Tan 7 years ago
parent
commit
39a8bae529
5 changed files with 42 additions and 8 deletions
  1. 7 0
      src/resources/vnote.ini
  2. 2 0
      src/vconfigmanager.cpp
  3. 8 0
      src/vconfigmanager.h
  4. 20 7
      src/vplantumlhelper.cpp
  5. 5 1
      src/vplantumlhelper.h

+ 7 - 0
src/resources/vnote.ini

@@ -285,6 +285,13 @@ plantuml_jar=
 ; Double quotes to enclose arguments with spaces
 plantuml_args=
 
+; Custom PlantUML command to execute to convert a PlantUML diagram in local PlantUML
+; Read data definition from stdin and output diagram result to stdout
+; When set, other local PlantUML related settings are ignored
+; %0 will be replaced with the format string like svg or png
+; plantuml_cmd=/bin/sh -c \"cat | java -jar /opt/plantuml/plantuml.jar -charset UTF-8 -nbthread 4 -pipe -t%0\"
+plantuml_cmd=
+
 ; Graphviz Dot location
 graphviz_dot=
 

+ 2 - 0
src/vconfigmanager.cpp

@@ -292,6 +292,8 @@ void VConfigManager::initialize()
     QString plantUMLArgs = getConfigFromSettings("web", "plantuml_args").toString();
     m_plantUMLArgs = VUtils::parseCombinedArgString(plantUMLArgs);
 
+    m_plantUMLCmd = getConfigFromSettings("web", "plantuml_cmd").toString();
+
     m_enableGraphviz = getConfigFromSettings("global", "enable_graphviz").toBool();
     m_graphvizDot = getConfigFromSettings("web", "graphviz_dot").toString();
 }

+ 8 - 0
src/vconfigmanager.h

@@ -479,6 +479,7 @@ public:
     void setPlantUMLJar(const QString &p_jarPath);
 
     const QStringList &getPlantUMLArgs() const;
+    const QString &getPlantUMLCmd() const;
 
     const QString &getGraphvizDot() const;
     void setGraphvizDot(const QString &p_dotPath);
@@ -892,6 +893,8 @@ private:
 
     QStringList m_plantUMLArgs;
 
+    QString m_plantUMLCmd;
+
     // The name of the config file in each directory, obsolete.
     // Use c_dirConfigFile instead.
     static const QString c_obsoleteDirConfigFile;
@@ -2288,6 +2291,11 @@ inline const QStringList &VConfigManager::getPlantUMLArgs() const
     return m_plantUMLArgs;
 }
 
+inline const QString &VConfigManager::getPlantUMLCmd() const
+{
+    return m_plantUMLCmd;
+}
+
 inline const QString &VConfigManager::getGraphvizDot() const
 {
     return m_graphvizDot;

+ 20 - 7
src/vplantumlhelper.cpp

@@ -14,7 +14,7 @@ extern VConfigManager *g_config;
 VPlantUMLHelper::VPlantUMLHelper(QObject *p_parent)
     : QObject(p_parent)
 {
-    prepareCommand(m_program, m_args);
+    prepareCommand(m_customCmd, m_program, m_args);
 }
 
 void VPlantUMLHelper::processAsync(int p_id,
@@ -29,12 +29,18 @@ void VPlantUMLHelper::processAsync(int p_id,
     connect(process, SIGNAL(finished(int, QProcess::ExitStatus)),
             this, SLOT(handleProcessFinished(int, QProcess::ExitStatus)));
 
-    QStringList args(m_args);
-    args << ("-t" + p_format);
-
-    qDebug() << m_program << args;
+    if (m_customCmd.isEmpty()) {
+        QStringList args(m_args);
+        args << ("-t" + p_format);
+        qDebug() << m_program << args;
+        process->start(m_program, args);
+    } else {
+        QString cmd(m_customCmd);
+        cmd.replace("%0", p_format);
+        qDebug() << cmd;
+        process->start(cmd);
+    }
 
-    process->start(m_program, args);
     if (process->write(p_text.toUtf8()) == -1) {
         qWarning() << "fail to write to QProcess:" << process->errorString();
     }
@@ -42,8 +48,15 @@ void VPlantUMLHelper::processAsync(int p_id,
     process->closeWriteChannel();
 }
 
-void VPlantUMLHelper::prepareCommand(QString &p_program, QStringList &p_args) const
+void VPlantUMLHelper::prepareCommand(QString &p_customCmd,
+                                     QString &p_program,
+                                     QStringList &p_args) const
 {
+    p_customCmd = g_config->getPlantUMLCmd();
+    if (!p_customCmd.isEmpty()) {
+        return;
+    }
+
     p_program = "java";
 
     p_args << "-jar" << g_config->getPlantUMLJar();

+ 5 - 1
src/vplantumlhelper.h

@@ -19,7 +19,7 @@ public:
                       const QString &p_format,
                       const QString &p_text);
 
-    void prepareCommand(QString &p_cmd, QStringList &p_args) const;
+    void prepareCommand(QString &p_customCmd, QString &p_cmd, QStringList &p_args) const;
 
 signals:
     void resultReady(int p_id, TimeStamp p_timeStamp, const QString &p_format, const QString &p_result);
@@ -29,7 +29,11 @@ private slots:
 
 private:
     QString m_program;
+
     QStringList m_args;
+
+    // When not empty, @m_program and @m_args will be ignored.
+    QString m_customCmd;
 };
 
 #endif // VPLANTUMLHELPER_H