File indexing completed on 2024-04-21 05:44:09

0001 /*
0002     SPDX-FileCopyrightText: 2001-2003 Otto Bruggeman <otto.bruggeman@home.nl>
0003     SPDX-FileCopyrightText: 2001-2003 John Firebaugh <jfirebaugh@kde.org>
0004     SPDX-FileCopyrightText: 2008 Kevin Kofler <kevin.kofler@chello.at>
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 #ifndef KOMPAREPROCESS_H
0010 #define KOMPAREPROCESS_H
0011 
0012 // lib
0013 #include "global.h"
0014 // KF
0015 #include <KProcess>
0016 // Std
0017 #include <memory>
0018 
0019 class QTextDecoder;
0020 class QTextCodec;
0021 
0022 namespace KompareDiff2
0023 {
0024 class DiffSettings;
0025 }
0026 
0027 class KompareProcess : public KProcess
0028 {
0029     Q_OBJECT
0030 
0031 public:
0032     KompareProcess(KompareDiff2::DiffSettings *diffSettings,
0033                    KompareDiff2::DiffMode mode,
0034                    const QString &source,
0035                    const QString &destination,
0036                    const QString &directory = QString(),
0037                    KompareDiff2::Mode = KompareDiff2::UnknownMode);
0038     ~KompareProcess() override;
0039 
0040 public:
0041     void start();
0042 
0043     QString diffOutput() const
0044     {
0045         return m_stdout;
0046     }
0047     QString stdOut() const
0048     {
0049         return m_stdout;
0050     }
0051     QString stdErr() const
0052     {
0053         return m_stderr;
0054     }
0055 
0056     void setEncoding(const QString &encoding);
0057 
0058 Q_SIGNALS:
0059     void diffHasFinished(bool finishedNormally);
0060 
0061 private:
0062     void writeDefaultCommandLine();
0063     void writeCommandLine();
0064 
0065 private Q_SLOTS:
0066     void slotFinished(int, QProcess::ExitStatus);
0067 
0068 private:
0069     KompareDiff2::DiffSettings *m_diffSettings;
0070     const KompareDiff2::DiffMode m_diffMode;
0071     const KompareDiff2::Mode m_mode;
0072     QString m_customString; // Used when a comparison between a file and a string is requested
0073     QString m_stdout;
0074     QString m_stderr;
0075     std::unique_ptr<QTextDecoder> m_textDecoder;
0076     QTextCodec *m_codec = nullptr;
0077 };
0078 
0079 #endif