2016-09-03 19:39:43 +02:00
|
|
|
#include "./syncthingprocess.h"
|
|
|
|
|
|
|
|
#include <QTimer>
|
|
|
|
|
2018-04-02 20:26:00 +02:00
|
|
|
using namespace ChronoUtilities;
|
|
|
|
|
2016-09-03 19:39:43 +02:00
|
|
|
namespace Data {
|
|
|
|
|
2018-04-11 23:15:15 +02:00
|
|
|
SyncthingProcess *SyncthingProcess::s_mainInstance = nullptr;
|
|
|
|
|
2017-05-01 03:34:43 +02:00
|
|
|
SyncthingProcess::SyncthingProcess(QObject *parent)
|
|
|
|
: QProcess(parent)
|
2018-04-02 20:26:00 +02:00
|
|
|
, m_manuallyStopped(false)
|
2016-09-03 19:39:43 +02:00
|
|
|
{
|
2018-04-02 23:29:39 +02:00
|
|
|
m_killTimer.setInterval(3000);
|
|
|
|
m_killTimer.setSingleShot(true);
|
2016-09-03 19:39:43 +02:00
|
|
|
setProcessChannelMode(QProcess::MergedChannels);
|
2018-04-02 20:26:00 +02:00
|
|
|
connect(this, &SyncthingProcess::started, this, &SyncthingProcess::handleStarted);
|
2017-05-01 03:34:43 +02:00
|
|
|
connect(this, static_cast<void (SyncthingProcess::*)(int exitCode, QProcess::ExitStatus exitStatus)>(&SyncthingProcess::finished), this,
|
|
|
|
&SyncthingProcess::handleFinished);
|
2018-04-02 23:29:39 +02:00
|
|
|
connect(&m_killTimer, &QTimer::timeout, this, &SyncthingProcess::confirmKill);
|
2016-09-03 19:39:43 +02:00
|
|
|
}
|
|
|
|
|
2016-09-29 21:19:54 +02:00
|
|
|
void SyncthingProcess::restartSyncthing(const QString &cmd)
|
2016-09-03 19:39:43 +02:00
|
|
|
{
|
2018-04-02 20:26:00 +02:00
|
|
|
if (!isRunning()) {
|
2016-09-29 21:19:54 +02:00
|
|
|
startSyncthing(cmd);
|
2018-04-02 20:26:00 +02:00
|
|
|
return;
|
2016-09-03 19:39:43 +02:00
|
|
|
}
|
2018-04-02 20:26:00 +02:00
|
|
|
m_cmd = cmd;
|
|
|
|
m_manuallyStopped = true;
|
2018-04-02 23:29:39 +02:00
|
|
|
m_killTimer.start();
|
2018-04-02 20:26:00 +02:00
|
|
|
terminate();
|
2016-09-03 19:39:43 +02:00
|
|
|
}
|
|
|
|
|
2016-09-29 21:19:54 +02:00
|
|
|
void SyncthingProcess::startSyncthing(const QString &cmd)
|
2016-09-03 19:39:43 +02:00
|
|
|
{
|
2018-04-02 20:26:00 +02:00
|
|
|
if (isRunning()) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
m_manuallyStopped = false;
|
2018-04-02 23:29:39 +02:00
|
|
|
m_killTimer.stop();
|
2018-04-02 20:26:00 +02:00
|
|
|
if (cmd.isEmpty()) {
|
|
|
|
start(QProcess::ReadOnly);
|
|
|
|
} else {
|
|
|
|
start(cmd, QProcess::ReadOnly);
|
2016-09-24 16:19:23 +02:00
|
|
|
}
|
2016-09-03 19:39:43 +02:00
|
|
|
}
|
|
|
|
|
2017-03-17 00:38:42 +01:00
|
|
|
void SyncthingProcess::stopSyncthing()
|
|
|
|
{
|
2018-04-02 20:26:00 +02:00
|
|
|
if (!isRunning()) {
|
|
|
|
return;
|
2017-03-17 00:38:42 +01:00
|
|
|
}
|
2018-04-02 20:26:00 +02:00
|
|
|
m_manuallyStopped = true;
|
2018-04-02 23:29:39 +02:00
|
|
|
m_killTimer.start();
|
2018-04-02 20:26:00 +02:00
|
|
|
terminate();
|
|
|
|
}
|
|
|
|
|
2018-04-02 23:29:39 +02:00
|
|
|
void SyncthingProcess::killSyncthing()
|
|
|
|
{
|
|
|
|
if (!isRunning()) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
m_manuallyStopped = true;
|
|
|
|
m_killTimer.stop();
|
|
|
|
kill();
|
|
|
|
}
|
|
|
|
|
2018-04-02 20:26:00 +02:00
|
|
|
void SyncthingProcess::handleStarted()
|
|
|
|
{
|
|
|
|
m_activeSince = DateTime::gmtNow();
|
2017-03-17 00:38:42 +01:00
|
|
|
}
|
|
|
|
|
2016-09-03 19:39:43 +02:00
|
|
|
void SyncthingProcess::handleFinished(int exitCode, QProcess::ExitStatus exitStatus)
|
|
|
|
{
|
|
|
|
Q_UNUSED(exitCode)
|
|
|
|
Q_UNUSED(exitStatus)
|
2018-04-02 20:26:00 +02:00
|
|
|
m_activeSince = DateTime();
|
2018-04-02 23:29:39 +02:00
|
|
|
m_killTimer.stop();
|
2017-05-01 03:34:43 +02:00
|
|
|
if (!m_cmd.isEmpty()) {
|
2016-09-29 21:19:54 +02:00
|
|
|
startSyncthing(m_cmd);
|
|
|
|
m_cmd.clear();
|
2016-09-03 19:39:43 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void SyncthingProcess::killToRestart()
|
|
|
|
{
|
2017-05-01 03:34:43 +02:00
|
|
|
if (!m_cmd.isEmpty()) {
|
2016-09-03 19:39:43 +02:00
|
|
|
kill();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
} // namespace Data
|