diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 17ddd01..cecf861 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -285,59 +285,6 @@ void MainWindow::updateUI() updateNavigationButtons(buttonGroup->buttons().indexOf(buttonGroup->checkedButton())); } -void MainWindow::selfTestHandler(const QString &mode, const QString &name, const QString &minutes) { - QString output = Utils.initiateSelfTest(mode, name); - if (output.isEmpty()) { - QMessageBox::critical(this, tr("KDiskInfo Error"), tr("KDiskInfo needs root access in order to request a self-test!")); - } else { - QJsonDocument testDoc = QJsonDocument::fromJson(output.toUtf8()); - QJsonObject testObj = testDoc.object(); - QJsonObject smartctlObj = testObj.value("smartctl").toObject(); - QJsonObject deviceObj = testObj.value("device").toObject(); - QString name = deviceObj.value("name").toString(); - int exitStatus = smartctlObj.value("exit_status").toInt(); - - QJsonArray outputArray = smartctlObj["output"].toArray(); - static const QRegularExpression regex("\\((\\d+%)\\s*(\\w+)\\)"); - - QString percentage; - for (const QJsonValue &value : outputArray) { - QString line = value.toString(); - QRegularExpressionMatch match = regex.match(line); - if (match.hasMatch()) { - percentage = match.captured(0); - break; - } - } - percentage.replace("remaining", tr("remaining")); - percentage.replace("completed", tr("completed")); - - if (exitStatus == 4) { - QMessageBox msgBox; - msgBox.setWindowTitle(tr("Test Already Running")); - msgBox.setText(tr("A self-test is already being performed") + " " + percentage + "\n" + tr("You can press the Ok button in order to abort the test that is currently running")); - msgBox.setIcon(QMessageBox::Warning); - - msgBox.addButton(QMessageBox::Cancel); - QPushButton *abortButton = msgBox.addButton(QMessageBox::Ok); - - msgBox.exec(); - - if (msgBox.clickedButton() == abortButton) { - Utils.cancelSelfTest(name); - } - } else if (exitStatus == 0) { - QString infoMessage = tr("A self-test has been requested successfully"); - if (minutes != "0") { - infoMessage = infoMessage + "\n" + tr("It will be completed after") + " " + minutes + " " + tr("minutes"); - } - QMessageBox::information(this, tr("Test Requested"), infoMessage); - } else { - QMessageBox::critical(this, tr("KDiskInfo Error"), tr("Error: Something went wrong")); - } - } -} - void MainWindow::populateWindow(const QJsonObject &localObj, const QString &health, const QVector>& nvmeLogOrdered) { QJsonArray attributes = localObj["ata_smart_attributes"].toObject()["table"].toArray(); @@ -717,7 +664,7 @@ void MainWindow::populateWindow(const QJsonObject &localObj, const QString &heal } connect(action, &QAction::triggered, this, [this, mode, name, minutes]() { - selfTestHandler(mode, name, minutes); + Utils.selfTestHandler(mode, name, minutes); }); i++; @@ -746,13 +693,13 @@ void MainWindow::populateWindow(const QJsonObject &localObj, const QString &heal QAction *actionShort = new QAction(tr("Short"), this); selfTestMenu->addAction(actionShort); connect(actionShort, &QAction::triggered, this, [this, mode = "short", name, minutes = "0"]() { - selfTestHandler(mode, name, minutes); + Utils.selfTestHandler(mode, name, minutes); }); QAction *actionLong = new QAction(tr("Extended"), this); selfTestMenu->addAction(actionLong); connect(actionLong , &QAction::triggered, this, [this, mode = "long", name, minutes = "0"]() { - selfTestHandler(mode, name, minutes); + Utils.selfTestHandler(mode, name, minutes); }); if (nvmeSelfTestsTable.isEmpty()) { diff --git a/src/mainwindow.h b/src/mainwindow.h index 1ed78c7..be9c725 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -2,21 +2,6 @@ #define MAINWINDOW_H #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include #include "statusdot.h" @@ -95,7 +80,6 @@ private: void onPrevButtonClicked(); void updateNavigationButtons(int currentIndex); void updateUI(); - void selfTestHandler(const QString &mode, const QString &name, const QString &minutes); void populateWindow(const QJsonObject &tempObj, const QString &health, const QVector>& nvmeLogOrdered = QVector>()); void addNvmeLogTable(const QVector>& nvmeLogOrdered); void addSmartAttributesTable(const QJsonArray &attributes); diff --git a/src/utils.cpp b/src/utils.cpp index d416847..7ee7b49 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -145,6 +145,59 @@ void utils::cancelSelfTest(const QString &deviceNode) } } +void utils::selfTestHandler(const QString &mode, const QString &name, const QString &minutes) { + QString output = initiateSelfTest(mode, name); + if (output.isEmpty()) { + QMessageBox::critical(nullptr, QObject::tr("KDiskInfo Error"), QObject::tr("KDiskInfo needs root access in order to request a self-test!")); + } else { + QJsonDocument testDoc = QJsonDocument::fromJson(output.toUtf8()); + QJsonObject testObj = testDoc.object(); + QJsonObject smartctlObj = testObj.value("smartctl").toObject(); + QJsonObject deviceObj = testObj.value("device").toObject(); + QString name = deviceObj.value("name").toString(); + int exitStatus = smartctlObj.value("exit_status").toInt(); + + QJsonArray outputArray = smartctlObj["output"].toArray(); + static const QRegularExpression regex("\\((\\d+%)\\s*(\\w+)\\)"); + + QString percentage; + for (const QJsonValue &value : outputArray) { + QString line = value.toString(); + QRegularExpressionMatch match = regex.match(line); + if (match.hasMatch()) { + percentage = match.captured(0); + break; + } + } + percentage.replace("remaining", QObject::tr("remaining")); + percentage.replace("completed", QObject::tr("completed")); + + if (exitStatus == 4) { + QMessageBox msgBox; + msgBox.setWindowTitle(QObject::tr("Test Already Running")); + msgBox.setText(QObject::tr("A self-test is already being performed") + " " + percentage + "\n" + QObject::tr("You can press the Ok button in order to abort the test that is currently running")); + msgBox.setIcon(QMessageBox::Warning); + + msgBox.addButton(QMessageBox::Cancel); + QPushButton *abortButton = msgBox.addButton(QMessageBox::Ok); + + msgBox.exec(); + + if (msgBox.clickedButton() == abortButton) { + cancelSelfTest(name); + } + } else if (exitStatus == 0) { + QString infoMessage = QObject::tr("A self-test has been requested successfully"); + if (minutes != "0") { + infoMessage = infoMessage + "\n" + QObject::tr("It will be completed after") + " " + minutes + " " + QObject::tr("minutes"); + } + QMessageBox::information(nullptr, QObject::tr("Test Requested"), infoMessage); + } else { + QMessageBox::critical(nullptr, QObject::tr("KDiskInfo Error"), QObject::tr("Error: Something went wrong")); + } + } +} + QString utils::toTitleCase(const QString& sentence) { QString result; bool capitalizeNext = true; diff --git a/src/utils.h b/src/utils.h index e56dc68..1318b59 100644 --- a/src/utils.h +++ b/src/utils.h @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -34,6 +35,7 @@ public: QPair scanDevices(bool initializing); QString initiateSelfTest(const QString &testType, const QString &deviceNode); void cancelSelfTest(const QString &deviceNode); + void selfTestHandler(const QString &mode, const QString &name, const QString &minutes); QString toTitleCase(const QString& sentence); }; diff --git a/translations/kdiskinfo_el_GR.qm b/translations/kdiskinfo_el_GR.qm index 9b05c91..500003e 100644 Binary files a/translations/kdiskinfo_el_GR.qm and b/translations/kdiskinfo_el_GR.qm differ diff --git a/translations/kdiskinfo_el_GR.ts b/translations/kdiskinfo_el_GR.ts index 369c0d7..9dcc2c4 100644 --- a/translations/kdiskinfo_el_GR.ts +++ b/translations/kdiskinfo_el_GR.ts @@ -55,7 +55,7 @@ - + Type Τύπος @@ -81,7 +81,7 @@ - + Power On Hours Ώρες Λειτουργίας @@ -168,19 +168,19 @@ - + Good Καλή - + Caution Προσοχή - + Bad Κακή @@ -190,71 +190,40 @@ Άγνωστη - - + + Attribute Name Ιδιότητα - - + + Raw Values Τιμή - + Current Τρέχουσα - + Worst Χειρότερη - + Threshold Όριο - - - - KDiskInfo Error - Σφάλμα KDiskInfo - - - - KDiskInfo needs root access in order to request a self-test! - Το KDiskInfo χρειάζεται δικαιώματα υπερχρήστη για να εκτελέσει την αυτοδιάγνωση! - - - - Test Already Running - Μία αυτοδιάγνωση είναι ήδη σε εκτέλεση - - - - A self-test has been requested successfully - Η αυτοδιάγνωση ξεκίνησε επιτυχώς - - Test Requested - Η αυτοδιάγνωση ξεκίνησε - - - - Error: Something went wrong - Σφάλμα: Κάτι πήγε στραβά - - - Status Κατάσταση - + Self Test Log &Καταγραφολόγιο Αυτοδιάγνωσης @@ -264,155 +233,125 @@ &Εκκίνηση Αυτοδιάγνωσης - - A self-test is already being performed - Μία αυτοδιάγνωση εκτελείτε αυτή τη στιγμή - - - - You can press the Ok button in order to abort the test that is currently running - Μπορείτε να πατήσετε το κουμπί Εντάξει για να ακυρώσετε την τρέχουσα αυτοδιάγνωση - - - - minutes - λεπτά - - - + Min.) Λεπ.) - - + + Short Σύντομο - - remaining - απομένει - - - - completed - ολοκληρώθηκε - - - - It will be completed after - Θα τελειώσει μετά από - - - + count μονάδες - + hours ώρες - + Conveyance Μεταφορά - - + + Extended Εμπεριστατωμένο - - + + ID - + Available spare capacity has fallen below the threshold Η υγεία του δίσκου έχει πέσει κάτω από το όριο - + Temperature error (Overheat or Overcool) Σφάλμα θερμοκρασίας (Υπερθέρμανση ή Υπερψύξη) - + NVM subsystem reliability has been degraded Η αξιοπιστία του NVMe έχει μειωθεί - + Media has been placed in Read Only Mode Το μέσο έχει τεθεί αποκλειστικά σε λειτουργία ανάγνωσης - + Volatile memory backup device has Failed Η δημιουργία αρχείου επαναφοράς της μη διατηρήσιμης μνήμης απέτυχε - + Persistent memory region has become Read-Only Η διατηρήσιμη μνήμη έχει μεταβεί αποκλειστικά σε λειτουργία ανάγνωσης - + Critical Warning Σημαντική Προειδοποίηση - + Empty JSON Κενό JSON - + The JSON is empty Αυτό το JSON είναι κενό - + Save JSON Αποθήκευση JSON - + JSON (*.json);;All Files (*) JSON (*.json);;;Όλα τα αρχεία (*) - + Unable to open file for writing Δεν είναι δυνατό το άνοιγμα αυτού του αρχείου για εγγραφή - + An ATA and NVMe S.M.A.R.T. data viewer for Linux Ένας αναγνώστης S.M.A.R.T. για τα Linux - + Licensed under the GNU G.P.L. Version 3 Διατίθεται υπό την άδεια GNU G.P.L. Έκδοση 3 - + Version Έκδοση - + Made by Samantas5855 Δημιουργήθηκε από τον Samantas5855 - + About KDiskInfo Σχετικά με το KDiskInfo @@ -424,6 +363,8 @@ + + KDiskInfo Error Σφάλμα KDiskInfo @@ -444,6 +385,7 @@ + Test Requested Η αυτοδιάγνωση ξεκίνησε @@ -454,8 +396,54 @@ + Error: Something went wrong Σφάλμα: Κάτι πήγε στραβά + + + KDiskInfo needs root access in order to request a self-test! + Το KDiskInfo χρειάζεται δικαιώματα υπερχρήστη για να εκτελέσει την αυτοδιάγνωση! + + + + remaining + απομένει + + + + completed + ολοκληρώθηκε + + + + Test Already Running + Μία αυτοδιάγνωση είναι ήδη σε εκτέλεση + + + + A self-test is already being performed + Μία αυτοδιάγνωση εκτελείτε αυτή τη στιγμή + + + + You can press the Ok button in order to abort the test that is currently running + Μπορείτε να πατήσετε το κουμπί Εντάξει για να ακυρώσετε την τρέχουσα αυτοδιάγνωση + + + + A self-test has been requested successfully + Η αυτοδιάγνωση ξεκίνησε επιτυχώς + + + + It will be completed after + Θα τελειώσει μετά από + + + + minutes + λεπτά +