mirror of
https://github.com/arcan1s/awesome-widgets.git
synced 2025-04-24 23:47:20 +00:00
use sockets from MPD instead of running curl
This commit is contained in:
parent
90c33ab24d
commit
1864dc71d5
@ -27,6 +27,8 @@ class QGraphicsScene;
|
|||||||
|
|
||||||
class GraphicalItemHelper : public QObject
|
class GraphicalItemHelper : public QObject
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit GraphicalItemHelper(QObject *parent = nullptr,
|
explicit GraphicalItemHelper(QObject *parent = nullptr,
|
||||||
QGraphicsScene *scene = nullptr);
|
QGraphicsScene *scene = nullptr);
|
||||||
|
@ -28,6 +28,8 @@
|
|||||||
|
|
||||||
class OWMWeatherProvider : public AbstractWeatherProvider
|
class OWMWeatherProvider : public AbstractWeatherProvider
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit OWMWeatherProvider(QObject *parent, const int number);
|
explicit OWMWeatherProvider(QObject *parent, const int number);
|
||||||
virtual ~OWMWeatherProvider();
|
virtual ~OWMWeatherProvider();
|
||||||
|
@ -28,6 +28,8 @@
|
|||||||
|
|
||||||
class YahooWeatherProvider : public AbstractWeatherProvider
|
class YahooWeatherProvider : public AbstractWeatherProvider
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit YahooWeatherProvider(QObject *parent, const int number);
|
explicit YahooWeatherProvider(QObject *parent, const int number);
|
||||||
virtual ~YahooWeatherProvider();
|
virtual ~YahooWeatherProvider();
|
||||||
|
@ -25,6 +25,8 @@
|
|||||||
|
|
||||||
class BatterySource : public AbstractExtSysMonSource
|
class BatterySource : public AbstractExtSysMonSource
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit BatterySource(QObject *parent, const QStringList args);
|
explicit BatterySource(QObject *parent, const QStringList args);
|
||||||
virtual ~BatterySource();
|
virtual ~BatterySource();
|
||||||
|
@ -28,6 +28,8 @@ class ExtScript;
|
|||||||
|
|
||||||
class CustomSource : public AbstractExtSysMonSource
|
class CustomSource : public AbstractExtSysMonSource
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit CustomSource(QObject *parent, const QStringList args);
|
explicit CustomSource(QObject *parent, const QStringList args);
|
||||||
virtual ~CustomSource();
|
virtual ~CustomSource();
|
||||||
|
@ -25,6 +25,8 @@
|
|||||||
|
|
||||||
class DesktopSource : public AbstractExtSysMonSource
|
class DesktopSource : public AbstractExtSysMonSource
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit DesktopSource(QObject *parent, const QStringList args);
|
explicit DesktopSource(QObject *parent, const QStringList args);
|
||||||
virtual ~DesktopSource();
|
virtual ~DesktopSource();
|
||||||
|
@ -27,6 +27,8 @@ class QProcess;
|
|||||||
|
|
||||||
class GPULoadSource : public AbstractExtSysMonSource
|
class GPULoadSource : public AbstractExtSysMonSource
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit GPULoadSource(QObject *parent, const QStringList args);
|
explicit GPULoadSource(QObject *parent, const QStringList args);
|
||||||
virtual ~GPULoadSource();
|
virtual ~GPULoadSource();
|
||||||
|
@ -27,6 +27,8 @@ class QProcess;
|
|||||||
|
|
||||||
class GPUTemperatureSource : public AbstractExtSysMonSource
|
class GPUTemperatureSource : public AbstractExtSysMonSource
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit GPUTemperatureSource(QObject *parent, const QStringList args);
|
explicit GPUTemperatureSource(QObject *parent, const QStringList args);
|
||||||
virtual ~GPUTemperatureSource();
|
virtual ~GPUTemperatureSource();
|
||||||
|
@ -27,6 +27,8 @@ class QProcess;
|
|||||||
|
|
||||||
class HDDTemperatureSource : public AbstractExtSysMonSource
|
class HDDTemperatureSource : public AbstractExtSysMonSource
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit HDDTemperatureSource(QObject *parent, const QStringList args);
|
explicit HDDTemperatureSource(QObject *parent, const QStringList args);
|
||||||
virtual ~HDDTemperatureSource();
|
virtual ~HDDTemperatureSource();
|
||||||
|
@ -25,6 +25,8 @@
|
|||||||
|
|
||||||
class LoadSource : public AbstractExtSysMonSource
|
class LoadSource : public AbstractExtSysMonSource
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit LoadSource(QObject *parent, const QStringList args);
|
explicit LoadSource(QObject *parent, const QStringList args);
|
||||||
virtual ~LoadSource();
|
virtual ~LoadSource();
|
||||||
|
@ -25,6 +25,8 @@
|
|||||||
|
|
||||||
class NetworkSource : public AbstractExtSysMonSource
|
class NetworkSource : public AbstractExtSysMonSource
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit NetworkSource(QObject *parent, const QStringList args);
|
explicit NetworkSource(QObject *parent, const QStringList args);
|
||||||
virtual ~NetworkSource();
|
virtual ~NetworkSource();
|
||||||
|
@ -35,17 +35,17 @@ PlayerSource::PlayerSource(QObject *parent, const QStringList args)
|
|||||||
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
|
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
|
||||||
|
|
||||||
m_player = args.at(0);
|
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_mpris = args.at(3);
|
||||||
m_symbols = args.at(4).toInt();
|
m_symbols = args.at(4).toInt();
|
||||||
|
|
||||||
m_mpdProcess = new QProcess(nullptr);
|
connect(&m_mpdSocket, SIGNAL(connected()), this,
|
||||||
// fucking magic from http://doc.qt.io/qt-5/qprocess.html#finished
|
SLOT(mpdSocketConnected()));
|
||||||
connect(m_mpdProcess,
|
connect(&m_mpdSocket, SIGNAL(readyRead()), this,
|
||||||
static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(
|
SLOT(mpdSocketReadyRead()));
|
||||||
&QProcess::finished),
|
connect(&m_mpdSocket, SIGNAL(bytesWritten(qint64)), this,
|
||||||
[this](int, QProcess::ExitStatus) { return updateMpdValue(); });
|
SLOT(mpdSocketWritten(const qint64)));
|
||||||
m_mpdProcess->waitForFinished(0);
|
|
||||||
m_mpdCached = defaultInfo();
|
m_mpdCached = defaultInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,8 +54,7 @@ PlayerSource::~PlayerSource()
|
|||||||
{
|
{
|
||||||
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
|
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
|
||||||
|
|
||||||
m_mpdProcess->kill();
|
m_mpdSocket.close();
|
||||||
m_mpdProcess->deleteLater();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -182,7 +181,7 @@ void PlayerSource::run()
|
|||||||
// initial data
|
// initial data
|
||||||
if (m_player == QString("mpd")) {
|
if (m_player == QString("mpd")) {
|
||||||
// mpd
|
// mpd
|
||||||
m_values = getPlayerMpdInfo(m_mpdAddress);
|
m_values = getPlayerMpdInfo();
|
||||||
} else if (m_player == QString("mpris")) {
|
} else if (m_player == QString("mpris")) {
|
||||||
// players which supports mpris
|
// players which supports mpris
|
||||||
if (m_dbusMutex.tryLock()) {
|
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)
|
QString qoutput = QTextCodec::codecForMib(106)
|
||||||
->toUnicode(m_mpdProcess->readAllStandardOutput())
|
->toUnicode(m_mpdSocket.readAll())
|
||||||
.trimmed();
|
.trimmed();
|
||||||
qCInfo(LOG_ESS) << "Output" << qoutput;
|
qCInfo(LOG_ESS) << "Output" << qoutput;
|
||||||
|
|
||||||
|
// parse
|
||||||
for (auto str : qoutput.split(QChar('\n'), QString::SkipEmptyParts)) {
|
for (auto str : qoutput.split(QChar('\n'), QString::SkipEmptyParts)) {
|
||||||
if (str.split(QString(": "), QString::SkipEmptyParts).count() == 2) {
|
if (str.split(QString(": "), QString::SkipEmptyParts).count() == 2) {
|
||||||
// "Metadata: data"
|
// "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 PlayerSource::defaultInfo() const
|
||||||
{
|
{
|
||||||
QVariantHash info;
|
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;
|
if (m_mpdSocket.state() == QAbstractSocket::UnconnectedState) {
|
||||||
|
// connect to host
|
||||||
// build cmd
|
qCInfo(LOG_ESS) << "Connect to" << m_mpdAddress << m_mpdPort;
|
||||||
QString cmd = QString("bash -c \"echo 'currentsong\nstatus\nclose' | curl "
|
m_mpdSocket.connectToHost(m_mpdAddress, m_mpdPort);
|
||||||
"--connect-timeout 1 -fsm 3 telnet://%1\"")
|
} else if (m_mpdSocket.state() == QAbstractSocket::ConnectedState) {
|
||||||
.arg(mpdAddress);
|
// send request
|
||||||
qCInfo(LOG_ESS) << "cmd" << cmd;
|
m_mpdSocket.write("currentsong\nstatus\n");
|
||||||
m_mpdProcess->start(cmd);
|
}
|
||||||
|
|
||||||
return m_mpdCached;
|
return m_mpdCached;
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
#include <QMutex>
|
#include <QMutex>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
#include <QTcpSocket>
|
||||||
|
|
||||||
#include "abstractextsysmonsource.h"
|
#include "abstractextsysmonsource.h"
|
||||||
|
|
||||||
@ -28,6 +29,8 @@ class QProcess;
|
|||||||
|
|
||||||
class PlayerSource : public AbstractExtSysMonSource
|
class PlayerSource : public AbstractExtSysMonSource
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit PlayerSource(QObject *parent, const QStringList args);
|
explicit PlayerSource(QObject *parent, const QStringList args);
|
||||||
virtual ~PlayerSource();
|
virtual ~PlayerSource();
|
||||||
@ -42,16 +45,19 @@ public:
|
|||||||
static QString stripString(const QString &value, const int s);
|
static QString stripString(const QString &value, const int s);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void updateMpdValue();
|
void mpdSocketConnected();
|
||||||
|
void mpdSocketReadyRead();
|
||||||
|
void mpdSocketWritten(const qint64 bytes);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
inline QVariantHash defaultInfo() const;
|
inline QVariantHash defaultInfo() const;
|
||||||
QVariantHash getPlayerMpdInfo(const QString mpdAddress) const;
|
QVariantHash getPlayerMpdInfo();
|
||||||
QVariantHash getPlayerMprisInfo(const QString mpris) const;
|
QVariantHash getPlayerMprisInfo(const QString mpris) const;
|
||||||
|
QTcpSocket m_mpdSocket;
|
||||||
// configuration and values
|
// configuration and values
|
||||||
QString m_mpdAddress;
|
QString m_mpdAddress;
|
||||||
|
int m_mpdPort;
|
||||||
QVariantHash m_mpdCached;
|
QVariantHash m_mpdCached;
|
||||||
QProcess *m_mpdProcess = nullptr;
|
|
||||||
QString m_mpris;
|
QString m_mpris;
|
||||||
QMutex m_dbusMutex;
|
QMutex m_dbusMutex;
|
||||||
QString m_player;
|
QString m_player;
|
||||||
|
@ -25,6 +25,8 @@
|
|||||||
|
|
||||||
class ProcessesSource : public AbstractExtSysMonSource
|
class ProcessesSource : public AbstractExtSysMonSource
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit ProcessesSource(QObject *parent, const QStringList args);
|
explicit ProcessesSource(QObject *parent, const QStringList args);
|
||||||
virtual ~ProcessesSource();
|
virtual ~ProcessesSource();
|
||||||
|
@ -28,6 +28,8 @@ class ExtQuotes;
|
|||||||
|
|
||||||
class QuotesSource : public AbstractExtSysMonSource
|
class QuotesSource : public AbstractExtSysMonSource
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit QuotesSource(QObject *parent, const QStringList args);
|
explicit QuotesSource(QObject *parent, const QStringList args);
|
||||||
virtual ~QuotesSource();
|
virtual ~QuotesSource();
|
||||||
|
@ -28,6 +28,8 @@ class ExtUpgrade;
|
|||||||
|
|
||||||
class UpgradeSource : public AbstractExtSysMonSource
|
class UpgradeSource : public AbstractExtSysMonSource
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit UpgradeSource(QObject *parent, const QStringList args);
|
explicit UpgradeSource(QObject *parent, const QStringList args);
|
||||||
virtual ~UpgradeSource();
|
virtual ~UpgradeSource();
|
||||||
|
@ -28,6 +28,8 @@ class ExtWeather;
|
|||||||
|
|
||||||
class WeatherSource : public AbstractExtSysMonSource
|
class WeatherSource : public AbstractExtSysMonSource
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit WeatherSource(QObject *parent, const QStringList args);
|
explicit WeatherSource(QObject *parent, const QStringList args);
|
||||||
virtual ~WeatherSource();
|
virtual ~WeatherSource();
|
||||||
|
Loading…
Reference in New Issue
Block a user