| Chris@57 | 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */ | 
| Chris@57 | 2 | 
| Chris@57 | 3 /* | 
| Chris@57 | 4     EasyMercurial | 
| Chris@57 | 5 | 
| Chris@57 | 6     Based on HgExplorer by Jari Korhonen | 
| Chris@57 | 7     Copyright (c) 2010 Jari Korhonen | 
| Chris@57 | 8     Copyright (c) 2010 Chris Cannam | 
| Chris@57 | 9     Copyright (c) 2010 Queen Mary, University of London | 
| Chris@57 | 10 | 
| Chris@57 | 11     This program is free software; you can redistribute it and/or | 
| Chris@57 | 12     modify it under the terms of the GNU General Public License as | 
| Chris@57 | 13     published by the Free Software Foundation; either version 2 of the | 
| Chris@57 | 14     License, or (at your option) any later version.  See the file | 
| Chris@57 | 15     COPYING included with this distribution for more information. | 
| Chris@57 | 16 */ | 
| Chris@57 | 17 | 
| jtkorhonen@0 | 18 #ifndef HGRUNNER_H | 
| jtkorhonen@0 | 19 #define HGRUNNER_H | 
| jtkorhonen@0 | 20 | 
| Chris@109 | 21 #include "hgaction.h" | 
| Chris@109 | 22 | 
| jtkorhonen@0 | 23 #include <QProgressBar> | 
| jtkorhonen@0 | 24 #include <QProcess> | 
| jtkorhonen@0 | 25 #include <QByteArray> | 
| jtkorhonen@0 | 26 #include <QRect> | 
| Chris@75 | 27 #include <QFile> | 
| jtkorhonen@0 | 28 | 
| Chris@109 | 29 #include <deque> | 
| Chris@109 | 30 | 
| jtkorhonen@0 | 31 class HgRunner : public QProgressBar | 
| jtkorhonen@0 | 32 { | 
| jtkorhonen@0 | 33     Q_OBJECT | 
| jtkorhonen@0 | 34 | 
| Chris@62 | 35 public: | 
| Chris@62 | 36     HgRunner(QWidget * parent = 0); | 
| Chris@62 | 37     ~HgRunner(); | 
| jtkorhonen@0 | 38 | 
| Chris@109 | 39     void requestAction(HgAction action); | 
| jtkorhonen@0 | 40 | 
| Chris@109 | 41 signals: | 
| Chris@142 | 42     void commandCompleted(HgAction action, QString stdOut); | 
| Chris@142 | 43     void commandFailed(HgAction action, QString stdErr); | 
| jtkorhonen@0 | 44 | 
| Chris@109 | 45 private slots: | 
| Chris@109 | 46     void started(); | 
| Chris@109 | 47     void finished(int procExitCode, QProcess::ExitStatus procExitStatus); | 
| Chris@110 | 48     void dataReadyStdout(); | 
| Chris@110 | 49     void dataReadyStderr(); | 
| Chris@113 | 50     void dataReadyPty(); | 
| Chris@62 | 51 | 
| Chris@62 | 52 private: | 
| Chris@109 | 53     void checkQueue(); | 
| Chris@109 | 54     void startCommand(HgAction action); | 
| Chris@62 | 55     QString getHgBinaryName(); | 
| Chris@84 | 56     void closeProcInput(); | 
| Chris@109 | 57     void killCurrentCommand(); | 
| Chris@75 | 58 | 
| Chris@84 | 59     void noteUsername(QString); | 
| Chris@84 | 60     void noteRealm(QString); | 
| Chris@84 | 61     void getUsername(); | 
| Chris@84 | 62     void getPassword(); | 
| Chris@113 | 63     bool checkPrompts(QString); | 
| Chris@84 | 64 | 
| Chris@111 | 65     void openTerminal(); | 
| Chris@111 | 66     void closeTerminal(); | 
| Chris@111 | 67 | 
| Chris@161 | 68     bool unbundleExtension(); | 
| Chris@161 | 69 | 
| Chris@84 | 70     int m_ptyMasterFd; | 
| Chris@84 | 71     int m_ptySlaveFd; | 
| Chris@84 | 72     QString m_ptySlaveFilename; | 
| Chris@113 | 73     QFile *m_ptyFile; | 
| Chris@62 | 74 | 
| Chris@84 | 75     bool m_isRunning; | 
| Chris@84 | 76     QProcess *m_proc; | 
| Chris@110 | 77     QString m_stdout; | 
| Chris@110 | 78     QString m_stderr; | 
| Chris@84 | 79 | 
| Chris@84 | 80     QString m_userName; | 
| Chris@84 | 81     QString m_realm; | 
| Chris@161 | 82 | 
| Chris@161 | 83     QString m_extensionPath; | 
| Chris@62 | 84 | 
| Chris@109 | 85     typedef std::deque<HgAction> ActionQueue; | 
| Chris@109 | 86     ActionQueue m_queue; | 
| Chris@109 | 87     HgAction m_currentAction; | 
| jtkorhonen@0 | 88 }; | 
| jtkorhonen@0 | 89 | 
| jtkorhonen@0 | 90 #endif // HGRUNNER_H |