File indexing completed on 2024-05-12 05:37:20

0001 /*
0002     SPDX-FileCopyrightText: 2007 Petri Damsten <damu@iki.fi>
0003     SPDX-FileCopyrightText: 2007 Christopher Blauvelt <cblauvelt@gmail.com>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-only
0006 */
0007 
0008 #include "hddtemp.h"
0009 
0010 #include <QTcpSocket>
0011 
0012 #include <QTimerEvent>
0013 
0014 #include <QDebug>
0015 
0016 HddTemp::HddTemp(QObject *parent)
0017     : QObject(parent)
0018 {
0019     updateData();
0020 }
0021 
0022 HddTemp::~HddTemp()
0023 {
0024 }
0025 
0026 QStringList HddTemp::sources()
0027 {
0028     updateData();
0029     return m_data.keys();
0030 }
0031 
0032 void HddTemp::timerEvent(QTimerEvent *event)
0033 {
0034     killTimer(event->timerId());
0035     m_cacheValid = false;
0036 }
0037 
0038 bool HddTemp::updateData()
0039 {
0040     if (m_cacheValid) {
0041         return true;
0042     }
0043 
0044     if (m_failCount > 4) {
0045         return false;
0046     }
0047 
0048     QTcpSocket socket;
0049     QString data;
0050 
0051     socket.connectToHost(QStringLiteral("localhost"), 7634);
0052     if (socket.waitForConnected(500)) {
0053         while (data.length() < 1024) {
0054             if (!socket.waitForReadyRead(500)) {
0055                 if (data.length() > 0) {
0056                     break;
0057                 } else {
0058                     // qDebug() << socket.errorString();
0059                     return false;
0060                 }
0061             }
0062             data += QString(socket.readAll());
0063         }
0064         socket.disconnectFromHost();
0065         // on success retry fail count
0066         m_failCount = 0;
0067     } else {
0068         m_failCount++;
0069         // qDebug() << socket.errorString();
0070         return false;
0071     }
0072     const QStringList list = data.split('|');
0073     int i = 1;
0074     m_data.clear();
0075     while (i + 4 < list.size()) {
0076         m_data[list[i]].append(list[i + 2]);
0077         m_data[list[i]].append(list[i + 3]);
0078         i += 5;
0079     }
0080     m_cacheValid = true;
0081     startTimer(0);
0082 
0083     return true;
0084 }
0085 
0086 QVariant HddTemp::data(const QString source, const DataType type) const
0087 {
0088     return m_data[source][type];
0089 }