1 /*
2     SPDX-FileCopyrightText: 2009 Andreas Pakulat <apaku@gmx.de>
3     SPDX-FileCopyrightText: 2010 Milian Wolff <mail@milianw.de>
4 
5     SPDX-License-Identifier: LGPL-2.0-or-later
6 */
7 
8 #ifndef KDEVPLATFORM_PLUGIN_EXTERNALSCRIPTJOB_H
9 #define KDEVPLATFORM_PLUGIN_EXTERNALSCRIPTJOB_H
10 
11 #include <QProcess>
12 #include <outputview/outputjob.h>
13 
14 #include "externalscriptitem.h"
15 
16 #include <KTextEditor/Range>
17 #include <QUrl>
18 
19 namespace KDevelop {
20 class ProcessLineMaker;
21 class OutputModel;
22 class Document;
23 }
24 
25 namespace KTextEditor {
26 class Document;
27 }
28 
29 class KProcess;
30 class ExternalScriptPlugin;
31 
32 class ExternalScriptJob
33     : public KDevelop::OutputJob
34 {
35     Q_OBJECT
36 
37 public:
38     ExternalScriptJob(ExternalScriptItem* item, const QUrl& url, ExternalScriptPlugin* parent);
39     void start() override;
40     KDevelop::OutputModel* model();
41 
42 protected:
43     bool doKill() override;
44 
45 private Q_SLOTS:
46     void processError(QProcess::ProcessError);
47     void processFinished(int, QProcess::ExitStatus);
48 
49     void receivedStdoutLines(const QStringList& lines);
50     void receivedStderrLines(const QStringList& lines);
51 
52 private:
53     void appendLine(const QString& l);
54 
55     KProcess* m_proc;
56     KDevelop::ProcessLineMaker* m_lineMaker;
57     ExternalScriptItem::OutputMode m_outputMode;
58     ExternalScriptItem::InputMode m_inputMode;
59     ExternalScriptItem::ErrorMode m_errorMode;
60     int m_filterMode;
61     KTextEditor::Document* m_document;
62     QUrl m_url;
63     /// invalid when whole doc should be replaced
64     KTextEditor::Range m_selectionRange;
65     KTextEditor::Cursor m_cursorPosition;
66     bool m_showOutput;
67 
68     QStringList m_stdout;
69     QStringList m_stderr;
70 };
71 
72 #endif // KDEVPLATFORM_PLUGIN_EXTERNALSCRIPTJOB_H
73