Răsfoiți Sursa

Reworked sensor index handling

Malte Veerman 6 ani în urmă
părinte
comite
66a6532499
5 a modificat fișierele cu 49 adăugiri și 96 ștergeri
  1. 2 2
      import/src/guibase.cpp
  2. 17 68
      import/src/hwmon.cpp
  3. 8 9
      import/src/hwmon.h
  4. 21 16
      import/src/loader.cpp
  5. 1 1
      import/src/loader.h

+ 2 - 2
import/src/guibase.cpp

@@ -63,8 +63,8 @@ GUIBase::GUIBase(QObject *parent) : QObject(parent),
     const auto hwmons = m_loader->hwmons();
     for (const auto &hwmon : hwmons)
     {
-        m_pwmFanModel->addPwmFans(hwmon->pwmFans());
-        m_tempModel->addTemps(hwmon->temps());
+        m_pwmFanModel->addPwmFans(hwmon->pwmFans().values());
+        m_tempModel->addTemps(hwmon->temps().values());
     }
 }
 

+ 17 - 68
import/src/hwmon.cpp

@@ -99,54 +99,29 @@ void Hwmon::initialize()
         {
             if (QFile::exists(m_path + "/pwm" + QString::number(index)))
             {
-                PwmFan *newPwmFan = Q_NULLPTR;
-
-                for (const auto &pwmFan : qAsConst(m_pwmFans))
-                {
-                    if (pwmFan->index() == index)
-                    {
-                        newPwmFan = pwmFan;
-                        break;
-                    }
-                }
-
-                if (!newPwmFan)
+                if (!m_pwmFans.contains(index))
                 {
-                    newPwmFan = new PwmFan(index, this);
+                    auto newPwmFan = new PwmFan(index, this);
                     connect(this, &Hwmon::sensorsUpdateNeeded, newPwmFan, &PwmFan::update);
 
                     if (m_parent)
                         connect(newPwmFan, &PwmFan::testStatusChanged, m_parent, &Loader::handleTestStatusChanged);
 
-                    m_pwmFans << newPwmFan;
+                    m_pwmFans.insert(index, newPwmFan);
                     emit pwmFansChanged();
-                }
 
-                if (!m_fans.contains(newPwmFan))
-                {
-                    m_fans << newPwmFan;
+                    m_fans.insert(index, newPwmFan);
                     emit fansChanged();
                 }
             }
             else
             {
-                Fan *newFan = Q_NULLPTR;
-
-                for (const auto &fan : qAsConst(m_fans))
+                if (!m_fans.contains(index))
                 {
-                    if (fan->index() == index)
-                    {
-                        newFan = fan;
-                        newFan->toDefault();
-                        break;
-                    }
-                }
-
-                if (!newFan)
-                {
-                    newFan = new Fan(index, this);
+                    auto newFan = new Fan(index, this);
                     connect(this, &Hwmon::sensorsUpdateNeeded, newFan, &Fan::update);
-                    m_fans << newFan;
+
+                    m_fans.insert(index, newFan);
                     emit fansChanged();
                 }
             }
@@ -154,23 +129,12 @@ void Hwmon::initialize()
 
         if (entry.contains(QStringLiteral("temp")))
         {
-            Temp *newTemp = Q_NULLPTR;
-
-            for (const auto &temp : qAsConst(m_temps))
+            if (!m_temps.contains(index))
             {
-                if (temp->index() == index)
-                {
-                    newTemp = temp;
-                    newTemp->toDefault();
-                    break;
-                }
-            }
-
-            if (!newTemp)
-            {
-                newTemp = new Temp(index, this);
+                auto newTemp = new Temp(index, this);
                 connect(this, &Hwmon::sensorsUpdateNeeded, newTemp, &Temp::update);
-                m_temps << newTemp;
+
+                m_temps.insert(index, newTemp);
                 emit tempsChanged();
             }
         }
@@ -181,7 +145,7 @@ QList<QObject *> Hwmon::fansAsObjects() const
 {
     QList<QObject *> list;
 
-    for (const auto &fan : qAsConst(m_fans))
+    for (const auto &fan : m_fans.values())
         list << fan;
 
     return list;
@@ -191,7 +155,7 @@ QList<QObject *> Hwmon::pwmFansAsObjects() const
 {
     QList<QObject *> list;
 
-    for (const auto &pwmFan : qAsConst(m_pwmFans))
+    for (const auto &pwmFan : m_pwmFans.values())
         list << pwmFan;
 
     return list;
@@ -201,7 +165,7 @@ QList<QObject *> Hwmon::tempsAsObjects() const
 {
     QList<QObject *> list;
 
-    for (const auto &temp : qAsConst(m_temps))
+    for (const auto &temp : m_temps.values())
         list << temp;
 
     return list;
@@ -209,31 +173,16 @@ QList<QObject *> Hwmon::tempsAsObjects() const
 
 void Hwmon::testFans()
 {
-    for (const auto &pwmFan : qAsConst(m_pwmFans))
+    for (const auto &pwmFan : m_pwmFans.values())
         pwmFan->test();
 }
 
 void Hwmon::abortTestingFans()
 {
-    for (const auto &pwmFan : qAsConst(m_pwmFans))
+    for (const auto &pwmFan : m_pwmFans.values())
         pwmFan->abortTest();
 }
 
-Fan* Hwmon::fan(int i) const
-{
-    return m_fans.value(i, Q_NULLPTR);
-}
-
-PwmFan* Hwmon::pwmFan(int i) const
-{
-    return m_pwmFans.value(i, Q_NULLPTR);
-}
-
-Temp* Hwmon::temp(int i) const
-{
-    return m_temps.value(i, Q_NULLPTR);
-}
-
 bool Hwmon::testing() const
 {
     auto testing = false;

+ 8 - 9
import/src/hwmon.h

@@ -22,6 +22,7 @@
 #define HWMON_H
 
 #include <QtCore/QObject>
+#include <QtCore/QHash>
 
 
 namespace Fancontrol
@@ -51,17 +52,15 @@ public:
     QString name() const { return m_name; }
     QString path() const { return m_path; }
     int index() const { return m_index; }
-    QList<Fan *> fans() const { return m_fans; }
-    QList<PwmFan *> pwmFans() const { return m_pwmFans; }
-    QList<Temp *> temps() const { return m_temps; }
+    QHash<uint, Fan *> fans() const { return m_fans; }
+    QHash<uint, PwmFan *> pwmFans() const { return m_pwmFans; }
+    QHash<uint, Temp *> temps() const { return m_temps; }
     QList<QObject *> fansAsObjects() const;
     QList<QObject *> pwmFansAsObjects() const;
     QList<QObject *> tempsAsObjects() const;
     Q_INVOKABLE void testFans();
     Q_INVOKABLE void abortTestingFans();
-    Fan * fan(int i) const;
-    PwmFan * pwmFan(int i) const;
-    Temp * temp(int i) const;
+
     bool isValid() const { return m_valid; }
     bool testing() const;
     void toDefault() const;
@@ -83,9 +82,9 @@ protected:
     int m_index;
     Loader *const m_parent;
     bool m_valid;
-    QList<Fan *> m_fans;
-    QList<PwmFan *> m_pwmFans;
-    QList<Temp *> m_temps;
+    QHash<uint, Fan *> m_fans;
+    QHash<uint, PwmFan *> m_pwmFans;
+    QHash<uint, Temp *> m_temps;
 
 private:
 

+ 21 - 16
import/src/loader.cpp

@@ -68,21 +68,24 @@ Loader::Loader(GUIBase *parent) : QObject(parent),
     connect(this, &Loader::configFileChanged, this, &Loader::needsSaveChanged);
 }
 
-void Loader::parseHwmons()
+void Loader::parseHwmons(QString path)
 {
-    const auto hwmonDir = QDir(QStringLiteral(HWMON_PATH));
+    if (path.isEmpty())
+        path = QStringLiteral(HWMON_PATH);
+
+    const auto hwmonDir = QDir(path);
     QStringList list;
     if (hwmonDir.isReadable())
         list = hwmonDir.entryList(QDir::AllEntries | QDir::NoDotAndDotDot);
 
     else if (hwmonDir.exists())
     {
-        emit error(i18n("File is not readable: \'%1\'", QStringLiteral(HWMON_PATH)), true);
+        emit error(i18n("Hwmon path is not readable: \'%1\'", path), true);
         return;
     }
     else
     {
-        emit error(i18n("File does not exist: \'%1\'", QStringLiteral(HWMON_PATH)), true);
+        emit error(i18n("Hwmon path does not exist: \'%1\'", path), true);
         return;
     }
 
@@ -90,7 +93,7 @@ void Loader::parseHwmons()
     while (!list.isEmpty())
         dereferencedList << QFile::symLinkTarget(hwmonDir.absoluteFilePath(list.takeFirst()));
 
-    for (const auto &hwmon : qAsConst(m_hwmons))
+    for (auto &hwmon : m_hwmons)
     {
         if (!dereferencedList.contains(hwmon->path()))
         {
@@ -128,6 +131,8 @@ void Loader::parseHwmons()
                 delete newHwmon;
         }
     }
+
+    m_watcher->addPath(path);
 }
 
 PwmFan * Loader::pwmFan(int hwmonIndex, int pwmFanIndex) const
@@ -137,7 +142,7 @@ PwmFan * Loader::pwmFan(int hwmonIndex, int pwmFanIndex) const
     if (!hwmon)
         return Q_NULLPTR;
 
-    return hwmon->pwmFan(pwmFanIndex);
+    return hwmon->pwmFans().value(pwmFanIndex);
 }
 
 Temp * Loader::temp(int hwmonIndex, int tempIndex) const
@@ -147,7 +152,7 @@ Temp * Loader::temp(int hwmonIndex, int tempIndex) const
     if (!hwmon)
         return Q_NULLPTR;
 
-    return hwmon->temp(tempIndex);
+    return hwmon->temps().value(tempIndex);
 }
 
 Fan * Loader::fan(int hwmonIndex, int fanIndex) const
@@ -157,19 +162,19 @@ Fan * Loader::fan(int hwmonIndex, int fanIndex) const
     if (!hwmon)
         return Q_NULLPTR;
 
-    return hwmon->fan(fanIndex);
+    return hwmon->fans().value(fanIndex);
 }
 
 QPair<int, int> Loader::getEntryNumbers(const QString &entry)
 {
     if (entry.isEmpty())
-        return QPair<int, int>(-1, -1);
+        return QPair<int, int>(0, 0);
 
     auto list = entry.split('/', QString::SkipEmptyParts);
     if (list.size() != 2)
     {
         emit error(i18n("Invalid entry: \'%1\'", entry));
-        return QPair<int, int>(-1, -1);
+        return QPair<int, int>(0, 0);
     }
     auto &hwmon = list[0];
     auto &sensor = list[1];
@@ -177,12 +182,12 @@ QPair<int, int> Loader::getEntryNumbers(const QString &entry)
     if (!hwmon.startsWith(QStringLiteral("hwmon")))
     {
         emit error(i18n("Invalid entry: \'%1\'", entry));
-        return QPair<int, int>(-1, -1);
+        return QPair<int, int>(0, 0);
     }
     if (!sensor.contains(QRegExp("^(pwm|fan|temp)\\d+")))
     {
         emit error(i18n("Invalid entry: \'%1\'", entry));
-        return QPair<int, int>(-1, -1);
+        return QPair<int, int>(0, 0);
     }
 
     auto success = false;
@@ -195,16 +200,16 @@ QPair<int, int> Loader::getEntryNumbers(const QString &entry)
     if (!success)
     {
         emit error(i18n("Invalid entry: \'%1\'", entry));
-        return QPair<int, int>(-1, -1);
+        return QPair<int, int>(0, 0);
     }
     const auto sensorResult = sensor.toInt(&success);
     if (!success)
     {
         emit error(i18n("Invalid entry: \'%1\'", entry));
-        return QPair<int, int>(-1, -1);
+        return QPair<int, int>(0, 0);
     }
 
-    return QPair<int, int>(hwmonResult, sensorResult - 1);
+    return QPair<int, int>(hwmonResult, sensorResult);
 }
 
 bool Loader::parseConfig(QString config)
@@ -320,7 +325,7 @@ bool Loader::parseConfig(QString config)
                     }
                     else if (hwmonPointer->name().split('.').first() != name)
                     {
-                        emit error(i18n("Wrong name for hwmon %1! Should be \"%2\"", index, hwmonPointer->name().split('.').first()), true);
+                        emit error(i18n("Wrong name for hwmon %1! Should be \'%2\'", index, hwmonPointer->name().split('.').first()), true);
                         success = false;
                     }
                 }

+ 1 - 1
import/src/loader.h

@@ -54,7 +54,7 @@ public:
 
     explicit Loader(GUIBase *parent = Q_NULLPTR);
 
-    Q_INVOKABLE void parseHwmons();
+    Q_INVOKABLE void parseHwmons(QString path = QString());
     Q_INVOKABLE bool load(const QUrl & = QUrl());
     Q_INVOKABLE bool save(const QUrl & = QUrl());
     Q_INVOKABLE void reset();