fix plasma crash with extquotes

rewrite main widget to use signal-slot model
This commit is contained in:
arcan1s 2015-06-30 07:13:58 +03:00
parent aa15e13713
commit 41deb8ef72
6 changed files with 43 additions and 15 deletions

View File

@ -1,3 +1,7 @@
Ver.2.3.2:
* improve quotes support, e.g. fix plasma crash
* rewrite main widget to signal-slot update model
Ver.2.3.1: Ver.2.3.1:
- fix bug with no updates from configuration UI - fix bug with no updates from configuration UI
- fix invalid vertical tab parsing - fix invalid vertical tab parsing

View File

@ -58,6 +58,7 @@ Item {
"batInTooltipColor": plasmoid.configuration.batInTooltipColor "batInTooltipColor": plasmoid.configuration.batInTooltipColor
} }
signal dropSource(string sourceName)
signal needUpdate signal needUpdate
signal sizeUpdate signal sizeUpdate
@ -85,7 +86,7 @@ Item {
// FIXME: ugly workaround to make some sources working // FIXME: ugly workaround to make some sources working
systemmonitorDE.interval = plasmoid.configuration.interval systemmonitorDE.interval = plasmoid.configuration.interval
if (AWKeys.setDataBySource(sourceName, data, settings)) disconnectSource(sourceName) AWKeys.setDataBySource(sourceName, data, settings)
} }
onSourceAdded: { onSourceAdded: {
@ -106,7 +107,7 @@ Item {
// FIXME: ugly workaround to make some sources working // FIXME: ugly workaround to make some sources working
extsysmonDE.interval = plasmoid.configuration.interval extsysmonDE.interval = plasmoid.configuration.interval
if (AWKeys.setDataBySource(sourceName, data, settings)) needUpdate() AWKeys.setDataBySource(sourceName, data, settings)
} }
} }
@ -164,6 +165,16 @@ Item {
// plasmoid.setAction("report", i18n("Mail to developers"), "email") // plasmoid.setAction("report", i18n("Mail to developers"), "email")
// init submodule // init submodule
Plasmoid.userConfiguringChanged(false) Plasmoid.userConfiguringChanged(false)
// connect data
AWKeys.dropSourceFromDataengine.connect(dropSource)
AWKeys.needToBeUpdated.connect(needUpdate)
}
onDropSource: {
if (debug) console.log("[main::onDropSource]")
if (debug) console.log("[main::onDropSource] : Source " + sourceName)
systemmonitorDE.disconnectSource(sourceName)
} }
onNeedUpdate: { onNeedUpdate: {

View File

@ -355,17 +355,20 @@ QStringList AWKeys::getHddDevices()
} }
bool AWKeys::setDataBySource(const QString sourceName, const QVariantMap data, void AWKeys::setDataBySource(const QString sourceName, const QVariantMap data,
const QVariantMap params) const QVariantMap params)
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Source" << sourceName; if (debug) qDebug() << PDEBUG << ":" << "Source" << sourceName;
if (sourceName == QString("update")) return true; if (sourceName == QString("update")) {
emit(needToBeUpdated());
return;
}
// checking // checking
if (!checkKeys(data)) return false; if (!checkKeys(data)) return;
if (keys.isEmpty()) return false; if (keys.isEmpty()) return;
// regular expressions // regular expressions
QRegExp cpuRegExp = QRegExp(QString("cpu/cpu.*/TotalLoad")); QRegExp cpuRegExp = QRegExp(QString("cpu/cpu.*/TotalLoad"));
@ -653,11 +656,9 @@ bool AWKeys::setDataBySource(const QString sourceName, const QVariantMap data,
values[QString("cuptime")].replace(QString("$mm"), QString("%1").arg(minutes, 2, 10, QChar('0'))); values[QString("cuptime")].replace(QString("$mm"), QString("%1").arg(minutes, 2, 10, QChar('0')));
values[QString("cuptime")].replace(QString("$m"), QString("%1").arg(minutes)); values[QString("cuptime")].replace(QString("$m"), QString("%1").arg(minutes));
} else { } else {
if (debug) qDebug() << PDEBUG << ":" << "Source not found"; if (debug) qDebug() << PDEBUG << ":" << "Source" << sourceName << "not found";
return true; emit(dropSourceFromDataengine(sourceName));
} }
return false;
} }

View File

@ -63,7 +63,7 @@ public:
Q_INVOKABLE void addDevice(const QString source); Q_INVOKABLE void addDevice(const QString source);
Q_INVOKABLE QStringList dictKeys(const bool sorted = false); Q_INVOKABLE QStringList dictKeys(const bool sorted = false);
Q_INVOKABLE QStringList getHddDevices(); Q_INVOKABLE QStringList getHddDevices();
Q_INVOKABLE bool setDataBySource(const QString sourceName, const QVariantMap data, Q_INVOKABLE void setDataBySource(const QString sourceName, const QVariantMap data,
const QVariantMap params); const QVariantMap params);
// values // values
Q_INVOKABLE void graphicalValueByKey(); Q_INVOKABLE void graphicalValueByKey();
@ -72,6 +72,10 @@ public:
// configuration // configuration
Q_INVOKABLE void editItem(const QString type); Q_INVOKABLE void editItem(const QString type);
signals:
void dropSourceFromDataengine(const QString source);
void needToBeUpdated();
private slots: private slots:
void loadKeysFromCache(); void loadKeysFromCache();
void reinitKeys(); void reinitKeys();

View File

@ -52,6 +52,9 @@ ExtQuotes::ExtQuotes(QWidget *parent, const QString quotesName, const QStringLis
values[QString("price")] = 0.0; values[QString("price")] = 0.0;
values[QString("pricechg")] = 0.0; values[QString("pricechg")] = 0.0;
values[QString("percpricechg")] = 0.0; values[QString("percpricechg")] = 0.0;
manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(quotesReplyReceived(QNetworkReply *)));
} }
@ -59,6 +62,9 @@ ExtQuotes::~ExtQuotes()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
disconnect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(quotesReplyReceived(QNetworkReply *)));
delete manager;
delete ui; delete ui;
} }
@ -235,13 +241,11 @@ void ExtQuotes::readConfiguration()
QMap<QString, float> ExtQuotes::run() QMap<QString, float> ExtQuotes::run()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
if (!m_active) return values; if ((!m_active) || (isRunning)) return values;
if (times == 1) { if (times == 1) {
if (debug) qDebug() << PDEBUG << ":" << "Send request"; if (debug) qDebug() << PDEBUG << ":" << "Send request";
QNetworkAccessManager *manager = new QNetworkAccessManager(this); isRunning = true;
connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(quotesReplyReceived(QNetworkReply *)));
QNetworkReply *reply = manager->get(QNetworkRequest(QUrl(url()))); QNetworkReply *reply = manager->get(QNetworkRequest(QUrl(url())));
new QReplyTimeout(reply, 1000); new QReplyTimeout(reply, 1000);
} }
@ -351,6 +355,8 @@ void ExtQuotes::quotesReplyReceived(QNetworkReply *reply)
values[QString("pricechg")] = values[QString("price")] == 0 ? 0.0 : value - values[QString("price")]; values[QString("pricechg")] = values[QString("price")] == 0 ? 0.0 : value - values[QString("price")];
values[QString("percpricechg")] = 100 * values[QString("pricechg")] / values[QString("price")]; values[QString("percpricechg")] = 100 * values[QString("pricechg")] / values[QString("price")];
values[QString("price")] = value; values[QString("price")] = value;
isRunning = false;
} }

View File

@ -96,6 +96,8 @@ private:
QString m_fileName; QString m_fileName;
QStringList m_dirs; QStringList m_dirs;
bool debug; bool debug;
QNetworkAccessManager *manager;
bool isRunning = false;
Ui::ExtQuotes *ui; Ui::ExtQuotes *ui;
QString url(); QString url();
// properties // properties