diff --git a/sources/awesomewidgets/graphicalitemhelper.h b/sources/awesomewidgets/graphicalitemhelper.h index ee83e7e..171b7f4 100644 --- a/sources/awesomewidgets/graphicalitemhelper.h +++ b/sources/awesomewidgets/graphicalitemhelper.h @@ -27,6 +27,8 @@ class QGraphicsScene; class GraphicalItemHelper : public QObject { + Q_OBJECT + public: explicit GraphicalItemHelper(QObject *parent = nullptr, QGraphicsScene *scene = nullptr); diff --git a/sources/awesomewidgets/owmweatherprovider.h b/sources/awesomewidgets/owmweatherprovider.h index 03edff2..409b7b0 100644 --- a/sources/awesomewidgets/owmweatherprovider.h +++ b/sources/awesomewidgets/owmweatherprovider.h @@ -28,6 +28,8 @@ class OWMWeatherProvider : public AbstractWeatherProvider { + Q_OBJECT + public: explicit OWMWeatherProvider(QObject *parent, const int number); virtual ~OWMWeatherProvider(); diff --git a/sources/awesomewidgets/yahooweatherprovider.h b/sources/awesomewidgets/yahooweatherprovider.h index d5c997f..d8cfa76 100644 --- a/sources/awesomewidgets/yahooweatherprovider.h +++ b/sources/awesomewidgets/yahooweatherprovider.h @@ -28,6 +28,8 @@ class YahooWeatherProvider : public AbstractWeatherProvider { + Q_OBJECT + public: explicit YahooWeatherProvider(QObject *parent, const int number); virtual ~YahooWeatherProvider(); diff --git a/sources/extsysmonsources/batterysource.h b/sources/extsysmonsources/batterysource.h index 4779641..2c49b0d 100644 --- a/sources/extsysmonsources/batterysource.h +++ b/sources/extsysmonsources/batterysource.h @@ -25,6 +25,8 @@ class BatterySource : public AbstractExtSysMonSource { + Q_OBJECT + public: explicit BatterySource(QObject *parent, const QStringList args); virtual ~BatterySource(); diff --git a/sources/extsysmonsources/customsource.h b/sources/extsysmonsources/customsource.h index 5ce5bc0..2243107 100644 --- a/sources/extsysmonsources/customsource.h +++ b/sources/extsysmonsources/customsource.h @@ -28,6 +28,8 @@ class ExtScript; class CustomSource : public AbstractExtSysMonSource { + Q_OBJECT + public: explicit CustomSource(QObject *parent, const QStringList args); virtual ~CustomSource(); diff --git a/sources/extsysmonsources/desktopsource.h b/sources/extsysmonsources/desktopsource.h index d6f3fa4..fb7cf5e 100644 --- a/sources/extsysmonsources/desktopsource.h +++ b/sources/extsysmonsources/desktopsource.h @@ -25,6 +25,8 @@ class DesktopSource : public AbstractExtSysMonSource { + Q_OBJECT + public: explicit DesktopSource(QObject *parent, const QStringList args); virtual ~DesktopSource(); diff --git a/sources/extsysmonsources/gpuloadsource.h b/sources/extsysmonsources/gpuloadsource.h index 4caa8fa..b0951ca 100644 --- a/sources/extsysmonsources/gpuloadsource.h +++ b/sources/extsysmonsources/gpuloadsource.h @@ -27,6 +27,8 @@ class QProcess; class GPULoadSource : public AbstractExtSysMonSource { + Q_OBJECT + public: explicit GPULoadSource(QObject *parent, const QStringList args); virtual ~GPULoadSource(); diff --git a/sources/extsysmonsources/gputempsource.h b/sources/extsysmonsources/gputempsource.h index 0ebfc62..c2c0469 100644 --- a/sources/extsysmonsources/gputempsource.h +++ b/sources/extsysmonsources/gputempsource.h @@ -27,6 +27,8 @@ class QProcess; class GPUTemperatureSource : public AbstractExtSysMonSource { + Q_OBJECT + public: explicit GPUTemperatureSource(QObject *parent, const QStringList args); virtual ~GPUTemperatureSource(); diff --git a/sources/extsysmonsources/hddtempsource.h b/sources/extsysmonsources/hddtempsource.h index 2daf711..6e54fe3 100644 --- a/sources/extsysmonsources/hddtempsource.h +++ b/sources/extsysmonsources/hddtempsource.h @@ -27,6 +27,8 @@ class QProcess; class HDDTemperatureSource : public AbstractExtSysMonSource { + Q_OBJECT + public: explicit HDDTemperatureSource(QObject *parent, const QStringList args); virtual ~HDDTemperatureSource(); diff --git a/sources/extsysmonsources/loadsource.h b/sources/extsysmonsources/loadsource.h index e31963b..b50a939 100644 --- a/sources/extsysmonsources/loadsource.h +++ b/sources/extsysmonsources/loadsource.h @@ -25,6 +25,8 @@ class LoadSource : public AbstractExtSysMonSource { + Q_OBJECT + public: explicit LoadSource(QObject *parent, const QStringList args); virtual ~LoadSource(); diff --git a/sources/extsysmonsources/networksource.h b/sources/extsysmonsources/networksource.h index 126fc19..99db545 100644 --- a/sources/extsysmonsources/networksource.h +++ b/sources/extsysmonsources/networksource.h @@ -25,6 +25,8 @@ class NetworkSource : public AbstractExtSysMonSource { + Q_OBJECT + public: explicit NetworkSource(QObject *parent, const QStringList args); virtual ~NetworkSource(); diff --git a/sources/extsysmonsources/playersource.cpp b/sources/extsysmonsources/playersource.cpp index e082006..fb314e4 100644 --- a/sources/extsysmonsources/playersource.cpp +++ b/sources/extsysmonsources/playersource.cpp @@ -35,17 +35,17 @@ PlayerSource::PlayerSource(QObject *parent, const QStringList args) qCDebug(LOG_ESS) << __PRETTY_FUNCTION__; m_player = args.at(0); - m_mpdAddress = QString("%1:%2").arg(args.at(1)).arg(args.at(2)); + m_mpdAddress = args.at(1); + m_mpdPort = args.at(2).toInt(); m_mpris = args.at(3); m_symbols = args.at(4).toInt(); - m_mpdProcess = new QProcess(nullptr); - // fucking magic from http://doc.qt.io/qt-5/qprocess.html#finished - connect(m_mpdProcess, - static_cast( - &QProcess::finished), - [this](int, QProcess::ExitStatus) { return updateMpdValue(); }); - m_mpdProcess->waitForFinished(0); + connect(&m_mpdSocket, SIGNAL(connected()), this, + SLOT(mpdSocketConnected())); + connect(&m_mpdSocket, SIGNAL(readyRead()), this, + SLOT(mpdSocketReadyRead())); + connect(&m_mpdSocket, SIGNAL(bytesWritten(qint64)), this, + SLOT(mpdSocketWritten(const qint64))); m_mpdCached = defaultInfo(); } @@ -54,8 +54,7 @@ PlayerSource::~PlayerSource() { qCDebug(LOG_ESS) << __PRETTY_FUNCTION__; - m_mpdProcess->kill(); - m_mpdProcess->deleteLater(); + m_mpdSocket.close(); } @@ -182,7 +181,7 @@ void PlayerSource::run() // initial data if (m_player == QString("mpd")) { // mpd - m_values = getPlayerMpdInfo(m_mpdAddress); + m_values = getPlayerMpdInfo(); } else if (m_player == QString("mpris")) { // players which supports mpris if (m_dbusMutex.tryLock()) { @@ -256,18 +255,21 @@ QString PlayerSource::stripString(const QString &value, const int s) } -void PlayerSource::updateMpdValue() +void PlayerSource::mpdSocketConnected() +{ + qCDebug(LOG_ESS) << "MPD socket connected to" << m_mpdSocket.peerName() + << "with state" << m_mpdSocket.state(); +} + + +void PlayerSource::mpdSocketReadyRead() { - qCInfo(LOG_ESS) << "Cmd returns" << m_mpdProcess->exitCode(); - QString qdebug = QTextCodec::codecForMib(106) - ->toUnicode(m_mpdProcess->readAllStandardError()) - .trimmed(); - qCInfo(LOG_ESS) << "Error" << qdebug; QString qoutput = QTextCodec::codecForMib(106) - ->toUnicode(m_mpdProcess->readAllStandardOutput()) + ->toUnicode(m_mpdSocket.readAll()) .trimmed(); qCInfo(LOG_ESS) << "Output" << qoutput; + // parse for (auto str : qoutput.split(QChar('\n'), QString::SkipEmptyParts)) { if (str.split(QString(": "), QString::SkipEmptyParts).count() == 2) { // "Metadata: data" @@ -292,6 +294,13 @@ void PlayerSource::updateMpdValue() } +void PlayerSource::mpdSocketWritten(const qint64 bytes) +{ + qCDebug(LOG_ESS) << "Bytes written" << bytes << "to" + << m_mpdSocket.peerName(); +} + + QVariantHash PlayerSource::defaultInfo() const { QVariantHash info; @@ -305,16 +314,16 @@ QVariantHash PlayerSource::defaultInfo() const } -QVariantHash PlayerSource::getPlayerMpdInfo(const QString mpdAddress) const +QVariantHash PlayerSource::getPlayerMpdInfo() { - qCDebug(LOG_ESS) << "MPD" << mpdAddress; - - // build cmd - QString cmd = QString("bash -c \"echo 'currentsong\nstatus\nclose' | curl " - "--connect-timeout 1 -fsm 3 telnet://%1\"") - .arg(mpdAddress); - qCInfo(LOG_ESS) << "cmd" << cmd; - m_mpdProcess->start(cmd); + if (m_mpdSocket.state() == QAbstractSocket::UnconnectedState) { + // connect to host + qCInfo(LOG_ESS) << "Connect to" << m_mpdAddress << m_mpdPort; + m_mpdSocket.connectToHost(m_mpdAddress, m_mpdPort); + } else if (m_mpdSocket.state() == QAbstractSocket::ConnectedState) { + // send request + m_mpdSocket.write("currentsong\nstatus\n"); + } return m_mpdCached; } diff --git a/sources/extsysmonsources/playersource.h b/sources/extsysmonsources/playersource.h index 39d666b..501d0fc 100644 --- a/sources/extsysmonsources/playersource.h +++ b/sources/extsysmonsources/playersource.h @@ -20,6 +20,7 @@ #include #include +#include #include "abstractextsysmonsource.h" @@ -28,6 +29,8 @@ class QProcess; class PlayerSource : public AbstractExtSysMonSource { + Q_OBJECT + public: explicit PlayerSource(QObject *parent, const QStringList args); virtual ~PlayerSource(); @@ -42,16 +45,19 @@ public: static QString stripString(const QString &value, const int s); private slots: - void updateMpdValue(); + void mpdSocketConnected(); + void mpdSocketReadyRead(); + void mpdSocketWritten(const qint64 bytes); private: inline QVariantHash defaultInfo() const; - QVariantHash getPlayerMpdInfo(const QString mpdAddress) const; + QVariantHash getPlayerMpdInfo(); QVariantHash getPlayerMprisInfo(const QString mpris) const; + QTcpSocket m_mpdSocket; // configuration and values QString m_mpdAddress; + int m_mpdPort; QVariantHash m_mpdCached; - QProcess *m_mpdProcess = nullptr; QString m_mpris; QMutex m_dbusMutex; QString m_player; diff --git a/sources/extsysmonsources/processessource.h b/sources/extsysmonsources/processessource.h index 3d7c3a3..1ad5b38 100644 --- a/sources/extsysmonsources/processessource.h +++ b/sources/extsysmonsources/processessource.h @@ -25,6 +25,8 @@ class ProcessesSource : public AbstractExtSysMonSource { + Q_OBJECT + public: explicit ProcessesSource(QObject *parent, const QStringList args); virtual ~ProcessesSource(); diff --git a/sources/extsysmonsources/quotessource.h b/sources/extsysmonsources/quotessource.h index e02a920..28fe709 100644 --- a/sources/extsysmonsources/quotessource.h +++ b/sources/extsysmonsources/quotessource.h @@ -28,6 +28,8 @@ class ExtQuotes; class QuotesSource : public AbstractExtSysMonSource { + Q_OBJECT + public: explicit QuotesSource(QObject *parent, const QStringList args); virtual ~QuotesSource(); diff --git a/sources/extsysmonsources/upgradesource.h b/sources/extsysmonsources/upgradesource.h index 50bfaf0..1341f2d 100644 --- a/sources/extsysmonsources/upgradesource.h +++ b/sources/extsysmonsources/upgradesource.h @@ -28,6 +28,8 @@ class ExtUpgrade; class UpgradeSource : public AbstractExtSysMonSource { + Q_OBJECT + public: explicit UpgradeSource(QObject *parent, const QStringList args); virtual ~UpgradeSource(); diff --git a/sources/extsysmonsources/weathersource.h b/sources/extsysmonsources/weathersource.h index 04e176e..de35feb 100644 --- a/sources/extsysmonsources/weathersource.h +++ b/sources/extsysmonsources/weathersource.h @@ -28,6 +28,8 @@ class ExtWeather; class WeatherSource : public AbstractExtSysMonSource { + Q_OBJECT + public: explicit WeatherSource(QObject *parent, const QStringList args); virtual ~WeatherSource();