possible fix #75

I've added 'optimize' option (by default true). If it options is set
then sources will be checked if they are required (with dependencies if
any). And if they are not required they will be dropped by using common
mechanism.

Please note that if this option enabled the following features (at the
    moment) will be unavailable:

* key request from context menu (from configuration interface it still works)
* notifications event if sources on which notification is not connected

I suppose this commit will increase performance in about 4-5 times.
This commit is contained in:
Evgenii Alekseev 2016-02-05 11:08:09 +03:00
parent 54e1545bb1
commit d856fa8e97
23 changed files with 522 additions and 374 deletions

View File

@ -32,6 +32,9 @@
<entry name="checkUpdates" type="bool"> <entry name="checkUpdates" type="bool">
<default>true</default> <default>true</default>
</entry> </entry>
<entry name="optimize" type="bool">
<default>true</default>
</entry>
<entry name="height" type="int"> <entry name="height" type="int">
<default>0</default> <default>0</default>
</entry> </entry>
@ -95,13 +98,13 @@
<entry name="swapTooltipColor" type="string"> <entry name="swapTooltipColor" type="string">
<default>#ffff00</default> <default>#ffff00</default>
</entry> </entry>
<entry name="downTooltip" type="bool"> <entry name="downkbTooltip" type="bool">
<default>true</default> <default>true</default>
</entry> </entry>
<entry name="downTooltipColor" type="string"> <entry name="downkbTooltipColor" type="string">
<default>#00ffff</default> <default>#00ffff</default>
</entry> </entry>
<entry name="upTooltipColor" type="string"> <entry name="upkbTooltipColor" type="string">
<default>#ff00ff</default> <default>#ff00ff</default>
</entry> </entry>
<entry name="batTooltip" type="bool"> <entry name="batTooltip" type="bool">

View File

@ -45,6 +45,7 @@ Item {
property alias cfg_wrapText: wordWrap.checked property alias cfg_wrapText: wordWrap.checked
property alias cfg_notify: notify.checked property alias cfg_notify: notify.checked
property alias cfg_checkUpdates: updates.checked property alias cfg_checkUpdates: updates.checked
property alias cfg_optimize: optimize.checked
property alias cfg_height: widgetHeight.value property alias cfg_height: widgetHeight.value
property alias cfg_width: widgetWidth.value property alias cfg_width: widgetWidth.value
property alias cfg_interval: update.value property alias cfg_interval: update.value
@ -143,6 +144,20 @@ Item {
} }
} }
Row {
height: implicitHeight
width: parent.width
QtControls.Label {
height: parent.heigth
width: parent.width * 2 / 5
}
QtControls.CheckBox {
id: optimize
width: parent.width * 3 / 5
text: i18n("Optimize subscription")
}
}
Row { Row {
height: implicitHeight height: implicitHeight
width: parent.width width: parent.width

View File

@ -46,15 +46,15 @@ Item {
"cpuclTooltip": plasmoid.configuration.cpuclTooltip, "cpuclTooltip": plasmoid.configuration.cpuclTooltip,
"memTooltip": plasmoid.configuration.memTooltip, "memTooltip": plasmoid.configuration.memTooltip,
"swapTooltip": plasmoid.configuration.swapTooltip, "swapTooltip": plasmoid.configuration.swapTooltip,
"downTooltip": plasmoid.configuration.downTooltip, "downkbTooltip": plasmoid.configuration.downkbTooltip,
"upTooltip": plasmoid.configuration.downTooltip, "upkbTooltip": plasmoid.configuration.downkbTooltip,
"batTooltip": plasmoid.configuration.batTooltip, "batTooltip": plasmoid.configuration.batTooltip,
"cpuTooltipColor": plasmoid.configuration.cpuTooltipColor, "cpuTooltipColor": plasmoid.configuration.cpuTooltipColor,
"cpuclTooltipColor": plasmoid.configuration.cpuclTooltipColor, "cpuclTooltipColor": plasmoid.configuration.cpuclTooltipColor,
"memTooltipColor": plasmoid.configuration.memTooltipColor, "memTooltipColor": plasmoid.configuration.memTooltipColor,
"swapTooltipColor": plasmoid.configuration.swapTooltipColor, "swapTooltipColor": plasmoid.configuration.swapTooltipColor,
"downTooltipColor": plasmoid.configuration.downTooltipColor, "downkbTooltipColor": plasmoid.configuration.downkbTooltipColor,
"upTooltipColor": plasmoid.configuration.upTooltipColor, "upkbTooltipColor": plasmoid.configuration.upkbTooltipColor,
"batTooltipColor": plasmoid.configuration.batTooltipColor, "batTooltipColor": plasmoid.configuration.batTooltipColor,
"batInTooltipColor": plasmoid.configuration.batInTooltipColor, "batInTooltipColor": plasmoid.configuration.batInTooltipColor,
// additional field to parse AC status // additional field to parse AC status
@ -136,6 +136,8 @@ Item {
if (debug) console.debug() if (debug) console.debug()
// actions // actions
// it makes no sense to use this field with optimization enable
if (!plasmoid.configuration.optimize)
plasmoid.setAction("requestKey", i18n("Request key"), "utilities-system-monitor") plasmoid.setAction("requestKey", i18n("Request key"), "utilities-system-monitor")
plasmoid.setAction("showReadme", i18n("Show README"), "text-x-readme") plasmoid.setAction("showReadme", i18n("Show README"), "text-x-readme")
plasmoid.setAction("checkUpdates", i18n("Check updates"), "system-software-update") plasmoid.setAction("checkUpdates", i18n("Check updates"), "system-software-update")
@ -187,9 +189,9 @@ Item {
if (debug) console.debug() if (debug) console.debug()
// init submodule // init submodule
awKeys.initKeys(plasmoid.configuration.text, plasmoid.configuration.interval,
plasmoid.configuration.queueLimit)
awKeys.initDataAggregator(tooltipSettings) awKeys.initDataAggregator(tooltipSettings)
awKeys.initKeys(plasmoid.configuration.text, plasmoid.configuration.interval,
plasmoid.configuration.queueLimit, plasmoid.configuration.optimize)
awKeys.setWrapNewLines(plasmoid.configuration.wrapNewLines) awKeys.setWrapNewLines(plasmoid.configuration.wrapNewLines)
// configure aggregator // configure aggregator
awKeys.setAggregatorProperty("acOffline", plasmoid.configuration.acOffline) awKeys.setAggregatorProperty("acOffline", plasmoid.configuration.acOffline)

View File

@ -48,9 +48,9 @@ Item {
property alias cfg_memTooltipColor: memTooltipColor.text property alias cfg_memTooltipColor: memTooltipColor.text
property alias cfg_swapTooltip: swapTooltip.checked property alias cfg_swapTooltip: swapTooltip.checked
property alias cfg_swapTooltipColor: swapTooltipColor.text property alias cfg_swapTooltipColor: swapTooltipColor.text
property alias cfg_downTooltip: downTooltip.checked property alias cfg_downkbTooltip: downkbTooltip.checked
property alias cfg_downTooltipColor: downTooltipColor.text property alias cfg_downkbTooltipColor: downkbTooltipColor.text
property alias cfg_upTooltipColor: upTooltipColor.text property alias cfg_upkbTooltipColor: upkbTooltipColor.text
property alias cfg_batTooltip: batTooltip.checked property alias cfg_batTooltip: batTooltip.checked
property alias cfg_batTooltipColor: batTooltipColor.text property alias cfg_batTooltipColor: batTooltipColor.text
property alias cfg_batInTooltipColor: batInTooltipColor.text property alias cfg_batInTooltipColor: batInTooltipColor.text
@ -273,7 +273,7 @@ Item {
} }
QtControls.GroupBox { QtControls.GroupBox {
id: downTooltip id: downkbTooltip
height: implicitHeight height: implicitHeight
width: parent.width width: parent.width
checkable: true checkable: true
@ -292,22 +292,22 @@ Item {
text: i18n("Download speed color") text: i18n("Download speed color")
} }
QtControls.Button { QtControls.Button {
id: downTooltipColor id: downkbTooltipColor
width: parent.width * 3 / 5 width: parent.width * 3 / 5
style: QtStyles.ButtonStyle { style: QtStyles.ButtonStyle {
background: Rectangle { background: Rectangle {
color: plasmoid.configuration.downTooltipColor color: plasmoid.configuration.downkbTooltipColor
} }
} }
text: plasmoid.configuration.downTooltipColor text: plasmoid.configuration.downkbTooltipColor
onClicked: downTooltipColorDialog.visible = true onClicked: downkbTooltipColorDialog.visible = true
} }
QtDialogs.ColorDialog { QtDialogs.ColorDialog {
id: downTooltipColorDialog id: downkbTooltipColorDialog
title: i18n("Select a color") title: i18n("Select a color")
color: downTooltipColor.text color: downkbTooltipColor.text
onAccepted: downTooltipColor.text = downTooltipColorDialog.color onAccepted: downkbTooltipColor.text = downkbTooltipColorDialog.color
} }
} }
Row { Row {
@ -321,22 +321,22 @@ Item {
text: i18n("Upload speed color") text: i18n("Upload speed color")
} }
QtControls.Button { QtControls.Button {
id: upTooltipColor id: upkbTooltipColor
width: parent.width * 3 / 5 width: parent.width * 3 / 5
style: QtStyles.ButtonStyle { style: QtStyles.ButtonStyle {
background: Rectangle { background: Rectangle {
color: plasmoid.configuration.upTooltipColor color: plasmoid.configuration.upkbTooltipColor
} }
} }
text: plasmoid.configuration.upTooltipColor text: plasmoid.configuration.upkbTooltipColor
onClicked: upTooltipColorDialog.visible = true onClicked: upkbTooltipColorDialog.visible = true
} }
QtDialogs.ColorDialog { QtDialogs.ColorDialog {
id: upTooltipColorDialog id: upkbTooltipColorDialog
title: i18n("Select a color") title: i18n("Select a color")
color: upTooltipColor.text color: upkbTooltipColor.text
onAccepted: upTooltipColor.text = upTooltipColorDialog.color onAccepted: upkbTooltipColor.text = upkbTooltipColorDialog.color
} }
} }
} }

View File

@ -318,7 +318,7 @@ Item {
onClicked: { onClicked: {
lock = false lock = false
awKeys.initKeys(textPattern.text, plasmoid.configuration.interval, awKeys.initKeys(textPattern.text, plasmoid.configuration.interval,
plasmoid.configuration.queueLimit) plasmoid.configuration.queueLimit, false)
awKeys.needToBeUpdated() awKeys.needToBeUpdated()
} }
} }
@ -346,7 +346,7 @@ Item {
awKeys.needTextToBeUpdated.connect(needTextUpdate) awKeys.needTextToBeUpdated.connect(needTextUpdate)
// init submodule // init submodule
awKeys.initKeys(plasmoid.configuration.text, plasmoid.configuration.interval, awKeys.initKeys(plasmoid.configuration.text, plasmoid.configuration.interval,
plasmoid.configuration.queueLimit) plasmoid.configuration.queueLimit, false)
awKeys.setAggregatorProperty("acOffline", plasmoid.configuration.acOffline) awKeys.setAggregatorProperty("acOffline", plasmoid.configuration.acOffline)
awKeys.setAggregatorProperty("acOnline", plasmoid.configuration.acOnline) awKeys.setAggregatorProperty("acOnline", plasmoid.configuration.acOnline)
awKeys.setAggregatorProperty("customTime", plasmoid.configuration.customTime) awKeys.setAggregatorProperty("customTime", plasmoid.configuration.customTime)

View File

@ -87,7 +87,7 @@ void AWDataAggregator::setParameters(QVariantMap settings)
counts += configuration[QString("cpuclTooltip")].toInt(); counts += configuration[QString("cpuclTooltip")].toInt();
counts += configuration[QString("memTooltip")].toInt(); counts += configuration[QString("memTooltip")].toInt();
counts += configuration[QString("swapTooltip")].toInt(); counts += configuration[QString("swapTooltip")].toInt();
counts += configuration[QString("downTooltip")].toInt(); counts += configuration[QString("downkbTooltip")].toInt();
counts += configuration[QString("batTooltip")].toInt(); counts += configuration[QString("batTooltip")].toInt();
// resize tooltip image // resize tooltip image
toolTipView->resize(100 * counts, 105); toolTipView->resize(100 * counts, 105);
@ -96,8 +96,8 @@ void AWDataAggregator::setParameters(QVariantMap settings)
boundaries[QString("cpuclTooltip")] = 4000.0; boundaries[QString("cpuclTooltip")] = 4000.0;
boundaries[QString("memTooltip")] = 100.0; boundaries[QString("memTooltip")] = 100.0;
boundaries[QString("swapTooltip")] = 100.0; boundaries[QString("swapTooltip")] = 100.0;
boundaries[QString("downTooltip")] = 1.0; boundaries[QString("downkbTooltip")] = 1.0;
boundaries[QString("upTooltip")] = 1.0; boundaries[QString("upkbTooltip")] = 1.0;
boundaries[QString("batTooltip")] = 100.0; boundaries[QString("batTooltip")] = 100.0;
requiredKeys.clear(); requiredKeys.clear();
@ -109,10 +109,10 @@ void AWDataAggregator::setParameters(QVariantMap settings)
requiredKeys.append(QString("memTooltip")); requiredKeys.append(QString("memTooltip"));
if (configuration[QString("swapTooltip")].toBool()) if (configuration[QString("swapTooltip")].toBool())
requiredKeys.append(QString("swapTooltip")); requiredKeys.append(QString("swapTooltip"));
if (configuration[QString("downTooltip")].toBool()) if (configuration[QString("downkbTooltip")].toBool())
requiredKeys.append(QString("downTooltip")); requiredKeys.append(QString("downkbTooltip"));
if (configuration[QString("upTooltip")].toBool()) if (configuration[QString("upkbTooltip")].toBool())
requiredKeys.append(QString("upTooltip")); requiredKeys.append(QString("upkbTooltip"));
if (configuration[QString("batTooltip")].toBool()) if (configuration[QString("batTooltip")].toBool())
requiredKeys.append(QString("batTooltip")); requiredKeys.append(QString("batTooltip"));
@ -133,9 +133,9 @@ QPixmap AWDataAggregator::tooltipImage()
bool down = false; bool down = false;
for (auto key : requiredKeys) { for (auto key : requiredKeys) {
// create frame // create frame
float normX = 100.0 / static_cast<float>(data[key].count()); float normX = 100.0f / static_cast<float>(data[key].count());
float normY = 100.0 / (1.5 * boundaries[key]); float normY = 100.0f / (1.5f * boundaries[key]);
float shift = requiredKeys.indexOf(key) * 100.0; float shift = requiredKeys.indexOf(key) * 100.0f;
if (down) if (down)
shift -= 100.0; shift -= 100.0;
// apply pen color // apply pen color
@ -146,9 +146,9 @@ QPixmap AWDataAggregator::tooltipImage()
for (int j = 0; j < data[key].count() - 1; j++) { for (int j = 0; j < data[key].count() - 1; j++) {
// some magic here // some magic here
float x1 = j * normX + shift; float x1 = j * normX + shift;
float y1 = -fabs(data[key].at(j)) * normY + 5.0; float y1 = -fabs(data[key].at(j)) * normY + 5.0f;
float x2 = (j + 1) * normX + shift; float x2 = (j + 1) * normX + shift;
float y2 = -fabs(data[key].at(j + 1)) * normY + 5.0; float y2 = -fabs(data[key].at(j + 1)) * normY + 5.0f;
if (key == QString("batTooltip")) { if (key == QString("batTooltip")) {
if (data[key].at(j + 1) > 0) if (data[key].at(j + 1) > 0)
pen.setColor(QColor( pen.setColor(QColor(
@ -160,7 +160,7 @@ QPixmap AWDataAggregator::tooltipImage()
} }
toolTipScene->addLine(x1, y1, x2, y2, pen); toolTipScene->addLine(x1, y1, x2, y2, pen);
} }
if (key == QString("downTooltip")) if (key == QString("downkbTooltip"))
down = true; down = true;
} }
@ -265,8 +265,8 @@ void AWDataAggregator::setData(const QHash<QString, QString> &values)
setData(QString("cpuclTooltip"), values[QString("cpucl")].toFloat()); setData(QString("cpuclTooltip"), values[QString("cpucl")].toFloat());
setData(QString("memTooltip"), values[QString("mem")].toFloat(), 90.0); setData(QString("memTooltip"), values[QString("mem")].toFloat(), 90.0);
setData(QString("swapTooltip"), values[QString("swap")].toFloat(), 0.0); setData(QString("swapTooltip"), values[QString("swap")].toFloat(), 0.0);
setData(QString("downTooltip"), values[QString("downkb")].toFloat()); setData(QString("downkbTooltip"), values[QString("downkb")].toFloat());
setData(QString("upTooltip"), values[QString("upkb")].toFloat()); setData(QString("upkbTooltip"), values[QString("upkb")].toFloat());
// additional check for network device // additional check for network device
[this](const QString value) { [this](const QString value) {
checkValue(QString("netdev"), currentNetworkDevice, value); checkValue(QString("netdev"), currentNetworkDevice, value);
@ -298,12 +298,13 @@ void AWDataAggregator::setData(const QString &source, float value,
checkValue(source, value, extremum); checkValue(source, value, extremum);
data[source].append(value); data[source].append(value);
if (source == QString("downTooltip")) { if (source == QString("downkbTooltip")) {
QList<float> netValues QList<float> netValues
= data[QString("downTooltip")] + data[QString("upTooltip")]; = data[QString("downkbTooltip")] + data[QString("upkbTooltip")];
boundaries[QString("downTooltip")] boundaries[QString("downkbTooltip")]
= 1.2 * *std::max_element(netValues.cbegin(), netValues.cend()); = 1.2 * *std::max_element(netValues.cbegin(), netValues.cend());
boundaries[QString("upTooltip")] = boundaries[QString("downTooltip")]; boundaries[QString("upkbTooltip")]
= boundaries[QString("downkbTooltip")];
} }
} }

View File

@ -21,14 +21,10 @@
#include "awkeys.h" #include "awkeys.h"
AWDataEngineAggregator::AWDataEngineAggregator(QObject *parent, AWDataEngineAggregator::AWDataEngineAggregator(QObject *parent)
const int interval)
: QObject(parent) : QObject(parent)
{ {
qCDebug(LOG_AW) << __PRETTY_FUNCTION__; qCDebug(LOG_AW) << __PRETTY_FUNCTION__;
setInterval(interval);
initDataEngines();
} }
@ -36,10 +32,17 @@ AWDataEngineAggregator::~AWDataEngineAggregator()
{ {
qCDebug(LOG_AW) << __PRETTY_FUNCTION__; qCDebug(LOG_AW) << __PRETTY_FUNCTION__;
clear();
}
void AWDataEngineAggregator::clear()
{
// disconnect sources first // disconnect sources first
disconnectSources(); disconnectSources();
m_dataEngines.clear(); m_dataEngines.clear();
delete m_consumer; delete m_consumer;
m_consumer = nullptr;
} }
@ -51,11 +54,27 @@ void AWDataEngineAggregator::disconnectSources()
} }
void AWDataEngineAggregator::setInterval(const int _interval) void AWDataEngineAggregator::initDataEngines(const int interval)
{ {
qCDebug(LOG_AW) << "Interval" << _interval; qCDebug(LOG_AW) << "Init dataengines with interval" << interval;
m_interval = _interval; m_consumer = new Plasma::DataEngineConsumer();
m_dataEngines[QString("systemmonitor")]
= m_consumer->dataEngine(QString("systemmonitor"));
m_dataEngines[QString("extsysmon")]
= m_consumer->dataEngine(QString("extsysmon"));
m_dataEngines[QString("time")] = m_consumer->dataEngine(QString("time"));
// additional method required by systemmonitor structure
connect(m_dataEngines[QString("systemmonitor")],
&Plasma::DataEngine::sourceAdded,
[this, interval](const QString source) {
emit(deviceAdded(source));
m_dataEngines[QString("systemmonitor")]->connectSource(
source, parent(), interval);
});
return reconnectSources(interval);
} }
@ -70,31 +89,13 @@ void AWDataEngineAggregator::dropSource(const QString source)
} }
void AWDataEngineAggregator::reconnectSources() void AWDataEngineAggregator::reconnectSources(const int interval)
{ {
qCDebug(LOG_AW) << "Reconnect sources with interval" << interval;
m_dataEngines[QString("systemmonitor")]->connectAllSources(parent(), m_dataEngines[QString("systemmonitor")]->connectAllSources(parent(),
m_interval); interval);
m_dataEngines[QString("extsysmon")]->connectAllSources(parent(), m_dataEngines[QString("extsysmon")]->connectAllSources(parent(), interval);
m_interval);
m_dataEngines[QString("time")]->connectSource(QString("Local"), parent(), m_dataEngines[QString("time")]->connectSource(QString("Local"), parent(),
1000); 1000);
} }
void AWDataEngineAggregator::initDataEngines()
{
m_consumer = new Plasma::DataEngineConsumer();
m_dataEngines[QString("systemmonitor")]
= m_consumer->dataEngine(QString("systemmonitor"));
m_dataEngines[QString("extsysmon")]
= m_consumer->dataEngine(QString("extsysmon"));
m_dataEngines[QString("time")] = m_consumer->dataEngine(QString("time"));
// additional method required by systemmonitor structure
connect(m_dataEngines[QString("systemmonitor")],
&Plasma::DataEngine::sourceAdded, [this](const QString source) {
emit(deviceAdded(source));
m_dataEngines[QString("systemmonitor")]->connectSource(
source, parent(), m_interval);
});
}

View File

@ -28,28 +28,24 @@
class AWDataEngineAggregator : public QObject class AWDataEngineAggregator : public QObject
{ {
Q_OBJECT Q_OBJECT
Q_PROPERTY(int interval MEMBER m_interval WRITE setInterval);
public: public:
explicit AWDataEngineAggregator(QObject *parent = nullptr, explicit AWDataEngineAggregator(QObject *parent = nullptr);
const int interval = 1000);
virtual ~AWDataEngineAggregator(); virtual ~AWDataEngineAggregator();
void clear();
void disconnectSources(); void disconnectSources();
// properties void initDataEngines(const int interval);
void setInterval(const int _interval);
signals: signals:
void deviceAdded(const QString &source); void deviceAdded(const QString &source);
public slots: public slots:
void dropSource(const QString source); void dropSource(const QString source);
void reconnectSources(); void reconnectSources(const int interval);
private: private:
void initDataEngines();
Plasma::DataEngineConsumer *m_consumer = nullptr; Plasma::DataEngineConsumer *m_consumer = nullptr;
QHash<QString, Plasma::DataEngine *> m_dataEngines; QHash<QString, Plasma::DataEngine *> m_dataEngines;
int m_interval;
}; };

View File

@ -81,6 +81,93 @@ bool AWKeyCache::addKeyToCache(const QString type, const QString key)
} }
QStringList AWKeyCache::getRequiredKeys(const QStringList &keys,
const QStringList &bars,
const QVariantMap &tooltip,
const QStringList &allKeys)
{
qCDebug(LOG_AW) << "Looking for required keys in" << keys << bars
<< "using tooltip settings" << tooltip;
// initial copy
QSet<QString> used = QSet<QString>::fromList(keys);
// insert bars
for (auto bar : bars) {
bar.remove(QRegExp(QString("^bar[0-9]{1,}")));
used << bar;
}
// insert keys from tooltip
for (auto key : tooltip.keys()) {
if ((key.endsWith(QString("Tooltip"))) && (tooltip[key].toBool())) {
key.remove(QString("Tooltip"));
used << key;
}
}
// insert depending keys, refer to AWKeys::calculateValues()
// hddtotmb*
for (auto key : allKeys.filter(QRegExp(QString("^hddtotmb")))) {
if (!used.contains(key))
continue;
key.remove(QString("hddtotmb"));
int index = key.toInt();
used << QString("hddfreemb%1").arg(index)
<< QString("hddmb%1").arg(index);
}
// hddtotgb*
for (auto key : allKeys.filter(QRegExp(QString("^hddtotgb")))) {
if (!used.contains(key))
continue;
key.remove(QString("hddtotgb"));
int index = key.toInt();
used << QString("hddfreegb%1").arg(index)
<< QString("hddgb%1").arg(index);
}
// mem
if (used.contains(QString("mem")))
used << QString("memmb") << QString("memtotmb");
// memtotmb
if (used.contains(QString("memtotmb")))
used << QString("memusedmb") << QString("memfreemb");
// memtotgb
if (used.contains(QString("memtotgb")))
used << QString("memusedgb") << QString("memfreegb");
// swap
if (used.contains(QString("swap")))
used << QString("swapmb") << QString("swaptotmb");
// swaptotmb
if (used.contains(QString("swaptotmb")))
used << QString("swapmb") << QString("swapfreemb");
// memtotgb
if (used.contains(QString("swaptotgb")))
used << QString("swapgb") << QString("swapfreegb");
// network keys
QStringList netKeys(QStringList() << QString("up") << QString("upkb")
<< QString("upunits") << QString("down")
<< QString("downkb")
<< QString("downunits"));
for (auto key : netKeys) {
if (!used.contains(key))
continue;
QStringList filt
= allKeys.filter(QRegExp(QString("^%1[0-9]{1,}").arg(key)));
for (auto filtered : filt)
used << filtered;
}
// netdev key
if (std::any_of(netKeys.cbegin(), netKeys.cend(),
[&used](const QString &key) { return used.contains(key); }))
used << QString("netdev");
// HACK append dummy if there are no other keys. This hack is required
// because empty list leads to the same behaviour as skip checking
if (used.isEmpty())
used << QString("dummy");
return used.toList();
}
QHash<QString, QStringList> AWKeyCache::loadKeysFromCache() QHash<QString, QStringList> AWKeyCache::loadKeysFromCache()
{ {
QString fileName = QString("%1/awesomewidgets.ndx") QString fileName = QString("%1/awesomewidgets.ndx")

View File

@ -21,11 +21,15 @@
#include <QHash> #include <QHash>
#include <QString> #include <QString>
#include <QVariant>
namespace AWKeyCache namespace AWKeyCache
{ {
bool addKeyToCache(const QString type, const QString key = QString("")); bool addKeyToCache(const QString type, const QString key = QString(""));
QStringList getRequiredKeys(const QStringList &keys, const QStringList &bars,
const QVariantMap &tooltip,
const QStringList &allKeys);
QHash<QString, QStringList> loadKeysFromCache(); QHash<QString, QStringList> loadKeysFromCache();
}; };

View File

@ -25,6 +25,7 @@
#include "awdataaggregator.h" #include "awdataaggregator.h"
#include "awdataengineaggregator.h" #include "awdataengineaggregator.h"
#include "awdebug.h" #include "awdebug.h"
#include "awkeycache.h"
#include "awkeyoperations.h" #include "awkeyoperations.h"
#include "awkeysaggregator.h" #include "awkeysaggregator.h"
#include "awpatternfunctions.h" #include "awpatternfunctions.h"
@ -45,7 +46,9 @@ AWKeys::AWKeys(QObject *parent)
aggregator = new AWKeysAggregator(this); aggregator = new AWKeysAggregator(this);
dataAggregator = new AWDataAggregator(this); dataAggregator = new AWDataAggregator(this);
dataEngineAggregator = new AWDataEngineAggregator(this);
keyOperator = new AWKeyOperations(this); keyOperator = new AWKeyOperations(this);
// update key data if required // update key data if required
connect(keyOperator, SIGNAL(updateKeys(QStringList)), this, connect(keyOperator, SIGNAL(updateKeys(QStringList)), this,
SLOT(reinitKeys(QStringList))); SLOT(reinitKeys(QStringList)));
@ -53,6 +56,11 @@ AWKeys::AWKeys(QObject *parent)
connect(dataAggregator, SIGNAL(toolTipPainted(const QString)), this, connect(dataAggregator, SIGNAL(toolTipPainted(const QString)), this,
SIGNAL(needToolTipToBeUpdated(const QString))); SIGNAL(needToolTipToBeUpdated(const QString)));
connect(this, SIGNAL(needToBeUpdated()), this, SLOT(updateTextData())); connect(this, SIGNAL(needToBeUpdated()), this, SLOT(updateTextData()));
connect(this, SIGNAL(dropSourceFromDataengine(QString)),
dataEngineAggregator, SLOT(dropSource(QString)));
// transfer signal from dataengine to update source list
connect(dataEngineAggregator, SIGNAL(deviceAdded(const QString &)),
keyOperator, SLOT(addDevice(const QString &)));
} }
@ -73,32 +81,29 @@ void AWKeys::initDataAggregator(const QVariantMap tooltipParams)
{ {
qCDebug(LOG_AW) << "Tooltip parameters" << tooltipParams; qCDebug(LOG_AW) << "Tooltip parameters" << tooltipParams;
dataAggregator->setParameters(tooltipParams); // store parameters to generate m_requiredKeys
m_tooltipParams = tooltipParams;
dataAggregator->setParameters(m_tooltipParams);
} }
void AWKeys::initKeys(const QString currentPattern, const int interval, void AWKeys::initKeys(const QString currentPattern, const int interval,
const int limit) const int limit, const bool optimize)
{ {
qCDebug(LOG_AW) << "Pattern" << currentPattern << "with interval" qCDebug(LOG_AW) << "Pattern" << currentPattern << "with interval"
<< interval << "and queue limit" << limit; << interval << "and queue limit" << limit
<< "with optimization" << optimize;
// init // init
keyOperator->setPattern(currentPattern); m_optimize = optimize;
if (dataEngineAggregator == nullptr) {
dataEngineAggregator = new AWDataEngineAggregator(this, interval);
connect(this, SIGNAL(dropSourceFromDataengine(QString)),
dataEngineAggregator, SLOT(dropSource(QString)));
// transfer signal from dataengine to update source list
connect(dataEngineAggregator, SIGNAL(deviceAdded(const QString &)),
keyOperator, SLOT(addDevice(const QString &)));
} else
dataEngineAggregator->setInterval(interval);
m_threadPool->setMaxThreadCount(limit == 0 ? QThread::idealThreadCount() m_threadPool->setMaxThreadCount(limit == 0 ? QThread::idealThreadCount()
: limit); : limit);
// child objects
keyOperator->setPattern(currentPattern);
keyOperator->updateCache(); keyOperator->updateCache();
dataEngineAggregator->clear();
return dataEngineAggregator->reconnectSources(); return dataEngineAggregator->initDataEngines(interval);
} }
@ -200,6 +205,11 @@ void AWKeys::reinitKeys(const QStringList currentKeys)
m_foundKeys m_foundKeys
= AWPatternFunctions::findKeys(keyOperator->pattern(), currentKeys); = AWPatternFunctions::findKeys(keyOperator->pattern(), currentKeys);
m_foundLambdas = AWPatternFunctions::findLambdas(keyOperator->pattern()); m_foundLambdas = AWPatternFunctions::findLambdas(keyOperator->pattern());
// get required keys
m_requiredKeys
= m_optimize ? AWKeyCache::getRequiredKeys(m_foundKeys, m_foundBars,
m_tooltipParams, currentKeys)
: QStringList();
// set key data to aggregator // set key data to aggregator
aggregator->setDevices(keyOperator->devices()); aggregator->setDevices(keyOperator->devices());
@ -347,8 +357,8 @@ void AWKeys::setDataBySource(const QString &sourceName, const QVariantMap &data)
// first list init // first list init
QStringList tags = aggregator->keysFromSource(sourceName); QStringList tags = aggregator->keysFromSource(sourceName);
if (tags.isEmpty()) if (tags.isEmpty())
tags = aggregator->registerSource(sourceName, tags = aggregator->registerSource(
data[QString("units")].toString()); sourceName, data[QString("units")].toString(), m_requiredKeys);
// update data or drop source if there are no matches and exit // update data or drop source if there are no matches and exit
if (tags.isEmpty()) { if (tags.isEmpty()) {

View File

@ -40,7 +40,7 @@ public:
virtual ~AWKeys(); virtual ~AWKeys();
Q_INVOKABLE void initDataAggregator(const QVariantMap tooltipParams); Q_INVOKABLE void initDataAggregator(const QVariantMap tooltipParams);
Q_INVOKABLE void initKeys(const QString currentPattern, const int interval, Q_INVOKABLE void initKeys(const QString currentPattern, const int interval,
const int limit); const int limit, const bool optimize);
Q_INVOKABLE void setAggregatorProperty(const QString key, Q_INVOKABLE void setAggregatorProperty(const QString key,
const QVariant value); const QVariant value);
Q_INVOKABLE void setWrapNewLines(const bool wrap = false); Q_INVOKABLE void setWrapNewLines(const bool wrap = false);
@ -84,8 +84,10 @@ private:
AWKeysAggregator *aggregator = nullptr; AWKeysAggregator *aggregator = nullptr;
AWKeyOperations *keyOperator = nullptr; AWKeyOperations *keyOperator = nullptr;
// variables // variables
QStringList m_foundBars, m_foundKeys, m_foundLambdas; QVariantMap m_tooltipParams;
QStringList m_foundBars, m_foundKeys, m_foundLambdas, m_requiredKeys;
QHash<QString, QString> values; QHash<QString, QString> values;
bool m_optimize = false;
bool m_wrapNewLines = false; bool m_wrapNewLines = false;
// multithread features // multithread features
QThreadPool *m_threadPool = nullptr; QThreadPool *m_threadPool = nullptr;

View File

@ -154,15 +154,6 @@ QStringList AWKeysAggregator::keysFromSource(const QString &source) const
} }
QStringList
AWKeysAggregator::requiredByKeysFromSource(const QString &source) const
{
qCDebug(LOG_AW) << "Search for source" << source;
return m_requiredByMap.values(source);
}
void AWKeysAggregator::setAcOffline(const QString inactive) void AWKeysAggregator::setAcOffline(const QString inactive)
{ {
qCDebug(LOG_AW) << "Inactive AC string" << inactive; qCDebug(LOG_AW) << "Inactive AC string" << inactive;
@ -222,7 +213,8 @@ void AWKeysAggregator::setTranslate(const bool translate)
// HACK units required to define should the value be calculated as temperature // HACK units required to define should the value be calculated as temperature
// or fan data // or fan data
QStringList AWKeysAggregator::registerSource(const QString &source, QStringList AWKeysAggregator::registerSource(const QString &source,
const QString &units) const QString &units,
const QStringList &keys)
{ {
qCDebug(LOG_AW) << "Source" << source << "with units" << units; qCDebug(LOG_AW) << "Source" << source << "with units" << units;
@ -338,11 +330,6 @@ QStringList AWKeysAggregator::registerSource(const QString &source,
key = QString("hddfreegb%1").arg(index); key = QString("hddfreegb%1").arg(index);
m_map.insertMulti(source, key); m_map.insertMulti(source, key);
m_formater[key] = MemGBFormat; m_formater[key] = MemGBFormat;
// fill required by list
m_requiredByMap.insertMulti(source,
QString("hddtotmb%1").arg(index));
m_requiredByMap.insertMulti(source,
QString("hddtotgb%1").arg(index));
} }
} else if (source.contains(mountUsedRegExp)) { } else if (source.contains(mountUsedRegExp)) {
// used // used
@ -358,11 +345,6 @@ QStringList AWKeysAggregator::registerSource(const QString &source,
key = QString("hddgb%1").arg(index); key = QString("hddgb%1").arg(index);
m_map.insertMulti(source, key); m_map.insertMulti(source, key);
m_formater[key] = MemGBFormat; m_formater[key] = MemGBFormat;
// fill required by list
m_requiredByMap.insertMulti(source,
QString("hddtotmb%1").arg(index));
m_requiredByMap.insertMulti(source,
QString("hddtotgb%1").arg(index));
} }
} else if (source.startsWith(QString("hdd/temperature"))) { } else if (source.startsWith(QString("hdd/temperature"))) {
// hdd temperature // hdd temperature
@ -389,8 +371,6 @@ QStringList AWKeysAggregator::registerSource(const QString &source,
// gb // gb
m_map.insertMulti(source, QString("memgb")); m_map.insertMulti(source, QString("memgb"));
m_formater[QString("memgb")] = MemGBFormat; m_formater[QString("memgb")] = MemGBFormat;
// fill required by list
m_requiredByMap.insertMulti(source, QString("mem"));
} else if (source == QString("mem/physical/free")) { } else if (source == QString("mem/physical/free")) {
// free memory // free memory
// mb // mb
@ -399,10 +379,6 @@ QStringList AWKeysAggregator::registerSource(const QString &source,
// gb // gb
m_map.insertMulti(source, QString("memfreegb")); m_map.insertMulti(source, QString("memfreegb"));
m_formater[QString("memfreegb")] = MemGBFormat; m_formater[QString("memfreegb")] = MemGBFormat;
// fill required by list
m_requiredByMap.insertMulti(source, QString("memtotmb"));
m_requiredByMap.insertMulti(source, QString("memtotgb"));
m_requiredByMap.insertMulti(source, QString("mem"));
} else if (source == QString("mem/physical/used")) { } else if (source == QString("mem/physical/used")) {
// used memory // used memory
// mb // mb
@ -411,21 +387,10 @@ QStringList AWKeysAggregator::registerSource(const QString &source,
// gb // gb
m_map.insertMulti(source, QString("memusedgb")); m_map.insertMulti(source, QString("memusedgb"));
m_formater[QString("memusedgb")] = MemGBFormat; m_formater[QString("memusedgb")] = MemGBFormat;
// fill required by list
m_requiredByMap.insertMulti(source, QString("memtotmb"));
m_requiredByMap.insertMulti(source, QString("memtotgb"));
m_requiredByMap.insertMulti(source, QString("mem"));
} else if (source == QString("network/current/name")) { } else if (source == QString("network/current/name")) {
// network device // network device
m_map[source] = QString("netdev"); m_map[source] = QString("netdev");
m_formater[QString("netdev")] = NoFormat; m_formater[QString("netdev")] = NoFormat;
// fill required by list
m_requiredByMap.insertMulti(source, QString("down"));
m_requiredByMap.insertMulti(source, QString("downkb"));
m_requiredByMap.insertMulti(source, QString("downunits"));
m_requiredByMap.insertMulti(source, QString("up"));
m_requiredByMap.insertMulti(source, QString("upkb"));
m_requiredByMap.insertMulti(source, QString("upunits"));
} else if (source.contains(netRegExp)) { } else if (source.contains(netRegExp)) {
// network speed // network speed
QString type = source.contains(QString("receiver")) ? QString("down") QString type = source.contains(QString("receiver")) ? QString("down")
@ -446,13 +411,6 @@ QStringList AWKeysAggregator::registerSource(const QString &source,
m_map.insertMulti(source, key); m_map.insertMulti(source, key);
m_formater[key] = NetSmartUnits; m_formater[key] = NetSmartUnits;
} }
// fill required by list
m_requiredByMap.insertMulti(source, QString("%1").arg(type));
m_requiredByMap.insertMulti(source, QString("%1kb").arg(type));
m_requiredByMap.insertMulti(source, QString("%1units").arg(type));
m_requiredByMap.insertMulti(source, QString("%1").arg(type));
m_requiredByMap.insertMulti(source, QString("%1kb").arg(type));
m_requiredByMap.insertMulti(source, QString("%1units").arg(type));
} else if (source.startsWith(QString("upgrade"))) { } else if (source.startsWith(QString("upgrade"))) {
// package manager // package manager
QString key = source; QString key = source;
@ -491,10 +449,6 @@ QStringList AWKeysAggregator::registerSource(const QString &source,
// gb // gb
m_map.insertMulti(source, QString("swapfreegb")); m_map.insertMulti(source, QString("swapfreegb"));
m_formater[QString("swapfreegb")] = MemGBFormat; m_formater[QString("swapfreegb")] = MemGBFormat;
// fill required by list
m_requiredByMap.insertMulti(source, QString("swaptotmb"));
m_requiredByMap.insertMulti(source, QString("swaptotgb"));
m_requiredByMap.insertMulti(source, QString("swap"));
} else if (source == QString("mem/swap/used")) { } else if (source == QString("mem/swap/used")) {
// used swap // used swap
// mb // mb
@ -503,10 +457,6 @@ QStringList AWKeysAggregator::registerSource(const QString &source,
// gb // gb
m_map.insertMulti(source, QString("swapgb")); m_map.insertMulti(source, QString("swapgb"));
m_formater[QString("swapgb")] = MemGBFormat; m_formater[QString("swapgb")] = MemGBFormat;
// fill required by list
m_requiredByMap.insertMulti(source, QString("swaptotmb"));
m_requiredByMap.insertMulti(source, QString("swaptotgb"));
m_requiredByMap.insertMulti(source, QString("swap"));
} else if (source.startsWith(QString("lmsensors/"))) { } else if (source.startsWith(QString("lmsensors/"))) {
// temperature // temperature
int index = m_devices[QString("temp")].indexOf(source); int index = m_devices[QString("temp")].indexOf(source);
@ -561,6 +511,18 @@ QStringList AWKeysAggregator::registerSource(const QString &source,
m_formater[key] = Temperature; m_formater[key] = Temperature;
} }
// drop key from dictionary if no one user requested key required it
QStringList foundKeys = keysFromSource(source);
qCInfo(LOG_AW) << "Looking for keys" << foundKeys << "in" << keys;
// let required if key list is empty no one use it
bool required
= keys.isEmpty() || std::any_of(foundKeys.cbegin(), foundKeys.cend(),
[&keys](const QString &key) {
return keys.contains(key);
});
if (!required)
m_map.remove(source);
return keysFromSource(source); return keysFromSource(source);
} }
@ -572,17 +534,17 @@ float AWKeysAggregator::temperature(const float temp) const
float converted = temp; float converted = temp;
if (m_tempUnits == QString("Celsius")) { if (m_tempUnits == QString("Celsius")) {
} else if (m_tempUnits == QString("Fahrenheit")) { } else if (m_tempUnits == QString("Fahrenheit")) {
converted = temp * 9.0 / 5.0 + 32.0; converted = temp * 9.0f / 5.0f + 32.0f;
} else if (m_tempUnits == QString("Kelvin")) { } else if (m_tempUnits == QString("Kelvin")) {
converted = temp + 273.15; converted = temp + 273.15f;
} else if (m_tempUnits == QString("Reaumur")) { } else if (m_tempUnits == QString("Reaumur")) {
converted = temp * 0.8; converted = temp * 0.8f;
} else if (m_tempUnits == QString("cm^-1")) { } else if (m_tempUnits == QString("cm^-1")) {
converted = (temp + 273.15) * 0.695; converted = (temp + 273.15f) * 0.695f;
} else if (m_tempUnits == QString("kJ/mol")) { } else if (m_tempUnits == QString("kJ/mol")) {
converted = (temp + 273.15) * 8.31; converted = (temp + 273.15f) * 8.31f;
} else if (m_tempUnits == QString("kcal/mol")) { } else if (m_tempUnits == QString("kcal/mol")) {
converted = (temp + 273.15) * 1.98; converted = (temp + 273.15f) * 1.98f;
} else { } else {
qCWarning(LOG_AW) << "Invalid units" << m_tempUnits; qCWarning(LOG_AW) << "Invalid units" << m_tempUnits;
} }

View File

@ -67,7 +67,6 @@ public:
// get methods // get methods
QString formater(const QVariant &data, const QString &key) const; QString formater(const QVariant &data, const QString &key) const;
QStringList keysFromSource(const QString &source) const; QStringList keysFromSource(const QString &source) const;
QStringList requiredByKeysFromSource(const QString &source) const;
// set methods // set methods
void setAcOffline(const QString inactive); void setAcOffline(const QString inactive);
void setAcOnline(const QString active); void setAcOnline(const QString active);
@ -78,7 +77,8 @@ public:
void setTranslate(const bool translate); void setTranslate(const bool translate);
public slots: public slots:
QStringList registerSource(const QString &source, const QString &units); QStringList registerSource(const QString &source, const QString &units,
const QStringList &keys = QStringList());
private: private:
float temperature(const float temp) const; float temperature(const float temp) const;
@ -91,7 +91,6 @@ private:
QHash<QString, QStringList> m_devices; QHash<QString, QStringList> m_devices;
QHash<QString, FormaterType> m_formater; QHash<QString, FormaterType> m_formater;
QHash<QString, QString> m_map; QHash<QString, QString> m_map;
QHash<QString, QString> m_requiredByMap;
QString m_tempUnits; QString m_tempUnits;
bool m_translate = false; bool m_translate = false;
}; };

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n" "Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n"
"POT-Creation-Date: 2016-01-26 21:48+0300\n" "POT-Creation-Date: 2016-02-03 23:02+0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -56,6 +56,9 @@ msgstr ""
msgid "Check updates on startup" msgid "Check updates on startup"
msgstr "" msgstr ""
msgid "Optimize subscription"
msgstr ""
msgid "Widget height, px" msgid "Widget height, px"
msgstr "" msgstr ""
@ -351,15 +354,15 @@ msgstr ""
msgid "Weathers" msgid "Weathers"
msgstr "" msgstr ""
msgid "Functions"
msgstr ""
msgid "Add" msgid "Add"
msgstr "" msgstr ""
msgid "Show value" msgid "Show value"
msgstr "" msgstr ""
msgid "Add lambda"
msgstr ""
msgid "Edit bars" msgid "Edit bars"
msgstr "" msgstr ""
@ -411,24 +414,6 @@ msgstr ""
msgid "Select font" msgid "Select font"
msgstr "" msgstr ""
msgid "You are using the actual version %1"
msgstr ""
msgid "No new version found"
msgstr ""
msgid "Current version : %1"
msgstr ""
msgid "New version : %1"
msgstr ""
msgid "Click \"Ok\" to download"
msgstr ""
msgid "There are updates"
msgstr ""
msgid "AC online" msgid "AC online"
msgstr "" msgstr ""
@ -456,6 +441,27 @@ msgstr ""
msgid "KB/s" msgid "KB/s"
msgstr "" msgstr ""
msgid "Changelog of %1"
msgstr ""
msgid "You are using the actual version %1"
msgstr ""
msgid "No new version found"
msgstr ""
msgid "Current version : %1"
msgstr ""
msgid "New version : %1"
msgstr ""
msgid "Click \"Ok\" to download"
msgstr ""
msgid "There are updates"
msgstr ""
msgid "Copy" msgid "Copy"
msgstr "" msgstr ""

View File

@ -6,8 +6,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n" "Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n"
"POT-Creation-Date: 2016-01-26 21:48+0300\n" "POT-Creation-Date: 2016-02-03 23:02+0700\n"
"PO-Revision-Date: 2016-01-26 21:48+0300\n" "PO-Revision-Date: 2016-02-03 23:03+0700\n"
"Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n" "Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n"
"Language-Team: English <kde-russian@lists.kde.ru>\n" "Language-Team: English <kde-russian@lists.kde.ru>\n"
"Language: ru\n" "Language: ru\n"
@ -57,6 +57,9 @@ msgstr "Enable notifications"
msgid "Check updates on startup" msgid "Check updates on startup"
msgstr "Check updates on startup" msgstr "Check updates on startup"
msgid "Optimize subscription"
msgstr "Optimize subscription"
msgid "Widget height, px" msgid "Widget height, px"
msgstr "Widget height, px" msgstr "Widget height, px"
@ -356,15 +359,15 @@ msgstr "Upgrades"
msgid "Weathers" msgid "Weathers"
msgstr "Weathers" msgstr "Weathers"
msgid "Functions"
msgstr "Functions"
msgid "Add" msgid "Add"
msgstr "Add" msgstr "Add"
msgid "Show value" msgid "Show value"
msgstr "Show value" msgstr "Show value"
msgid "Add lambda"
msgstr "Add lambda"
msgid "Edit bars" msgid "Edit bars"
msgstr "Edit bars" msgstr "Edit bars"
@ -416,24 +419,6 @@ msgstr "Special thanks to %1"
msgid "Select font" msgid "Select font"
msgstr "Select font" msgstr "Select font"
msgid "You are using the actual version %1"
msgstr "You are using the actual version %1"
msgid "No new version found"
msgstr "No new version found"
msgid "Current version : %1"
msgstr "Current version : %1"
msgid "New version : %1"
msgstr "New version : %1"
msgid "Click \"Ok\" to download"
msgstr "Click \"Ok\" to download"
msgid "There are updates"
msgstr "There are updates"
msgid "AC online" msgid "AC online"
msgstr "AC online" msgstr "AC online"
@ -461,6 +446,27 @@ msgstr "MB/s"
msgid "KB/s" msgid "KB/s"
msgstr "KB/s" msgstr "KB/s"
msgid "Changelog of %1"
msgstr "Changelog of %1"
msgid "You are using the actual version %1"
msgstr "You are using the actual version %1"
msgid "No new version found"
msgstr "No new version found"
msgid "Current version : %1"
msgstr "Current version : %1"
msgid "New version : %1"
msgstr "New version : %1"
msgid "Click \"Ok\" to download"
msgstr "Click \"Ok\" to download"
msgid "There are updates"
msgstr "There are updates"
msgid "Copy" msgid "Copy"
msgstr "Copy" msgstr "Copy"
@ -612,6 +618,9 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "esalexeev@gmail.com" msgstr "esalexeev@gmail.com"
#~ msgid "Add lambda"
#~ msgstr "Add lambda"
#~ msgid "Free space on %1 less than 10%" #~ msgid "Free space on %1 less than 10%"
#~ msgstr "Free space on %1 less than 10%" #~ msgstr "Free space on %1 less than 10%"

View File

@ -9,7 +9,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Awesome widgets\n" "Project-Id-Version: Awesome widgets\n"
"Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n" "Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n"
"POT-Creation-Date: 2016-01-26 21:48+0300\n" "POT-Creation-Date: 2016-02-03 23:02+0700\n"
"PO-Revision-Date: 2015-09-26 22:07+0000\n" "PO-Revision-Date: 2015-09-26 22:07+0000\n"
"Last-Translator: Ernesto Avilés Vázquez <whippiii@gmail.com>\n" "Last-Translator: Ernesto Avilés Vázquez <whippiii@gmail.com>\n"
"Language-Team: Spanish (http://www.transifex.com/arcanis/awesome-widgets/" "Language-Team: Spanish (http://www.transifex.com/arcanis/awesome-widgets/"
@ -59,6 +59,9 @@ msgstr "Habilitar notificaciones"
msgid "Check updates on startup" msgid "Check updates on startup"
msgstr "Comprobar actualizaciones al inicio" msgstr "Comprobar actualizaciones al inicio"
msgid "Optimize subscription"
msgstr ""
msgid "Widget height, px" msgid "Widget height, px"
msgstr "Alto del widget, px" msgstr "Alto del widget, px"
@ -361,15 +364,15 @@ msgstr "Actualizaciones"
msgid "Weathers" msgid "Weathers"
msgstr "Tiempo" msgstr "Tiempo"
msgid "Functions"
msgstr ""
msgid "Add" msgid "Add"
msgstr "Añadir" msgstr "Añadir"
msgid "Show value" msgid "Show value"
msgstr "Mostrar valor" msgstr "Mostrar valor"
msgid "Add lambda"
msgstr "Añadir lambda"
msgid "Edit bars" msgid "Edit bars"
msgstr "Editar barras" msgstr "Editar barras"
@ -421,24 +424,6 @@ msgstr ""
msgid "Select font" msgid "Select font"
msgstr "Elegir tipo de letra" msgstr "Elegir tipo de letra"
msgid "You are using the actual version %1"
msgstr "Estás usando al versión actual %1"
msgid "No new version found"
msgstr "No se encontraron nuevas versiones"
msgid "Current version : %1"
msgstr "Versión actual: %1"
msgid "New version : %1"
msgstr "Nueva versión: %1"
msgid "Click \"Ok\" to download"
msgstr "Haz clic en «Ok» para descargar"
msgid "There are updates"
msgstr "Hay actualizaciones disponibles"
msgid "AC online" msgid "AC online"
msgstr "Alimentación conectada" msgstr "Alimentación conectada"
@ -466,6 +451,27 @@ msgstr "MB/s"
msgid "KB/s" msgid "KB/s"
msgstr "KB/s" msgstr "KB/s"
msgid "Changelog of %1"
msgstr ""
msgid "You are using the actual version %1"
msgstr "Estás usando al versión actual %1"
msgid "No new version found"
msgstr "No se encontraron nuevas versiones"
msgid "Current version : %1"
msgstr "Versión actual: %1"
msgid "New version : %1"
msgstr "Nueva versión: %1"
msgid "Click \"Ok\" to download"
msgstr "Haz clic en «Ok» para descargar"
msgid "There are updates"
msgstr "Hay actualizaciones disponibles"
msgid "Copy" msgid "Copy"
msgstr "Copiar" msgstr "Copiar"
@ -616,3 +622,6 @@ msgstr "Tu nombre"
msgctxt "EMAIL OF TRANSLATORS" msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "Tu correo electrónico" msgstr "Tu correo electrónico"
#~ msgid "Add lambda"
#~ msgstr "Añadir lambda"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n" "Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n"
"POT-Creation-Date: 2016-01-26 21:48+0300\n" "POT-Creation-Date: 2016-02-03 23:02+0700\n"
"PO-Revision-Date: 2015-07-31 22:16+0300\n" "PO-Revision-Date: 2015-07-31 22:16+0300\n"
"Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n" "Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n"
"Language-Team: French <kde-russian@lists.kde.ru>\n" "Language-Team: French <kde-russian@lists.kde.ru>\n"
@ -61,6 +61,9 @@ msgstr "Activer les notifications"
msgid "Check updates on startup" msgid "Check updates on startup"
msgstr "Vérifier les mises à jour" msgstr "Vérifier les mises à jour"
msgid "Optimize subscription"
msgstr ""
msgid "Widget height, px" msgid "Widget height, px"
msgstr "Paramètres du composant" msgstr "Paramètres du composant"
@ -371,15 +374,15 @@ msgstr ""
msgid "Weathers" msgid "Weathers"
msgstr "Modifier les tickers" msgstr "Modifier les tickers"
msgid "Functions"
msgstr ""
msgid "Add" msgid "Add"
msgstr "Ajouter" msgstr "Ajouter"
msgid "Show value" msgid "Show value"
msgstr "Afficher la valeur" msgstr "Afficher la valeur"
msgid "Add lambda"
msgstr ""
msgid "Edit bars" msgid "Edit bars"
msgstr "Modifier les barres" msgstr "Modifier les barres"
@ -431,27 +434,6 @@ msgstr ""
msgid "Select font" msgid "Select font"
msgstr "Sélectionner une couleur" msgstr "Sélectionner une couleur"
msgid "You are using the actual version %1"
msgstr ""
#, fuzzy
msgid "No new version found"
msgstr "Nouvelle version"
#, fuzzy
msgid "Current version : %1"
msgstr "Version actuelle"
#, fuzzy
msgid "New version : %1"
msgstr "Nouvelle version"
msgid "Click \"Ok\" to download"
msgstr "Cliquer sur \"Valider\" pour télécharger"
msgid "There are updates"
msgstr "Des mises à jour sont disponibles"
msgid "AC online" msgid "AC online"
msgstr "Alimentation branchée" msgstr "Alimentation branchée"
@ -479,6 +461,30 @@ msgstr ""
msgid "KB/s" msgid "KB/s"
msgstr "" msgstr ""
msgid "Changelog of %1"
msgstr ""
msgid "You are using the actual version %1"
msgstr ""
#, fuzzy
msgid "No new version found"
msgstr "Nouvelle version"
#, fuzzy
msgid "Current version : %1"
msgstr "Version actuelle"
#, fuzzy
msgid "New version : %1"
msgstr "Nouvelle version"
msgid "Click \"Ok\" to download"
msgstr "Cliquer sur \"Valider\" pour télécharger"
msgid "There are updates"
msgstr "Des mises à jour sont disponibles"
msgid "Copy" msgid "Copy"
msgstr "Copier" msgstr "Copier"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Awesome widgets\n" "Project-Id-Version: Awesome widgets\n"
"Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n" "Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n"
"POT-Creation-Date: 2016-01-26 21:48+0300\n" "POT-Creation-Date: 2016-02-03 23:02+0700\n"
"PO-Revision-Date: 2015-08-20 22:52+0300\n" "PO-Revision-Date: 2015-08-20 22:52+0300\n"
"Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n" "Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n"
"Language-Team: Dutch <kde-i18n-nl@kde.org>\n" "Language-Team: Dutch <kde-i18n-nl@kde.org>\n"
@ -61,6 +61,9 @@ msgstr ""
msgid "Check updates on startup" msgid "Check updates on startup"
msgstr "Controleren op updates" msgstr "Controleren op updates"
msgid "Optimize subscription"
msgstr ""
msgid "Widget height, px" msgid "Widget height, px"
msgstr "" msgstr ""
@ -373,15 +376,15 @@ msgstr ""
msgid "Weathers" msgid "Weathers"
msgstr "Balken bewerken" msgstr "Balken bewerken"
msgid "Functions"
msgstr ""
msgid "Add" msgid "Add"
msgstr "Toevoegen" msgstr "Toevoegen"
msgid "Show value" msgid "Show value"
msgstr "Waarde weergeven" msgstr "Waarde weergeven"
msgid "Add lambda"
msgstr ""
msgid "Edit bars" msgid "Edit bars"
msgstr "Balken bewerken" msgstr "Balken bewerken"
@ -436,25 +439,6 @@ msgstr ""
msgid "Select font" msgid "Select font"
msgstr "Lettertype selecteren" msgstr "Lettertype selecteren"
msgid "You are using the actual version %1"
msgstr ""
#, fuzzy
msgid "No new version found"
msgstr "Nieuwe versie: %1"
msgid "Current version : %1"
msgstr "Huidige versie: %1"
msgid "New version : %1"
msgstr "Nieuwe versie: %1"
msgid "Click \"Ok\" to download"
msgstr "Klik op \"OK\" om te downloaden"
msgid "There are updates"
msgstr "Er zijn updates"
msgid "AC online" msgid "AC online"
msgstr "AC online" msgstr "AC online"
@ -483,6 +467,28 @@ msgstr ""
msgid "KB/s" msgid "KB/s"
msgstr "" msgstr ""
msgid "Changelog of %1"
msgstr ""
msgid "You are using the actual version %1"
msgstr ""
#, fuzzy
msgid "No new version found"
msgstr "Nieuwe versie: %1"
msgid "Current version : %1"
msgstr "Huidige versie: %1"
msgid "New version : %1"
msgstr "Nieuwe versie: %1"
msgid "Click \"Ok\" to download"
msgstr "Klik op \"OK\" om te downloaden"
msgid "There are updates"
msgstr "Er zijn updates"
msgid "Copy" msgid "Copy"
msgstr "Kopiëren" msgstr "Kopiëren"

View File

@ -6,7 +6,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n" "Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n"
"POT-Creation-Date: 2016-01-26 21:48+0300\n" "POT-Creation-Date: 2016-02-03 23:02+0700\n"
"PO-Revision-Date: 2015-07-31 22:21+0300\n" "PO-Revision-Date: 2015-07-31 22:21+0300\n"
"Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n" "Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n"
"Language-Team: Russian <kde-russian@lists.kde.ru>\n" "Language-Team: Russian <kde-russian@lists.kde.ru>\n"
@ -60,6 +60,9 @@ msgstr "Ativar notificações"
msgid "Check updates on startup" msgid "Check updates on startup"
msgstr "Checar por atualizações" msgstr "Checar por atualizações"
msgid "Optimize subscription"
msgstr ""
msgid "Widget height, px" msgid "Widget height, px"
msgstr "Altura do widget, px" msgstr "Altura do widget, px"
@ -372,15 +375,15 @@ msgstr ""
msgid "Weathers" msgid "Weathers"
msgstr "Editar relógios" msgstr "Editar relógios"
msgid "Functions"
msgstr ""
msgid "Add" msgid "Add"
msgstr "Adicionar" msgstr "Adicionar"
msgid "Show value" msgid "Show value"
msgstr "Mostrar valor" msgstr "Mostrar valor"
msgid "Add lambda"
msgstr ""
msgid "Edit bars" msgid "Edit bars"
msgstr "Editar barras" msgstr "Editar barras"
@ -432,25 +435,6 @@ msgstr ""
msgid "Select font" msgid "Select font"
msgstr "Selecionar fonte" msgstr "Selecionar fonte"
msgid "You are using the actual version %1"
msgstr ""
#, fuzzy
msgid "No new version found"
msgstr "Nova versão: %1"
msgid "Current version : %1"
msgstr "Versão atual: %1"
msgid "New version : %1"
msgstr "Nova versão: %1"
msgid "Click \"Ok\" to download"
msgstr "Clique \"Ok\" para baixar"
msgid "There are updates"
msgstr "Há atualizações disponíveis"
msgid "AC online" msgid "AC online"
msgstr "Carregador conectado" msgstr "Carregador conectado"
@ -478,6 +462,28 @@ msgstr ""
msgid "KB/s" msgid "KB/s"
msgstr "" msgstr ""
msgid "Changelog of %1"
msgstr ""
msgid "You are using the actual version %1"
msgstr ""
#, fuzzy
msgid "No new version found"
msgstr "Nova versão: %1"
msgid "Current version : %1"
msgstr "Versão atual: %1"
msgid "New version : %1"
msgstr "Nova versão: %1"
msgid "Click \"Ok\" to download"
msgstr "Clique \"Ok\" para baixar"
msgid "There are updates"
msgstr "Há atualizações disponíveis"
msgid "Copy" msgid "Copy"
msgstr "Copiar" msgstr "Copiar"

View File

@ -6,8 +6,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n" "Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n"
"POT-Creation-Date: 2016-01-26 21:48+0300\n" "POT-Creation-Date: 2016-02-03 23:02+0700\n"
"PO-Revision-Date: 2016-01-26 21:49+0300\n" "PO-Revision-Date: 2016-02-03 23:04+0700\n"
"Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n" "Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n"
"Language-Team: Russian <kde-russian@lists.kde.ru>\n" "Language-Team: Russian <kde-russian@lists.kde.ru>\n"
"Language: ru\n" "Language: ru\n"
@ -57,6 +57,9 @@ msgstr "Включить уведомления "
msgid "Check updates on startup" msgid "Check updates on startup"
msgstr "Проверять обновления при запуске" msgstr "Проверять обновления при запуске"
msgid "Optimize subscription"
msgstr "Оптимизировать подписку"
msgid "Widget height, px" msgid "Widget height, px"
msgstr "Высота виджета, пиксели" msgstr "Высота виджета, пиксели"
@ -356,15 +359,15 @@ msgstr "Обновления"
msgid "Weathers" msgid "Weathers"
msgstr "Погода" msgstr "Погода"
msgid "Functions"
msgstr "Функции"
msgid "Add" msgid "Add"
msgstr "Добавить" msgstr "Добавить"
msgid "Show value" msgid "Show value"
msgstr "Показать значение" msgstr "Показать значение"
msgid "Add lambda"
msgstr "Добавить лямбду"
msgid "Edit bars" msgid "Edit bars"
msgstr "Редактировать бары" msgstr "Редактировать бары"
@ -411,29 +414,11 @@ msgid "This software uses: %1"
msgstr "Данное приложение использует: %1" msgstr "Данное приложение использует: %1"
msgid "Special thanks to %1" msgid "Special thanks to %1"
msgstr "Отдельно спасибо %1" msgstr "Отдельное спасибо %1"
msgid "Select font" msgid "Select font"
msgstr "Выберете шрифт" msgstr "Выберете шрифт"
msgid "You are using the actual version %1"
msgstr "Вы используете актуальную версию %1"
msgid "No new version found"
msgstr "Обновления не найдены"
msgid "Current version : %1"
msgstr "Текущая версия : %1"
msgid "New version : %1"
msgstr "Новая версия : %1"
msgid "Click \"Ok\" to download"
msgstr "Нажмите \"Ok\" для загрузки"
msgid "There are updates"
msgstr "Найдены обновления"
msgid "AC online" msgid "AC online"
msgstr "AC подключен" msgstr "AC подключен"
@ -461,6 +446,27 @@ msgstr "МБ/с"
msgid "KB/s" msgid "KB/s"
msgstr "КБ/с" msgstr "КБ/с"
msgid "Changelog of %1"
msgstr "Список изменений %1"
msgid "You are using the actual version %1"
msgstr "Вы используете актуальную версию %1"
msgid "No new version found"
msgstr "Обновления не найдены"
msgid "Current version : %1"
msgstr "Текущая версия : %1"
msgid "New version : %1"
msgstr "Новая версия : %1"
msgid "Click \"Ok\" to download"
msgstr "Нажмите \"Ok\" для загрузки"
msgid "There are updates"
msgstr "Найдены обновления"
msgid "Copy" msgid "Copy"
msgstr "Копировать" msgstr "Копировать"
@ -612,6 +618,9 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "esalexeev@gmail.com" msgstr "esalexeev@gmail.com"
#~ msgid "Add lambda"
#~ msgstr "Добавить лямбду"
#~ msgid "Free space on %1 less than 10%" #~ msgid "Free space on %1 less than 10%"
#~ msgstr "Свободное место на диске %1 меньше 10%" #~ msgstr "Свободное место на диске %1 меньше 10%"

View File

@ -6,7 +6,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n" "Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n"
"POT-Creation-Date: 2016-01-26 21:48+0300\n" "POT-Creation-Date: 2016-02-03 23:02+0700\n"
"PO-Revision-Date: 2015-09-27 12:37+0300\n" "PO-Revision-Date: 2015-09-27 12:37+0300\n"
"Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n" "Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n"
"Language-Team: Ukrainian <kde-russian@lists.kde.ru>\n" "Language-Team: Ukrainian <kde-russian@lists.kde.ru>\n"
@ -59,6 +59,9 @@ msgstr "Включити повідомлення"
msgid "Check updates on startup" msgid "Check updates on startup"
msgstr "Перевіряти оновлення при запуску" msgstr "Перевіряти оновлення при запуску"
msgid "Optimize subscription"
msgstr ""
msgid "Widget height, px" msgid "Widget height, px"
msgstr "Висота віджету, пікселі" msgstr "Висота віджету, пікселі"
@ -374,15 +377,15 @@ msgstr "Оновлення"
msgid "Weathers" msgid "Weathers"
msgstr "Погода" msgstr "Погода"
msgid "Functions"
msgstr ""
msgid "Add" msgid "Add"
msgstr "Додати" msgstr "Додати"
msgid "Show value" msgid "Show value"
msgstr "Показати значення" msgstr "Показати значення"
msgid "Add lambda"
msgstr "Додати лямбду"
msgid "Edit bars" msgid "Edit bars"
msgstr "Редагувати бари" msgstr "Редагувати бари"
@ -434,25 +437,6 @@ msgstr ""
msgid "Select font" msgid "Select font"
msgstr "Оберіть шрифт" msgstr "Оберіть шрифт"
msgid "You are using the actual version %1"
msgstr "Ви використовуєте актуальну версію %1"
#, fuzzy
msgid "No new version found"
msgstr "Оновлень не знайдено"
msgid "Current version : %1"
msgstr "Поточна версія : %1"
msgid "New version : %1"
msgstr "Нова версія : %1"
msgid "Click \"Ok\" to download"
msgstr "Натисніть \"Ok\" для завантаження"
msgid "There are updates"
msgstr "Знайдені оновлення"
msgid "AC online" msgid "AC online"
msgstr "AC підключений" msgstr "AC підключений"
@ -480,6 +464,28 @@ msgstr "МБ/с"
msgid "KB/s" msgid "KB/s"
msgstr "КБ/с" msgstr "КБ/с"
msgid "Changelog of %1"
msgstr ""
msgid "You are using the actual version %1"
msgstr "Ви використовуєте актуальну версію %1"
#, fuzzy
msgid "No new version found"
msgstr "Оновлень не знайдено"
msgid "Current version : %1"
msgstr "Поточна версія : %1"
msgid "New version : %1"
msgstr "Нова версія : %1"
msgid "Click \"Ok\" to download"
msgstr "Натисніть \"Ok\" для завантаження"
msgid "There are updates"
msgstr "Знайдені оновлення"
msgid "Copy" msgid "Copy"
msgstr "Копіювати" msgstr "Копіювати"
@ -640,6 +646,9 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "sarumyan@i.ua" msgstr "sarumyan@i.ua"
#~ msgid "Add lambda"
#~ msgstr "Додати лямбду"
#~ msgid "Free space on %1 less than 10%" #~ msgid "Free space on %1 less than 10%"
#~ msgstr "Вільний простір на диску %1 меньше ніж 10%" #~ msgstr "Вільний простір на диску %1 меньше ніж 10%"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n" "Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n"
"POT-Creation-Date: 2016-01-26 21:48+0300\n" "POT-Creation-Date: 2016-02-03 23:02+0700\n"
"PO-Revision-Date: 2015-07-31 22:24+0300\n" "PO-Revision-Date: 2015-07-31 22:24+0300\n"
"Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n" "Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n"
"Language-Team: Russian <kde-russian@lists.kde.ru>\n" "Language-Team: Russian <kde-russian@lists.kde.ru>\n"
@ -57,6 +57,9 @@ msgstr ""
msgid "Check updates on startup" msgid "Check updates on startup"
msgstr "" msgstr ""
msgid "Optimize subscription"
msgstr ""
msgid "Widget height, px" msgid "Widget height, px"
msgstr "" msgstr ""
@ -369,15 +372,15 @@ msgstr ""
msgid "Weathers" msgid "Weathers"
msgstr "可编辑的" msgstr "可编辑的"
msgid "Functions"
msgstr ""
msgid "Add" msgid "Add"
msgstr "添加" msgstr "添加"
msgid "Show value" msgid "Show value"
msgstr "" msgstr ""
msgid "Add lambda"
msgstr ""
#, fuzzy #, fuzzy
msgid "Edit bars" msgid "Edit bars"
msgstr "可编辑的" msgstr "可编辑的"
@ -430,24 +433,6 @@ msgstr ""
msgid "Select font" msgid "Select font"
msgstr "选择字体" msgstr "选择字体"
msgid "You are using the actual version %1"
msgstr ""
msgid "No new version found"
msgstr ""
msgid "Current version : %1"
msgstr ""
msgid "New version : %1"
msgstr ""
msgid "Click \"Ok\" to download"
msgstr ""
msgid "There are updates"
msgstr ""
#, fuzzy #, fuzzy
msgid "AC online" msgid "AC online"
msgstr "外接电源使用中标签" msgstr "外接电源使用中标签"
@ -477,6 +462,27 @@ msgstr ""
msgid "KB/s" msgid "KB/s"
msgstr "" msgstr ""
msgid "Changelog of %1"
msgstr ""
msgid "You are using the actual version %1"
msgstr ""
msgid "No new version found"
msgstr ""
msgid "Current version : %1"
msgstr ""
msgid "New version : %1"
msgstr ""
msgid "Click \"Ok\" to download"
msgstr ""
msgid "There are updates"
msgstr ""
msgid "Copy" msgid "Copy"
msgstr "" msgstr ""