mirror of
https://github.com/arcan1s/awesome-widgets.git
synced 2025-07-16 07:09:58 +00:00
Replace yahoo finance to stooq (#131)
Old code is dropped to separated provider
This commit is contained in:
@ -54,8 +54,7 @@ QStringList BatterySource::getSources()
|
||||
|
||||
m_batteriesCount
|
||||
= QDir(m_acpiPath)
|
||||
.entryList(QStringList({"BAT*"}),
|
||||
QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name)
|
||||
.entryList(QStringList({"BAT*"}), QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name)
|
||||
.count();
|
||||
qCInfo(LOG_ESS) << "Init batteries count as" << m_batteriesCount;
|
||||
|
||||
@ -165,16 +164,14 @@ void BatterySource::run()
|
||||
// adaptor
|
||||
QFile acFile(QString("%1/AC/online").arg(m_acpiPath));
|
||||
if (acFile.open(QIODevice::ReadOnly | QIODevice::Text))
|
||||
m_values["battery/ac"]
|
||||
= (QString(acFile.readLine()).trimmed().toInt() == 1);
|
||||
m_values["battery/ac"] = (QString(acFile.readLine()).trimmed().toInt() == 1);
|
||||
acFile.close();
|
||||
|
||||
// batteries
|
||||
float currentLevel = 0.0, fullLevel = 0.0;
|
||||
for (int i = 0; i < m_batteriesCount; i++) {
|
||||
// current level
|
||||
QFile currentLevelFile(
|
||||
QString("%1/BAT%2/energy_now").arg(m_acpiPath).arg(i));
|
||||
QFile currentLevelFile(QString("%1/BAT%2/energy_now").arg(m_acpiPath).arg(i));
|
||||
if (currentLevelFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||
auto value = QString(currentLevelFile.readLine()).toInt();
|
||||
m_trend[i + 1].append(value);
|
||||
@ -182,16 +179,15 @@ void BatterySource::run()
|
||||
}
|
||||
currentLevelFile.close();
|
||||
// total
|
||||
QFile fullLevelFile(
|
||||
QString("%1/BAT%2/energy_full").arg(m_acpiPath).arg(i));
|
||||
QFile fullLevelFile(QString("%1/BAT%2/energy_full").arg(m_acpiPath).arg(i));
|
||||
if (fullLevelFile.open(QIODevice::ReadOnly | QIODevice::Text))
|
||||
m_values[QString("battery/battotal%1").arg(i)]
|
||||
= QString(fullLevelFile.readLine()).toInt();
|
||||
fullLevelFile.close();
|
||||
|
||||
m_values[QString("battery/bat%1").arg(i)] = static_cast<int>(
|
||||
100 * m_values[QString("battery/batnow%1").arg(i)].toFloat()
|
||||
/ m_values[QString("battery/battotal%1").arg(i)].toFloat());
|
||||
m_values[QString("battery/bat%1").arg(i)]
|
||||
= static_cast<int>(100 * m_values[QString("battery/batnow%1").arg(i)].toFloat()
|
||||
/ m_values[QString("battery/battotal%1").arg(i)].toFloat());
|
||||
// accumulate
|
||||
currentLevel += m_values[QString("battery/batnow%1").arg(i)].toFloat();
|
||||
fullLevel += m_values[QString("battery/battotal%1").arg(i)].toFloat();
|
||||
@ -241,23 +237,20 @@ void BatterySource::calculateRates()
|
||||
|
||||
// check time interval
|
||||
auto now = QDateTime::currentDateTimeUtc();
|
||||
auto interval
|
||||
= (now.toMSecsSinceEpoch() - m_timestamp.toMSecsSinceEpoch()) / 1000.0f;
|
||||
auto interval = (now.toMSecsSinceEpoch() - m_timestamp.toMSecsSinceEpoch()) / 1000.0f;
|
||||
m_timestamp.swap(now);
|
||||
|
||||
for (int i = 0; i < m_batteriesCount; i++) {
|
||||
auto approx = approximate(m_trend[i + 1]);
|
||||
m_values[QString("battery/batrate%1").arg(i)] = approx / interval;
|
||||
m_values[QString("battery/batleft%1").arg(i)]
|
||||
= interval * m_values[QString("battery/batnow%1").arg(i)].toFloat()
|
||||
/ approx;
|
||||
= interval * m_values[QString("battery/batnow%1").arg(i)].toFloat() / approx;
|
||||
}
|
||||
|
||||
// total
|
||||
auto approx = approximate(m_trend[0]);
|
||||
m_values["battery/batrate"] = approx / interval;
|
||||
m_values["battery/batleft"]
|
||||
= interval * m_values["battery/batnow"].toFloat() / approx;
|
||||
m_values["battery/batleft"] = interval * m_values["battery/batnow"].toFloat() / approx;
|
||||
|
||||
// old data cleanup
|
||||
for (auto &trend : m_trend.keys()) {
|
||||
|
@ -45,10 +45,7 @@ QVariant CustomSource::data(const QString &_source)
|
||||
qCDebug(LOG_ESS) << "Source" << _source;
|
||||
|
||||
// there are only one value
|
||||
return m_extScripts->itemByTagNumber(index(_source))
|
||||
->run()
|
||||
.values()
|
||||
.first();
|
||||
return m_extScripts->itemByTagNumber(index(_source))->run().values().first();
|
||||
}
|
||||
|
||||
|
||||
@ -59,9 +56,8 @@ QVariantMap CustomSource::initialData(const QString &_source) const
|
||||
QVariantMap data;
|
||||
data["min"] = "";
|
||||
data["max"] = "";
|
||||
data["name"]
|
||||
= QString("Custom command '%1' output")
|
||||
.arg(m_extScripts->itemByTagNumber(index(_source))->uniq());
|
||||
data["name"] = QString("Custom command '%1' output")
|
||||
.arg(m_extScripts->itemByTagNumber(index(_source))->uniq());
|
||||
data["type"] = "QString";
|
||||
data["units"] = "";
|
||||
|
||||
|
@ -36,8 +36,7 @@ GPULoadSource::GPULoadSource(QObject *_parent, const QStringList &_args)
|
||||
m_process = new QProcess(nullptr);
|
||||
// fucking magic from http://doc.qt.io/qt-5/qprocess.html#finished
|
||||
connect(m_process,
|
||||
static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(
|
||||
&QProcess::finished),
|
||||
static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
|
||||
[this](int, QProcess::ExitStatus) { return updateValue(); });
|
||||
m_process->waitForFinished(0);
|
||||
}
|
||||
@ -57,8 +56,7 @@ QString GPULoadSource::autoGpu()
|
||||
QString gpu = "disable";
|
||||
QFile moduleFile("/proc/modules");
|
||||
if (!moduleFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||
qCWarning(LOG_AW) << "Could not open file as text"
|
||||
<< moduleFile.fileName();
|
||||
qCWarning(LOG_AW) << "Could not open file as text" << moduleFile.fileName();
|
||||
return gpu;
|
||||
}
|
||||
|
||||
@ -107,8 +105,7 @@ void GPULoadSource::run()
|
||||
if ((m_device != "nvidia") && (m_device != "ati"))
|
||||
return;
|
||||
// build cmd
|
||||
QString cmd = m_device == "nvidia" ? "nvidia-smi -q -x"
|
||||
: "aticonfig --od-getclocks";
|
||||
QString cmd = m_device == "nvidia" ? "nvidia-smi -q -x" : "aticonfig --od-getclocks";
|
||||
qCInfo(LOG_ESS) << "cmd" << cmd;
|
||||
|
||||
m_process->start(cmd);
|
||||
@ -127,21 +124,18 @@ QStringList GPULoadSource::sources() const
|
||||
void GPULoadSource::updateValue()
|
||||
{
|
||||
qCInfo(LOG_ESS) << "Cmd returns" << m_process->exitCode();
|
||||
QString qdebug = QTextCodec::codecForMib(106)
|
||||
->toUnicode(m_process->readAllStandardError())
|
||||
.trimmed();
|
||||
QString qdebug
|
||||
= QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardError()).trimmed();
|
||||
qCInfo(LOG_ESS) << "Error" << qdebug;
|
||||
QString qoutput = QTextCodec::codecForMib(106)
|
||||
->toUnicode(m_process->readAllStandardOutput())
|
||||
.trimmed();
|
||||
QString qoutput
|
||||
= QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardOutput()).trimmed();
|
||||
qCInfo(LOG_ESS) << "Output" << qoutput;
|
||||
|
||||
if (m_device == "nvidia") {
|
||||
for (auto &str : qoutput.split('\n', QString::SkipEmptyParts)) {
|
||||
if (!str.contains("<gpu_util>"))
|
||||
continue;
|
||||
auto load
|
||||
= str.remove("<gpu_util>").remove("</gpu_util>").remove('%');
|
||||
auto load = str.remove("<gpu_util>").remove("</gpu_util>").remove('%');
|
||||
m_values["gpu/load"] = load.toFloat();
|
||||
break;
|
||||
}
|
||||
@ -149,8 +143,7 @@ void GPULoadSource::updateValue()
|
||||
for (auto &str : qoutput.split('\n', QString::SkipEmptyParts)) {
|
||||
if (!str.contains("load"))
|
||||
continue;
|
||||
QString load
|
||||
= str.split(' ', QString::SkipEmptyParts)[3].remove('%');
|
||||
QString load = str.split(' ', QString::SkipEmptyParts)[3].remove('%');
|
||||
m_values["gpu/load"] = load.toFloat();
|
||||
break;
|
||||
}
|
||||
|
@ -25,8 +25,7 @@
|
||||
#include "awdebug.h"
|
||||
|
||||
|
||||
GPUTemperatureSource::GPUTemperatureSource(QObject *_parent,
|
||||
const QStringList &_args)
|
||||
GPUTemperatureSource::GPUTemperatureSource(QObject *_parent, const QStringList &_args)
|
||||
: AbstractExtSysMonSource(_parent, _args)
|
||||
{
|
||||
Q_ASSERT(_args.count() == 1);
|
||||
@ -37,8 +36,7 @@ GPUTemperatureSource::GPUTemperatureSource(QObject *_parent,
|
||||
m_process = new QProcess(nullptr);
|
||||
// fucking magic from http://doc.qt.io/qt-5/qprocess.html#finished
|
||||
connect(m_process,
|
||||
static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(
|
||||
&QProcess::finished),
|
||||
static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
|
||||
[this](int, QProcess::ExitStatus) { return updateValue(); });
|
||||
m_process->waitForFinished(0);
|
||||
}
|
||||
@ -86,8 +84,7 @@ void GPUTemperatureSource::run()
|
||||
if ((m_device != "nvidia") && (m_device != "ati"))
|
||||
return;
|
||||
// build cmd
|
||||
QString cmd = m_device == "nvidia" ? "nvidia-smi -q -x"
|
||||
: "aticonfig --od-gettemperature";
|
||||
QString cmd = m_device == "nvidia" ? "nvidia-smi -q -x" : "aticonfig --od-gettemperature";
|
||||
qCInfo(LOG_ESS) << "cmd" << cmd;
|
||||
|
||||
m_process->start(cmd);
|
||||
@ -106,13 +103,11 @@ QStringList GPUTemperatureSource::sources() const
|
||||
void GPUTemperatureSource::updateValue()
|
||||
{
|
||||
qCInfo(LOG_ESS) << "Cmd returns" << m_process->exitCode();
|
||||
QString qdebug = QTextCodec::codecForMib(106)
|
||||
->toUnicode(m_process->readAllStandardError())
|
||||
.trimmed();
|
||||
QString qdebug
|
||||
= QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardError()).trimmed();
|
||||
qCInfo(LOG_ESS) << "Error" << qdebug;
|
||||
QString qoutput = QTextCodec::codecForMib(106)
|
||||
->toUnicode(m_process->readAllStandardOutput())
|
||||
.trimmed();
|
||||
QString qoutput
|
||||
= QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardOutput()).trimmed();
|
||||
qCInfo(LOG_ESS) << "Output" << qoutput;
|
||||
|
||||
if (m_device == "nvidia") {
|
||||
|
@ -25,8 +25,7 @@
|
||||
#include "awdebug.h"
|
||||
|
||||
|
||||
HDDTemperatureSource::HDDTemperatureSource(QObject *_parent,
|
||||
const QStringList &_args)
|
||||
HDDTemperatureSource::HDDTemperatureSource(QObject *_parent, const QStringList &_args)
|
||||
: AbstractExtSysMonSource(_parent, _args)
|
||||
{
|
||||
Q_ASSERT(_args.count() == 2);
|
||||
@ -42,11 +41,8 @@ HDDTemperatureSource::HDDTemperatureSource(QObject *_parent,
|
||||
m_processes[device] = new QProcess(nullptr);
|
||||
// fucking magic from http://doc.qt.io/qt-5/qprocess.html#finished
|
||||
connect(m_processes[device],
|
||||
static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(
|
||||
&QProcess::finished),
|
||||
[this, device](int, QProcess::ExitStatus) {
|
||||
return updateValue(device);
|
||||
});
|
||||
static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
|
||||
[this, device](int, QProcess::ExitStatus) { return updateValue(device); });
|
||||
m_processes[device]->waitForFinished(0);
|
||||
}
|
||||
}
|
||||
@ -121,15 +117,13 @@ void HDDTemperatureSource::updateValue(const QString &_device)
|
||||
qCDebug(LOG_ESS) << "Called with device" << _device;
|
||||
|
||||
qCInfo(LOG_ESS) << "Cmd returns" << m_processes[_device]->exitCode();
|
||||
QString qdebug
|
||||
= QTextCodec::codecForMib(106)
|
||||
->toUnicode(m_processes[_device]->readAllStandardError())
|
||||
.trimmed();
|
||||
QString qdebug = QTextCodec::codecForMib(106)
|
||||
->toUnicode(m_processes[_device]->readAllStandardError())
|
||||
.trimmed();
|
||||
qCInfo(LOG_ESS) << "Error" << qdebug;
|
||||
QString qoutput
|
||||
= QTextCodec::codecForMib(106)
|
||||
->toUnicode(m_processes[_device]->readAllStandardOutput())
|
||||
.trimmed();
|
||||
QString qoutput = QTextCodec::codecForMib(106)
|
||||
->toUnicode(m_processes[_device]->readAllStandardOutput())
|
||||
.trimmed();
|
||||
qCInfo(LOG_ESS) << "Output" << qoutput;
|
||||
|
||||
// parse
|
||||
@ -140,8 +134,7 @@ void HDDTemperatureSource::updateValue(const QString &_device)
|
||||
continue;
|
||||
if (str.split(' ', QString::SkipEmptyParts).count() < 9)
|
||||
continue;
|
||||
m_values[_device]
|
||||
= str.split(' ', QString::SkipEmptyParts).at(9).toFloat();
|
||||
m_values[_device] = str.split(' ', QString::SkipEmptyParts).at(9).toFloat();
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
|
@ -43,13 +43,11 @@ QVariant NetworkSource::data(const QString &_source)
|
||||
|
||||
if (_source == "network/current/name") {
|
||||
QString device = "lo";
|
||||
QList<QNetworkInterface> rawInterfaceList
|
||||
= QNetworkInterface::allInterfaces();
|
||||
QList<QNetworkInterface> rawInterfaceList = QNetworkInterface::allInterfaces();
|
||||
qCInfo(LOG_ESS) << "Devices" << rawInterfaceList;
|
||||
for (auto &interface : rawInterfaceList) {
|
||||
if ((interface.flags().testFlag(QNetworkInterface::IsLoopBack))
|
||||
|| (interface.flags().testFlag(
|
||||
QNetworkInterface::IsPointToPoint)))
|
||||
|| (interface.flags().testFlag(QNetworkInterface::IsPointToPoint)))
|
||||
continue;
|
||||
if (interface.addressEntries().isEmpty())
|
||||
continue;
|
||||
|
@ -40,12 +40,9 @@ PlayerSource::PlayerSource(QObject *_parent, const QStringList &_args)
|
||||
m_mpris = _args.at(3);
|
||||
m_symbols = _args.at(4).toInt();
|
||||
|
||||
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)));
|
||||
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();
|
||||
}
|
||||
|
||||
@ -71,8 +68,8 @@ QVariant PlayerSource::data(const QString &_source)
|
||||
|
||||
QString PlayerSource::getAutoMpris() const
|
||||
{
|
||||
QDBusMessage listServices = QDBusConnection::sessionBus().interface()->call(
|
||||
QDBus::BlockWithGui, "ListNames");
|
||||
QDBusMessage listServices
|
||||
= QDBusConnection::sessionBus().interface()->call(QDBus::BlockWithGui, "ListNames");
|
||||
if (listServices.arguments().isEmpty()) {
|
||||
qCWarning(LOG_ESS) << "Could not find any DBus service";
|
||||
return "";
|
||||
@ -106,15 +103,13 @@ QVariantMap PlayerSource::initialData(const QString &_source) const
|
||||
} else if (_source == "player/salbum") {
|
||||
data["min"] = "";
|
||||
data["max"] = "";
|
||||
data["name"]
|
||||
= QString("Current song album (%1 symbols)").arg(m_symbols);
|
||||
data["name"] = QString("Current song album (%1 symbols)").arg(m_symbols);
|
||||
data["type"] = "QString";
|
||||
data["units"] = "";
|
||||
} else if (_source == "player/dalbum") {
|
||||
data["min"] = "";
|
||||
data["max"] = "";
|
||||
data["name"] = QString("Current song album (%1 symbols, dynamic)")
|
||||
.arg(m_symbols);
|
||||
data["name"] = QString("Current song album (%1 symbols, dynamic)").arg(m_symbols);
|
||||
data["type"] = "QString";
|
||||
data["units"] = "";
|
||||
} else if (_source == "player/artist") {
|
||||
@ -126,15 +121,13 @@ QVariantMap PlayerSource::initialData(const QString &_source) const
|
||||
} else if (_source == "player/sartist") {
|
||||
data["min"] = "";
|
||||
data["max"] = "";
|
||||
data["name"]
|
||||
= QString("Current song artist (%1 symbols)").arg(m_symbols);
|
||||
data["name"] = QString("Current song artist (%1 symbols)").arg(m_symbols);
|
||||
data["type"] = "QString";
|
||||
data["units"] = "";
|
||||
} else if (_source == "player/dartist") {
|
||||
data["min"] = "";
|
||||
data["max"] = "";
|
||||
data["name"] = QString("Current song artist (%1 symbols, dynamic)")
|
||||
.arg(m_symbols);
|
||||
data["name"] = QString("Current song artist (%1 symbols, dynamic)").arg(m_symbols);
|
||||
data["type"] = "QString";
|
||||
data["units"] = "";
|
||||
} else if (_source == "player/duration") {
|
||||
@ -158,15 +151,13 @@ QVariantMap PlayerSource::initialData(const QString &_source) const
|
||||
} else if (_source == "player/stitle") {
|
||||
data["min"] = "";
|
||||
data["max"] = "";
|
||||
data["name"]
|
||||
= QString("Current song title (%1 symbols)").arg(m_symbols);
|
||||
data["name"] = QString("Current song title (%1 symbols)").arg(m_symbols);
|
||||
data["type"] = "QString";
|
||||
data["units"] = "";
|
||||
} else if (_source == "player/dtitle") {
|
||||
data["min"] = "";
|
||||
data["max"] = "";
|
||||
data["name"] = QString("Current song title (%1 symbols, dynamic)")
|
||||
.arg(m_symbols);
|
||||
data["name"] = QString("Current song title (%1 symbols, dynamic)").arg(m_symbols);
|
||||
data["type"] = "QString";
|
||||
data["units"] = "";
|
||||
}
|
||||
@ -192,22 +183,16 @@ void PlayerSource::run()
|
||||
|
||||
// dymanic properties
|
||||
// solid
|
||||
m_values["player/salbum"]
|
||||
= stripString(m_values["player/album"].toString(), m_symbols);
|
||||
m_values["player/sartist"]
|
||||
= stripString(m_values["player/artist"].toString(), m_symbols);
|
||||
m_values["player/stitle"]
|
||||
= stripString(m_values["player/title"].toString(), m_symbols);
|
||||
m_values["player/salbum"] = stripString(m_values["player/album"].toString(), m_symbols);
|
||||
m_values["player/sartist"] = stripString(m_values["player/artist"].toString(), m_symbols);
|
||||
m_values["player/stitle"] = stripString(m_values["player/title"].toString(), m_symbols);
|
||||
// dynamic
|
||||
m_values["player/dalbum"]
|
||||
= buildString(m_values["player/dalbum"].toString(),
|
||||
m_values["player/album"].toString(), m_symbols);
|
||||
m_values["player/dartist"]
|
||||
= buildString(m_values["player/dartist"].toString(),
|
||||
m_values["player/artist"].toString(), m_symbols);
|
||||
m_values["player/dtitle"]
|
||||
= buildString(m_values["player/dtitle"].toString(),
|
||||
m_values["player/title"].toString(), m_symbols);
|
||||
m_values["player/dalbum"] = buildString(m_values["player/dalbum"].toString(),
|
||||
m_values["player/album"].toString(), m_symbols);
|
||||
m_values["player/dartist"] = buildString(m_values["player/dartist"].toString(),
|
||||
m_values["player/artist"].toString(), m_symbols);
|
||||
m_values["player/dtitle"] = buildString(m_values["player/dtitle"].toString(),
|
||||
m_values["player/title"].toString(), m_symbols);
|
||||
}
|
||||
|
||||
|
||||
@ -230,8 +215,7 @@ QStringList PlayerSource::sources() const
|
||||
}
|
||||
|
||||
|
||||
QString PlayerSource::buildString(const QString &_current,
|
||||
const QString &_value, const int _s)
|
||||
QString PlayerSource::buildString(const QString &_current, const QString &_value, const int _s)
|
||||
{
|
||||
qCDebug(LOG_ESS) << "Current value" << _current << "received" << _value
|
||||
<< "will be stripped after" << _s;
|
||||
@ -240,8 +224,7 @@ QString PlayerSource::buildString(const QString &_current,
|
||||
if ((_current.isEmpty()) || ((index + _s + 1) > _value.count()))
|
||||
return QString("%1").arg(_value.left(_s), -_s, QLatin1Char(' '));
|
||||
else
|
||||
return QString("%1").arg(_value.mid(index + 1, _s), -_s,
|
||||
QLatin1Char(' '));
|
||||
return QString("%1").arg(_value.mid(index + 1, _s), -_s, QLatin1Char(' '));
|
||||
}
|
||||
|
||||
|
||||
@ -262,26 +245,22 @@ bool PlayerSource::isMpdSocketConnected() const
|
||||
|
||||
void PlayerSource::mpdSocketConnected()
|
||||
{
|
||||
qCDebug(LOG_ESS) << "MPD socket connected to" << m_mpdSocket.peerName()
|
||||
<< "with state" << m_mpdSocket.state();
|
||||
qCDebug(LOG_ESS) << "MPD socket connected to" << m_mpdSocket.peerName() << "with state"
|
||||
<< m_mpdSocket.state();
|
||||
}
|
||||
|
||||
|
||||
void PlayerSource::mpdSocketReadyRead()
|
||||
{
|
||||
QString qoutput = QTextCodec::codecForMib(106)
|
||||
->toUnicode(m_mpdSocket.readAll())
|
||||
.trimmed();
|
||||
QString qoutput = QTextCodec::codecForMib(106)->toUnicode(m_mpdSocket.readAll()).trimmed();
|
||||
qCInfo(LOG_ESS) << "Output" << qoutput;
|
||||
|
||||
// parse
|
||||
for (auto &str : qoutput.split('\n', QString::SkipEmptyParts)) {
|
||||
if (str.split(": ", QString::SkipEmptyParts).count() == 2) {
|
||||
// "Metadata: data"
|
||||
QString metadata
|
||||
= str.split(": ", QString::SkipEmptyParts).first().toLower();
|
||||
QString data
|
||||
= str.split(": ", QString::SkipEmptyParts).last().trimmed();
|
||||
QString metadata = str.split(": ", QString::SkipEmptyParts).first().toLower();
|
||||
QString data = str.split(": ", QString::SkipEmptyParts).last().trimmed();
|
||||
// there are one more time...
|
||||
if ((metadata == "time") && (data.contains(':'))) {
|
||||
QStringList times = data.split(':');
|
||||
@ -299,8 +278,7 @@ void PlayerSource::mpdSocketReadyRead()
|
||||
|
||||
void PlayerSource::mpdSocketWritten(const qint64 _bytes)
|
||||
{
|
||||
qCDebug(LOG_ESS) << "Bytes written" << _bytes << "to"
|
||||
<< m_mpdSocket.peerName();
|
||||
qCDebug(LOG_ESS) << "Bytes written" << _bytes << "to" << m_mpdSocket.peerName();
|
||||
}
|
||||
|
||||
|
||||
@ -326,8 +304,7 @@ QVariantHash PlayerSource::getPlayerMpdInfo()
|
||||
} else if (m_mpdSocket.state() == QAbstractSocket::ConnectedState) {
|
||||
// send request
|
||||
if (m_mpdSocket.write(MPD_STATUS_REQUEST) == -1)
|
||||
qCWarning(LOG_ESS)
|
||||
<< "Could not write request to" << m_mpdSocket.peerName();
|
||||
qCWarning(LOG_ESS) << "Could not write request to" << m_mpdSocket.peerName();
|
||||
}
|
||||
|
||||
return m_mpdCached;
|
||||
@ -351,30 +328,22 @@ QVariantHash PlayerSource::getPlayerMprisInfo(const QString &_mpris) const
|
||||
// dbus-send --print-reply --session --dest=org.mpris.MediaPlayer2.vlc
|
||||
// /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get
|
||||
// string:'org.mpris.MediaPlayer2.Player' string:'Metadata'
|
||||
QVariantList args
|
||||
= QVariantList({"org.mpris.MediaPlayer2.Player", "Metadata"});
|
||||
QVariantList args = QVariantList({"org.mpris.MediaPlayer2.Player", "Metadata"});
|
||||
QDBusMessage request = QDBusMessage::createMethodCall(
|
||||
QString("org.mpris.MediaPlayer2.%1").arg(_mpris),
|
||||
"/org/mpris/MediaPlayer2", "org.freedesktop.DBus.Properties", "Get");
|
||||
QString("org.mpris.MediaPlayer2.%1").arg(_mpris), "/org/mpris/MediaPlayer2",
|
||||
"org.freedesktop.DBus.Properties", "Get");
|
||||
request.setArguments(args);
|
||||
QDBusMessage response
|
||||
= bus.call(request, QDBus::BlockWithGui, REQUEST_TIMEOUT);
|
||||
if ((response.type() != QDBusMessage::ReplyMessage)
|
||||
|| (response.arguments().isEmpty())) {
|
||||
QDBusMessage response = bus.call(request, QDBus::BlockWithGui, REQUEST_TIMEOUT);
|
||||
if ((response.type() != QDBusMessage::ReplyMessage) || (response.arguments().isEmpty())) {
|
||||
qCWarning(LOG_ESS) << "Error message" << response.errorMessage();
|
||||
} else {
|
||||
// another portion of dirty magic
|
||||
QVariantHash map
|
||||
= qdbus_cast<QVariantHash>(response.arguments()
|
||||
.first()
|
||||
.value<QDBusVariant>()
|
||||
.variant()
|
||||
.value<QDBusArgument>());
|
||||
QVariantHash map = qdbus_cast<QVariantHash>(
|
||||
response.arguments().first().value<QDBusVariant>().variant().value<QDBusArgument>());
|
||||
info["player/album"] = map.value("xesam:album", "unknown");
|
||||
// artist is array
|
||||
info["player/artist"] = map.value("xesam:artist", "unknown").toString();
|
||||
info["player/duration"]
|
||||
= map.value("mpris:length", 0).toInt() / (1000 * 1000);
|
||||
info["player/duration"] = map.value("mpris:length", 0).toInt() / (1000 * 1000);
|
||||
info["player/title"] = map.value("xesam:title", "unknown");
|
||||
}
|
||||
|
||||
@ -382,17 +351,13 @@ QVariantHash PlayerSource::getPlayerMprisInfo(const QString &_mpris) const
|
||||
args[1] = "Position";
|
||||
request.setArguments(args);
|
||||
response = bus.call(request, QDBus::BlockWithGui);
|
||||
if ((response.type() != QDBusMessage::ReplyMessage)
|
||||
|| (response.arguments().isEmpty())) {
|
||||
if ((response.type() != QDBusMessage::ReplyMessage) || (response.arguments().isEmpty())) {
|
||||
qCWarning(LOG_ESS) << "Error message" << response.errorMessage();
|
||||
} else {
|
||||
// this cast is simpler than the previous one ;)
|
||||
info["player/progress"] = response.arguments()
|
||||
.first()
|
||||
.value<QDBusVariant>()
|
||||
.variant()
|
||||
.toLongLong()
|
||||
/ (1000 * 1000);
|
||||
info["player/progress"]
|
||||
= response.arguments().first().value<QDBusVariant>().variant().toLongLong()
|
||||
/ (1000 * 1000);
|
||||
}
|
||||
|
||||
return info;
|
||||
|
@ -42,8 +42,7 @@ public:
|
||||
void run();
|
||||
QStringList sources() const;
|
||||
// additional method to build dynamic tags
|
||||
static QString buildString(const QString &_current, const QString &_value,
|
||||
const int _s);
|
||||
static QString buildString(const QString &_current, const QString &_value, const int _s);
|
||||
static QString stripString(const QString &_value, const int _s);
|
||||
// additional test method
|
||||
bool isMpdSocketConnected() const;
|
||||
|
@ -79,8 +79,8 @@ QVariantMap ProcessesSource::initialData(const QString &_source) const
|
||||
|
||||
void ProcessesSource::run()
|
||||
{
|
||||
QStringList allDirectories = QDir("/proc").entryList(
|
||||
QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name);
|
||||
QStringList allDirectories
|
||||
= QDir("/proc").entryList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name);
|
||||
QStringList directories = allDirectories.filter(QRegExp("(\\d+)"));
|
||||
QStringList running;
|
||||
|
||||
|
@ -63,49 +63,7 @@ QVariantMap QuotesSource::initialData(const QString &_source) const
|
||||
|
||||
int ind = index(_source);
|
||||
QVariantMap data;
|
||||
if (_source.startsWith("quotes/askchg")) {
|
||||
data["min"] = 0.0;
|
||||
data["max"] = 0.0;
|
||||
data["name"] = QString("Absolute ask changes for '%1'")
|
||||
.arg(m_extQuotes->itemByTagNumber(ind)->uniq());
|
||||
data["type"] = "double";
|
||||
data["units"] = "";
|
||||
} else if (_source.startsWith("quotes/ask")) {
|
||||
data["min"] = 0.0;
|
||||
data["max"] = 0.0;
|
||||
data["name"] = QString("Ask for '%1'")
|
||||
.arg(m_extQuotes->itemByTagNumber(ind)->uniq());
|
||||
data["type"] = "double";
|
||||
data["units"] = "";
|
||||
} else if (_source.startsWith("quotes/percaskchg")) {
|
||||
data["min"] = -100.0;
|
||||
data["max"] = 100.0;
|
||||
data["name"] = QString("Ask changes for '%1'")
|
||||
.arg(m_extQuotes->itemByTagNumber(ind)->uniq());
|
||||
data["type"] = "double";
|
||||
data["units"] = "";
|
||||
} else if (_source.startsWith("quotes/bidchg")) {
|
||||
data["min"] = 0.0;
|
||||
data["max"] = 0.0;
|
||||
data["name"] = QString("Absolute bid changes for '%1'")
|
||||
.arg(m_extQuotes->itemByTagNumber(ind)->uniq());
|
||||
data["type"] = "double";
|
||||
data["units"] = "";
|
||||
} else if (_source.startsWith("quotes/bid")) {
|
||||
data["min"] = 0.0;
|
||||
data["max"] = 0.0;
|
||||
data["name"] = QString("Bid for '%1'")
|
||||
.arg(m_extQuotes->itemByTagNumber(ind)->uniq());
|
||||
data["type"] = "double";
|
||||
data["units"] = "";
|
||||
} else if (_source.startsWith("quotes/percbidchg")) {
|
||||
data["min"] = -100.0;
|
||||
data["max"] = 100.0;
|
||||
data["name"] = QString("Bid changes for '%1'")
|
||||
.arg(m_extQuotes->itemByTagNumber(ind)->uniq());
|
||||
data["type"] = "double";
|
||||
data["units"] = "";
|
||||
} else if (_source.startsWith("quotes/pricechg")) {
|
||||
if (_source.startsWith("quotes/pricechg")) {
|
||||
data["min"] = 0.0;
|
||||
data["max"] = 0.0;
|
||||
data["name"] = QString("Absolute prie changes for '%1'")
|
||||
@ -115,15 +73,34 @@ QVariantMap QuotesSource::initialData(const QString &_source) const
|
||||
} else if (_source.startsWith("quotes/price")) {
|
||||
data["min"] = 0.0;
|
||||
data["max"] = 0.0;
|
||||
data["name"] = QString("Price for '%1'")
|
||||
.arg(m_extQuotes->itemByTagNumber(ind)->uniq());
|
||||
data["name"] = QString("Price for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq());
|
||||
data["type"] = "double";
|
||||
data["units"] = "";
|
||||
} else if (_source.startsWith("quotes/percpricechg")) {
|
||||
data["min"] = -100.0;
|
||||
data["max"] = 100.0;
|
||||
data["name"] = QString("Price changes for '%1'")
|
||||
data["name"]
|
||||
= QString("Price changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq());
|
||||
data["type"] = "double";
|
||||
data["units"] = "";
|
||||
} else if (_source.startsWith("quotes/volumechg")) {
|
||||
data["min"] = 0;
|
||||
data["max"] = 0;
|
||||
data["name"] = QString("Absolute volume changes for '%1'")
|
||||
.arg(m_extQuotes->itemByTagNumber(ind)->uniq());
|
||||
data["type"] = "int";
|
||||
data["units"] = "";
|
||||
} else if (_source.startsWith("quotes/volume")) {
|
||||
data["min"] = 0;
|
||||
data["max"] = 0;
|
||||
data["name"] = QString("Volume for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq());
|
||||
data["type"] = "int";
|
||||
data["units"] = "";
|
||||
} else if (_source.startsWith("quotes/percvolumechg")) {
|
||||
data["min"] = -100.0;
|
||||
data["max"] = 100.0;
|
||||
data["name"]
|
||||
= QString("Volume changes for '%1'").arg(m_extQuotes->itemByTagNumber(ind)->uniq());
|
||||
data["type"] = "double";
|
||||
data["units"] = "";
|
||||
}
|
||||
@ -142,15 +119,12 @@ QStringList QuotesSource::getSources()
|
||||
{
|
||||
QStringList sources;
|
||||
for (auto &item : m_extQuotes->activeItems()) {
|
||||
sources.append(QString("quotes/%1").arg(item->tag("ask")));
|
||||
sources.append(QString("quotes/%1").arg(item->tag("askchg")));
|
||||
sources.append(QString("quotes/%1").arg(item->tag("percaskchg")));
|
||||
sources.append(QString("quotes/%1").arg(item->tag("bid")));
|
||||
sources.append(QString("quotes/%1").arg(item->tag("bidchg")));
|
||||
sources.append(QString("quotes/%1").arg(item->tag("percbidchg")));
|
||||
sources.append(QString("quotes/%1").arg(item->tag("price")));
|
||||
sources.append(QString("quotes/%1").arg(item->tag("pricechg")));
|
||||
sources.append(QString("quotes/%1").arg(item->tag("percpricechg")));
|
||||
sources.append(QString("quotes/%1").arg(item->tag("volume")));
|
||||
sources.append(QString("quotes/%1").arg(item->tag("volumechg")));
|
||||
sources.append(QString("quotes/%1").arg(item->tag("percvolumechg")));
|
||||
}
|
||||
|
||||
return sources;
|
||||
|
@ -28,8 +28,7 @@ RequestSource::RequestSource(QObject *_parent, const QStringList &_args)
|
||||
Q_ASSERT(_args.count() == 0);
|
||||
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
|
||||
|
||||
m_extNetRequest
|
||||
= new ExtItemAggregator<ExtNetworkRequest>(nullptr, "requests");
|
||||
m_extNetRequest = new ExtItemAggregator<ExtNetworkRequest>(nullptr, "requests");
|
||||
m_extNetRequest->initSockets();
|
||||
m_sources = getSources();
|
||||
}
|
||||
@ -67,8 +66,8 @@ QVariantMap RequestSource::initialData(const QString &_source) const
|
||||
if (_source.startsWith("network/response")) {
|
||||
data["min"] = "";
|
||||
data["max"] = "";
|
||||
data["name"] = QString("Network response for %1")
|
||||
.arg(m_extNetRequest->itemByTagNumber(ind)->uniq());
|
||||
data["name"]
|
||||
= QString("Network response for %1").arg(m_extNetRequest->itemByTagNumber(ind)->uniq());
|
||||
data["type"] = "QString";
|
||||
data["units"] = "";
|
||||
}
|
||||
|
@ -45,10 +45,7 @@ QVariant UpgradeSource::data(const QString &_source)
|
||||
qCDebug(LOG_ESS) << "Source" << _source;
|
||||
|
||||
// there are only one value
|
||||
return m_extUpgrade->itemByTagNumber(index(_source))
|
||||
->run()
|
||||
.values()
|
||||
.first();
|
||||
return m_extUpgrade->itemByTagNumber(index(_source))->run().values().first();
|
||||
}
|
||||
|
||||
|
||||
@ -59,9 +56,8 @@ QVariantMap UpgradeSource::initialData(const QString &_source) const
|
||||
QVariantMap data;
|
||||
data["min"] = "";
|
||||
data["max"] = "";
|
||||
data["name"]
|
||||
= QString("Package manager '%1' metadata")
|
||||
.arg(m_extUpgrade->itemByTagNumber(index(_source))->uniq());
|
||||
data["name"] = QString("Package manager '%1' metadata")
|
||||
.arg(m_extUpgrade->itemByTagNumber(index(_source))->uniq());
|
||||
data["type"] = "QString";
|
||||
data["units"] = "";
|
||||
|
||||
|
@ -73,15 +73,14 @@ QVariantMap WeatherSource::initialData(const QString &_source) const
|
||||
} else if (_source.startsWith("weather/weather")) {
|
||||
data["min"] = "";
|
||||
data["max"] = "";
|
||||
data["name"] = QString("ID string map for '%1'")
|
||||
.arg(m_extWeather->itemByTagNumber(ind)->uniq());
|
||||
data["name"]
|
||||
= QString("ID string map for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq());
|
||||
data["type"] = "QString";
|
||||
data["units"] = "";
|
||||
} else if (_source.startsWith("weather/humidity")) {
|
||||
data["min"] = 0;
|
||||
data["max"] = 100;
|
||||
data["name"] = QString("Humidity for '%1'")
|
||||
.arg(m_extWeather->itemByTagNumber(ind)->uniq());
|
||||
data["name"] = QString("Humidity for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq());
|
||||
data["type"] = "integer";
|
||||
data["units"] = "%";
|
||||
} else if (_source.startsWith("weather/pressure")) {
|
||||
@ -94,15 +93,15 @@ QVariantMap WeatherSource::initialData(const QString &_source) const
|
||||
} else if (_source.startsWith("weather/temperature")) {
|
||||
data["min"] = 0.0;
|
||||
data["max"] = 0.0;
|
||||
data["name"] = QString("Temperature for '%1'")
|
||||
.arg(m_extWeather->itemByTagNumber(ind)->uniq());
|
||||
data["name"]
|
||||
= QString("Temperature for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq());
|
||||
data["type"] = "float";
|
||||
data["units"] = "°C";
|
||||
} else if (_source.startsWith("weather/timestamp")) {
|
||||
data["min"] = "";
|
||||
data["max"] = "";
|
||||
data["name"] = QString("Timestamp for '%1'")
|
||||
.arg(m_extWeather->itemByTagNumber(ind)->uniq());
|
||||
data["name"]
|
||||
= QString("Timestamp for '%1'").arg(m_extWeather->itemByTagNumber(ind)->uniq());
|
||||
data["type"] = "QString";
|
||||
data["units"] = "";
|
||||
}
|
||||
|
Reference in New Issue
Block a user