File indexing completed on 2024-05-19 15:49:21

0001 /*
0002    SPDX-FileCopyrightText: 2019-2023 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include "textgrammarcheck_export.h"
0010 #include <QObject>
0011 #include <QProcess>
0012 namespace TextGrammarCheck
0013 {
0014 class TEXTGRAMMARCHECK_EXPORT GrammalecteResultJob : public QObject
0015 {
0016     Q_OBJECT
0017 public:
0018     explicit GrammalecteResultJob(QObject *parent = nullptr);
0019     ~GrammalecteResultJob() override;
0020 
0021     enum class ErrorType {
0022         NoError = 0,
0023         TextIsEmpty = 1,
0024         PythonPathMissing = 2,
0025         GrammalecteMissing = 3,
0026         PythonPathNotExist = 4,
0027         GrammarlectCliNotExist = 5,
0028         Unknown = 6,
0029     };
0030 
0031     void start();
0032 
0033     Q_REQUIRED_RESULT bool canStart();
0034 
0035     Q_REQUIRED_RESULT QString text() const;
0036     void setText(const QString &text);
0037 
0038     Q_REQUIRED_RESULT QString pythonPath() const;
0039     void setPythonPath(const QString &pythonPath);
0040 
0041     Q_REQUIRED_RESULT QString grammarlecteCliPath() const;
0042     void setGrammarlecteCliPath(const QString &grammarlecteCliPath);
0043 
0044     Q_REQUIRED_RESULT QStringList arguments() const;
0045     void setArguments(const QStringList &arguments);
0046 
0047 Q_SIGNALS:
0048     void finished(const QString &result);
0049     void error(GrammalecteResultJob::ErrorType type);
0050 
0051 private:
0052     TEXTGRAMMARCHECK_NO_EXPORT void slotFinished(int exitCode, QProcess::ExitStatus exitStatus);
0053     TEXTGRAMMARCHECK_NO_EXPORT void receivedStdErr();
0054     TEXTGRAMMARCHECK_NO_EXPORT void receivedError();
0055     TEXTGRAMMARCHECK_NO_EXPORT void receivedStandardOutput();
0056     QStringList mArguments;
0057     QString mResult;
0058     QString mText;
0059     QString mPythonPath;
0060     QString mGrammarlecteCliPath;
0061     QString mLastError;
0062     GrammalecteResultJob::ErrorType mErrorType = ErrorType::NoError;
0063     QProcess *mProcess = nullptr;
0064 };
0065 }