Move more functions to utils

This commit is contained in:
spiros
2024-06-19 02:00:52 +03:00
parent 85dd68e088
commit a7c7dda87f
6 changed files with 200 additions and 190 deletions

View File

@@ -286,7 +286,7 @@ void MainWindow::updateUI()
} }
void MainWindow::selfTestHandler(const QString &mode, const QString &name, const QString &minutes) { void MainWindow::selfTestHandler(const QString &mode, const QString &name, const QString &minutes) {
QString output = initiateSelfTest(mode, name); QString output = Utils.initiateSelfTest(mode, name);
if (output.isEmpty()) { if (output.isEmpty()) {
QMessageBox::critical(this, tr("KDiskInfo Error"), tr("KDiskInfo needs root access in order to request a self-test!")); QMessageBox::critical(this, tr("KDiskInfo Error"), tr("KDiskInfo needs root access in order to request a self-test!"));
} else { } else {
@@ -324,7 +324,7 @@ void MainWindow::selfTestHandler(const QString &mode, const QString &name, const
msgBox.exec(); msgBox.exec();
if (msgBox.clickedButton() == abortButton) { if (msgBox.clickedButton() == abortButton) {
cancelSelfTest(name); Utils.cancelSelfTest(name);
} }
} else if (exitStatus == 0) { } else if (exitStatus == 0) {
QString infoMessage = tr("A self-test has been requested successfully"); QString infoMessage = tr("A self-test has been requested successfully");
@@ -786,7 +786,7 @@ void MainWindow::addNvmeLogTable(const QVector<QPair<QString, int>>& nvmeLogOrde
QString key = pair.first; QString key = pair.first;
QString name = key.replace("_", " "); QString name = key.replace("_", " ");
name = toTitleCase(name); name = Utils.toTitleCase(name);
int rawInt = pair.second; int rawInt = pair.second;
QString raw = QString::number(rawInt); QString raw = QString::number(rawInt);
@@ -963,29 +963,6 @@ void MainWindow::addSmartAttributesTable(const QJsonArray &attributes)
tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
} }
QString MainWindow::toTitleCase(const QString& sentence) {
QString result;
bool capitalizeNext = true;
for (const QChar& c : sentence) {
if (c.isLetter()) {
if (capitalizeNext) {
result += c.toUpper();
capitalizeNext = false;
} else {
result += c.toLower();
}
} else {
result += c;
if (c == ' ') {
capitalizeNext = true;
}
}
}
return result;
}
void MainWindow::on_actionQuit_triggered() void MainWindow::on_actionQuit_triggered()
{ {
qApp->quit(); qApp->quit();
@@ -1020,13 +997,11 @@ void MainWindow::on_actionSave_JSON_triggered()
} }
} }
void MainWindow::on_actionGitHub_triggered() void MainWindow::on_actionGitHub_triggered()
{ {
QDesktopServices::openUrl(QUrl("https://github.com/edisionnano/KDiskInfo")); QDesktopServices::openUrl(QUrl("https://github.com/edisionnano/KDiskInfo"));
} }
void MainWindow::on_actionRescan_Refresh_triggered() void MainWindow::on_actionRescan_Refresh_triggered()
{ {
QPair<QStringList, QJsonArray> values = Utils.scanDevices(initializing); QPair<QStringList, QJsonArray> values = Utils.scanDevices(initializing);
@@ -1038,7 +1013,6 @@ void MainWindow::on_actionRescan_Refresh_triggered()
} }
} }
void MainWindow::on_actionAbout_triggered() void MainWindow::on_actionAbout_triggered()
{ {
QString message = tr("An ATA and NVMe S.M.A.R.T. data viewer for Linux") + "\n"; QString message = tr("An ATA and NVMe S.M.A.R.T. data viewer for Linux") + "\n";
@@ -1058,7 +1032,6 @@ void MainWindow::on_actionIgnore_C4_Reallocation_Event_Count_toggled(bool enable
} }
} }
void MainWindow::on_actionHEX_toggled(bool enabled) void MainWindow::on_actionHEX_toggled(bool enabled)
{ {
settings.setValue("HEX", ui->actionHEX->isChecked()); settings.setValue("HEX", ui->actionHEX->isChecked());
@@ -1085,39 +1058,12 @@ void MainWindow::on_actionCyclic_Navigation_toggled(bool cyclicNavigation)
updateNavigationButtons(currentIndex); updateNavigationButtons(currentIndex);
} }
QString MainWindow::initiateSelfTest(const QString &testType, const QString &deviceNode) void MainWindow::on_actionUse_GB_instead_of_TB_toggled(bool gigabytes)
{ {
QProcess process; settings.setValue("UseGB", ui->actionUse_GB_instead_of_TB->isChecked());
QString command = Utils.getSmartctlPath(initializing); if (!initializing) {
QStringList arguments; Utils.clearButtonGroup(buttonGroup, horizontalLayout, buttonStretch, menuDisk);
arguments << command << "--json=o" << "-t" << testType << deviceNode; updateUI();
process.start("pkexec", arguments);
process.waitForFinished(-1);
if (process.isOpen()) {
return process.readAllStandardOutput();
} else {
return QString();
}
}
void MainWindow::cancelSelfTest(const QString &deviceNode)
{
QProcess process;
QString command = Utils.getSmartctlPath(initializing);
QStringList arguments;
arguments << command << "-X" << deviceNode;
process.start("pkexec", arguments);
process.waitForFinished(-1);
if (process.exitCode() == 127) {
QMessageBox::critical(this, tr("KDiskInfo Error"), tr("KDiskInfo needs root access in order to abort a self-test!"));
} else if (process.exitCode() == QProcess::NormalExit) {
QMessageBox::information(this, tr("Test Requested"), tr("The self-test has been aborted"));
} else {
QMessageBox::critical(this, tr("KDiskInfo Error"), tr("Error: Something went wrong"));
} }
} }
@@ -1129,12 +1075,3 @@ void MainWindow::mousePressEvent(QMouseEvent *event)
onPrevButtonClicked(); onPrevButtonClicked();
} }
} }
void MainWindow::on_actionUse_GB_instead_of_TB_toggled(bool gigabytes)
{
settings.setValue("UseGB", ui->actionUse_GB_instead_of_TB->isChecked());
if (!initializing) {
Utils.clearButtonGroup(buttonGroup, horizontalLayout, buttonStretch, menuDisk);
updateUI();
}
}

View File

@@ -99,10 +99,6 @@ private:
void populateWindow(const QJsonObject &tempObj, const QString &health, const QVector<QPair<QString, int>>& nvmeLogOrdered = QVector<QPair<QString, int>>()); void populateWindow(const QJsonObject &tempObj, const QString &health, const QVector<QPair<QString, int>>& nvmeLogOrdered = QVector<QPair<QString, int>>());
void addNvmeLogTable(const QVector<QPair<QString, int>>& nvmeLogOrdered); void addNvmeLogTable(const QVector<QPair<QString, int>>& nvmeLogOrdered);
void addSmartAttributesTable(const QJsonArray &attributes); void addSmartAttributesTable(const QJsonArray &attributes);
QString getSmartctlOutput(const QStringList &arguments, bool root);
QString toTitleCase(const QString& sentence);
QString initiateSelfTest(const QString &testType, const QString &deviceNode);
void cancelSelfTest(const QString &deviceNode);
void mousePressEvent(QMouseEvent*); void mousePressEvent(QMouseEvent*);
}; };
#endif #endif

View File

@@ -108,3 +108,62 @@ QPair<QStringList, QJsonArray> utils::scanDevices(bool initializing)
return QPair<QStringList, QJsonArray>(QStringList(), QJsonArray()); return QPair<QStringList, QJsonArray>(QStringList(), QJsonArray());
} }
} }
QString utils::initiateSelfTest(const QString &testType, const QString &deviceNode)
{
QProcess process;
QString command = getSmartctlPath(false);
QStringList arguments;
arguments << command << "--json=o" << "-t" << testType << deviceNode;
process.start("pkexec", arguments);
process.waitForFinished(-1);
if (process.isOpen()) {
return process.readAllStandardOutput();
} else {
return QString();
}
}
void utils::cancelSelfTest(const QString &deviceNode)
{
QProcess process;
QString command = getSmartctlPath(false);
QStringList arguments;
arguments << command << "-X" << deviceNode;
process.start("pkexec", arguments);
process.waitForFinished(-1);
if (process.exitCode() == 127) {
QMessageBox::critical(nullptr, QObject::tr("KDiskInfo Error"), QObject::tr("KDiskInfo needs root access in order to abort a self-test!"));
} else if (process.exitCode() == QProcess::NormalExit) {
QMessageBox::information(nullptr, QObject::tr("Test Requested"), QObject::tr("The self-test has been aborted"));
} 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;
for (const QChar& c : sentence) {
if (c.isLetter()) {
if (capitalizeNext) {
result += c.toUpper();
capitalizeNext = false;
} else {
result += c.toLower();
}
} else {
result += c;
if (c == ' ') {
capitalizeNext = true;
}
}
}
return result;
}

View File

@@ -32,6 +32,9 @@ public:
QString getSmartctlPath(bool initializing); QString getSmartctlPath(bool initializing);
QString getSmartctlOutput(const QStringList &arguments, bool root, bool initializing); QString getSmartctlOutput(const QStringList &arguments, bool root, bool initializing);
QPair<QStringList, QJsonArray> scanDevices(bool initializing); QPair<QStringList, QJsonArray> scanDevices(bool initializing);
QString initiateSelfTest(const QString &testType, const QString &deviceNode);
void cancelSelfTest(const QString &deviceNode);
QString toTitleCase(const QString& sentence);
}; };
#endif // UTILS_H #endif // UTILS_H

Binary file not shown.

View File

@@ -14,258 +14,247 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="117"/> <location filename="../src/mainwindow.ui" line="120"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Health Status&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Health Status&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Κατάστ. Υγειας&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation> <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Κατάστ. Υγειας&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="127"/> <location filename="../src/mainwindow.ui" line="136"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:12pt; font-weight:700; color:#000000;&quot;&gt;Good&lt;/span&gt;&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:12pt; font-weight:700; color:#000000;&quot;&gt;100 %&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:12pt; font-weight:700; color:#000000;&quot;&gt;Good&lt;/span&gt;&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:12pt; font-weight:700; color:#000000;&quot;&gt;100 %&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="134"/> <location filename="../src/mainwindow.ui" line="159"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Temperature&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Temperature&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Θερμοκρασία&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation> <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Θερμοκρασία&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="150"/> <location filename="../src/mainwindow.ui" line="175"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:12pt; font-weight:700; color:#000000;&quot;&gt;23° C&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source> <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:12pt; font-weight:700; color:#000000;&quot;&gt;23° C&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="179"/> <location filename="../src/mainwindow.ui" line="220"/>
<source>Firmware</source> <source>Firmware</source>
<translation>Έκδοση Λογισμικού</translation> <translation>Έκδοση Λογισμικού</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="193"/> <location filename="../src/mainwindow.ui" line="234"/>
<source>Serial Number</source> <source>Serial Number</source>
<translation>Σειριακός Αριθμός</translation> <translation>Σειριακός Αριθμός</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="207"/> <location filename="../src/mainwindow.ui" line="248"/>
<source>Protocol</source> <source>Protocol</source>
<translation>Πρωτόκολλο</translation> <translation>Πρωτόκολλο</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="221"/> <location filename="../src/mainwindow.ui" line="262"/>
<source>Device Node</source> <source>Device Node</source>
<translation>Διαδρομή</translation> <translation>Διαδρομή</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="241"/> <location filename="../src/mainwindow.ui" line="282"/>
<location filename="../src/mainwindow.cpp" line="440"/> <location filename="../src/mainwindow.cpp" line="387"/>
<source>Type</source> <source>Type</source>
<translation>Τύπος</translation> <translation>Τύπος</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="263"/> <location filename="../src/mainwindow.ui" line="304"/>
<source>Total Host Reads</source> <source>Total Host Reads</source>
<translation>Συνολικές Αναγνώσεις</translation> <translation>Συνολικές Αναγνώσεις</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="277"/> <location filename="../src/mainwindow.ui" line="318"/>
<source>Total Host Writes</source> <source>Total Host Writes</source>
<translation>Συνολικές Εγγραφές</translation> <translation>Συνολικές Εγγραφές</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="291"/> <location filename="../src/mainwindow.ui" line="332"/>
<source>Rotation Rate</source> <source>Rotation Rate</source>
<translation>Ρυθμός Περιστροφής</translation> <translation>Ρυθμός Περιστροφής</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="305"/> <location filename="../src/mainwindow.ui" line="346"/>
<source>Power On Count</source> <source>Power On Count</source>
<translation>Μετρητής Λειτουργίας</translation> <translation>Μετρητής Λειτουργίας</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="319"/> <location filename="../src/mainwindow.ui" line="360"/>
<location filename="../src/mainwindow.cpp" line="440"/> <location filename="../src/mainwindow.cpp" line="387"/>
<source>Power On Hours</source> <source>Power On Hours</source>
<translation>Ώρες Λειτουργίας</translation> <translation>Ώρες Λειτουργίας</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="351"/> <location filename="../src/mainwindow.ui" line="392"/>
<source>File</source> <source>File</source>
<translation>&amp;Αρχείο</translation> <translation>&amp;Αρχείο</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="358"/> <location filename="../src/mainwindow.ui" line="399"/>
<source>Settings</source> <source>Settings</source>
<translation>&amp;Ρυθμίσεις</translation> <translation>&amp;Ρυθμίσεις</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="405"/> <location filename="../src/mainwindow.ui" line="446"/>
<source>&amp;Quit</source> <source>&amp;Quit</source>
<translation>Έ&amp;ξοδος</translation> <translation>Έ&amp;ξοδος</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="416"/> <location filename="../src/mainwindow.ui" line="457"/>
<source>&amp;Refresh Devices</source> <source>&amp;Refresh Devices</source>
<translation>&amp;Ανανέωση Συσκευών</translation> <translation>&amp;Ανανέωση Συσκευών</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="451"/> <location filename="../src/mainwindow.ui" line="492"/>
<source>&amp;Convert Raw values to HEX</source> <source>&amp;Convert Raw values to HEX</source>
<translation>&amp;Μετατροπή των τιμών σε δεκαεξαδικές</translation> <translation>&amp;Μετατροπή των τιμών σε δεκαεξαδικές</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="464"/> <location filename="../src/mainwindow.ui" line="505"/>
<source>Self Test</source> <source>Self Test</source>
<translation>Αυτοδιάγνωση</translation> <translation>Αυτοδιάγνωση</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="472"/> <location filename="../src/mainwindow.ui" line="513"/>
<source>Cyclic &amp;Navigation</source> <source>Cyclic &amp;Navigation</source>
<translation>&amp;Κυκλική Πλοήγηση</translation> <translation>&amp;Κυκλική Πλοήγηση</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="480"/> <location filename="../src/mainwindow.ui" line="521"/>
<source>Use &amp;GB instead of TB</source> <source>Use &amp;GB instead of TB</source>
<translation>Χρήση &amp;GB αντί για TB</translation> <translation>Χρήση &amp;GB αντί για TB</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="368"/> <location filename="../src/mainwindow.ui" line="409"/>
<source>&amp;Help</source> <source>&amp;Help</source>
<translation>&amp;Βοήθεια</translation> <translation>&amp;Βοήθεια</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="376"/> <location filename="../src/mainwindow.ui" line="417"/>
<source>De&amp;vice</source> <source>De&amp;vice</source>
<translation>&amp;Συσκευή</translation> <translation>&amp;Συσκευή</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="383"/> <location filename="../src/mainwindow.ui" line="424"/>
<location filename="../src/mainwindow.cpp" line="283"/> <location filename="../src/mainwindow.cpp" line="230"/>
<source>Disk</source> <source>Disk</source>
<translation>&amp;Δίσκος</translation> <translation>&amp;Δίσκος</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="397"/> <location filename="../src/mainwindow.ui" line="438"/>
<source>&amp;Save JSON</source> <source>&amp;Save JSON</source>
<translation>Αποθήκευση &amp;JSON</translation> <translation>Αποθήκευση &amp;JSON</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="424"/> <location filename="../src/mainwindow.ui" line="465"/>
<source>&amp;GitHub</source> <source>&amp;GitHub</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="432"/> <location filename="../src/mainwindow.ui" line="473"/>
<source>&amp;About</source> <source>&amp;About</source>
<translation>&amp;Σχετικά</translation> <translation>&amp;Σχετικά</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="443"/> <location filename="../src/mainwindow.ui" line="484"/>
<source>&amp;Ignore C4 (Reallocated Event Count)</source> <source>&amp;Ignore C4 (Reallocated Event Count)</source>
<translation>&amp;Αγνόησε το C4 (Reallocated Event Count)</translation> <translation>&amp;Αγνόησε το C4 (Reallocated Event Count)</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="459"/> <location filename="../src/mainwindow.ui" line="500"/>
<source>&amp;Use Fahrenheit</source> <source>&amp;Use Fahrenheit</source>
<translation>Χρήση &amp;Fahrenheit</translation> <translation>Χρήση &amp;Fahrenheit</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="269"/> <location filename="../src/mainwindow.cpp" line="216"/>
<location filename="../src/mainwindow.cpp" line="709"/> <location filename="../src/mainwindow.cpp" line="671"/>
<source>Good</source> <source>Good</source>
<translation>Καλή</translation> <translation>Καλή</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="272"/> <location filename="../src/mainwindow.cpp" line="219"/>
<location filename="../src/mainwindow.cpp" line="707"/> <location filename="../src/mainwindow.cpp" line="669"/>
<source>Caution</source> <source>Caution</source>
<translation>Προσοχή</translation> <translation>Προσοχή</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="275"/> <location filename="../src/mainwindow.cpp" line="222"/>
<location filename="../src/mainwindow.cpp" line="705"/> <location filename="../src/mainwindow.cpp" line="667"/>
<source>Bad</source> <source>Bad</source>
<translation>Κακή</translation> <translation>Κακή</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="278"/> <location filename="../src/mainwindow.cpp" line="225"/>
<source>Unknown</source> <source>Unknown</source>
<translation>Άγνωστη</translation> <translation>Άγνωστη</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="813"/> <location filename="../src/mainwindow.cpp" line="775"/>
<location filename="../src/mainwindow.cpp" line="917"/> <location filename="../src/mainwindow.cpp" line="871"/>
<source>Attribute Name</source> <source>Attribute Name</source>
<translation>Ιδιότητα</translation> <translation>Ιδιότητα</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="813"/> <location filename="../src/mainwindow.cpp" line="775"/>
<location filename="../src/mainwindow.cpp" line="917"/> <location filename="../src/mainwindow.cpp" line="871"/>
<source>Raw Values</source> <source>Raw Values</source>
<translation>Τιμή</translation> <translation>Τιμή</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="917"/> <location filename="../src/mainwindow.cpp" line="871"/>
<source>Current</source> <source>Current</source>
<translation>Τρέχουσα</translation> <translation>Τρέχουσα</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="917"/> <location filename="../src/mainwindow.cpp" line="871"/>
<source>Worst</source> <source>Worst</source>
<translation>Χειρότερη</translation> <translation>Χειρότερη</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="917"/> <location filename="../src/mainwindow.cpp" line="871"/>
<source>Threshold</source> <source>Threshold</source>
<translation>Όριο</translation> <translation>Όριο</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="151"/> <location filename="../src/mainwindow.cpp" line="291"/>
<location filename="../src/mainwindow.cpp" line="344"/> <location filename="../src/mainwindow.cpp" line="336"/>
<location filename="../src/mainwindow.cpp" line="389"/>
<location filename="../src/mainwindow.cpp" line="1029"/>
<location filename="../src/mainwindow.cpp" line="1203"/>
<location filename="../src/mainwindow.cpp" line="1207"/>
<source>KDiskInfo Error</source> <source>KDiskInfo Error</source>
<translation>Σφάλμα KDiskInfo</translation> <translation>Σφάλμα KDiskInfo</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="151"/> <location filename="../src/mainwindow.cpp" line="291"/>
<source>smartctl was not found, please install it!</source>
<translation>Το smartctl δε βρέθηκε, παρακαλείσθε να το εγκαταστήσετε!</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="344"/>
<source>KDiskInfo needs root access in order to request a self-test!</source> <source>KDiskInfo needs root access in order to request a self-test!</source>
<translation>Το KDiskInfo χρειάζεται δικαιώματα υπερχρήστη για να εκτελέσει την αυτοδιάγνωση!</translation> <translation>Το KDiskInfo χρειάζεται δικαιώματα υπερχρήστη για να εκτελέσει την αυτοδιάγνωση!</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="370"/> <location filename="../src/mainwindow.cpp" line="317"/>
<source>Test Already Running</source> <source>Test Already Running</source>
<translation>Μία αυτοδιάγνωση είναι ήδη σε εκτέλεση</translation> <translation>Μία αυτοδιάγνωση είναι ήδη σε εκτέλεση</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="383"/> <location filename="../src/mainwindow.cpp" line="330"/>
<source>A self-test has been requested successfully</source> <source>A self-test has been requested successfully</source>
<translation>Η αυτοδιάγνωση ξεκίνησε επιτυχώς</translation> <translation>Η αυτοδιάγνωση ξεκίνησε επιτυχώς</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="387"/> <location filename="../src/mainwindow.cpp" line="334"/>
<location filename="../src/mainwindow.cpp" line="1205"/>
<source>Test Requested</source> <source>Test Requested</source>
<translation>Η αυτοδιάγνωση ξεκίνησε</translation> <translation>Η αυτοδιάγνωση ξεκίνησε</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="389"/> <location filename="../src/mainwindow.cpp" line="336"/>
<location filename="../src/mainwindow.cpp" line="1207"/>
<source>Error: Something went wrong</source> <source>Error: Something went wrong</source>
<translation>Σφάλμα: Κάτι πήγε στραβά</translation> <translation>Σφάλμα: Κάτι πήγε στραβά</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="440"/> <location filename="../src/mainwindow.cpp" line="387"/>
<source>Status</source> <source>Status</source>
<translation>Κατάσταση</translation> <translation>Κατάσταση</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="59"/> <location filename="../src/mainwindow.cpp" line="59"/>
<location filename="../src/mainwindow.cpp" line="470"/> <location filename="../src/mainwindow.cpp" line="432"/>
<source>Self Test Log</source> <source>Self Test Log</source>
<translation>&amp;Καταγραφολόγιο Αυτοδιάγνωσης</translation> <translation>&amp;Καταγραφολόγιο Αυτοδιάγνωσης</translation>
</message> </message>
@@ -275,172 +264,198 @@
<translation>&amp;Εκκίνηση Αυτοδιάγνωσης</translation> <translation>&amp;Εκκίνηση Αυτοδιάγνωσης</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="371"/> <location filename="../src/mainwindow.cpp" line="318"/>
<source>A self-test is already being performed</source> <source>A self-test is already being performed</source>
<translation>Μία αυτοδιάγνωση εκτελείτε αυτή τη στιγμή</translation> <translation>Μία αυτοδιάγνωση εκτελείτε αυτή τη στιγμή</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="371"/> <location filename="../src/mainwindow.cpp" line="318"/>
<source>You can press the Ok button in order to abort the test that is currently running</source> <source>You can press the Ok button in order to abort the test that is currently running</source>
<translation>Μπορείτε να πατήσετε το κουμπί Εντάξει για να ακυρώσετε την τρέχουσα αυτοδιάγνωση</translation> <translation>Μπορείτε να πατήσετε το κουμπί Εντάξει για να ακυρώσετε την τρέχουσα αυτοδιάγνωση</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="385"/> <location filename="../src/mainwindow.cpp" line="332"/>
<source>minutes</source> <source>minutes</source>
<translation>λεπτά</translation> <translation>λεπτά</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="746"/> <location filename="../src/mainwindow.cpp" line="708"/>
<source>Min.)</source> <source>Min.)</source>
<translation>Λεπ.)</translation> <translation>Λεπ.)</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="737"/> <location filename="../src/mainwindow.cpp" line="699"/>
<location filename="../src/mainwindow.cpp" line="784"/> <location filename="../src/mainwindow.cpp" line="746"/>
<source>Short</source> <source>Short</source>
<translation>Σύντομο</translation> <translation>Σύντομο</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="365"/> <location filename="../src/mainwindow.cpp" line="312"/>
<source>remaining</source> <source>remaining</source>
<translation>απομένει</translation> <translation>απομένει</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="366"/> <location filename="../src/mainwindow.cpp" line="313"/>
<source>completed</source> <source>completed</source>
<translation>ολοκληρώθηκε</translation> <translation>ολοκληρώθηκε</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="385"/> <location filename="../src/mainwindow.cpp" line="332"/>
<source>It will be completed after</source> <source>It will be completed after</source>
<translation>Θα τελειώσει μετά από</translation> <translation>Θα τελειώσει μετά από</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="505"/> <location filename="../src/mainwindow.cpp" line="467"/>
<source>count</source> <source>count</source>
<translation>μονάδες</translation> <translation>μονάδες</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="516"/> <location filename="../src/mainwindow.cpp" line="478"/>
<source>hours</source> <source>hours</source>
<translation>ώρες</translation> <translation>ώρες</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="739"/> <location filename="../src/mainwindow.cpp" line="701"/>
<source>Conveyance</source> <source>Conveyance</source>
<translation>Μεταφορά</translation> <translation>Μεταφορά</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="741"/> <location filename="../src/mainwindow.cpp" line="703"/>
<location filename="../src/mainwindow.cpp" line="790"/> <location filename="../src/mainwindow.cpp" line="752"/>
<source>Extended</source> <source>Extended</source>
<translation>Εμπεριστατωμένο</translation> <translation>Εμπεριστατωμένο</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="813"/> <location filename="../src/mainwindow.cpp" line="775"/>
<location filename="../src/mainwindow.cpp" line="917"/> <location filename="../src/mainwindow.cpp" line="871"/>
<source>ID</source> <source>ID</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="848"/> <location filename="../src/mainwindow.cpp" line="802"/>
<source>Available spare capacity has fallen below the threshold</source> <source>Available spare capacity has fallen below the threshold</source>
<translation>Η υγεία του δίσκου έχει πέσει κάτω από το όριο</translation> <translation>Η υγεία του δίσκου έχει πέσει κάτω από το όριο</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="850"/> <location filename="../src/mainwindow.cpp" line="804"/>
<source>Temperature error (Overheat or Overcool)</source> <source>Temperature error (Overheat or Overcool)</source>
<translation>Σφάλμα θερμοκρασίας (Υπερθέρμανση ή Υπερψύξη)</translation> <translation>Σφάλμα θερμοκρασίας (Υπερθέρμανση ή Υπερψύξη)</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="852"/> <location filename="../src/mainwindow.cpp" line="806"/>
<source>NVM subsystem reliability has been degraded</source> <source>NVM subsystem reliability has been degraded</source>
<translation>Η αξιοπιστία του NVMe έχει μειωθεί</translation> <translation>Η αξιοπιστία του NVMe έχει μειωθεί</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="854"/> <location filename="../src/mainwindow.cpp" line="808"/>
<source>Media has been placed in Read Only Mode</source> <source>Media has been placed in Read Only Mode</source>
<translation>Το μέσο έχει τεθεί αποκλειστικά σε λειτουργία ανάγνωσης</translation> <translation>Το μέσο έχει τεθεί αποκλειστικά σε λειτουργία ανάγνωσης</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="856"/> <location filename="../src/mainwindow.cpp" line="810"/>
<source>Volatile memory backup device has Failed</source> <source>Volatile memory backup device has Failed</source>
<translation>Η δημιουργία αρχείου επαναφοράς της μη διατηρήσιμης μνήμης απέτυχε</translation> <translation>Η δημιουργία αρχείου επαναφοράς της μη διατηρήσιμης μνήμης απέτυχε</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="858"/> <location filename="../src/mainwindow.cpp" line="812"/>
<source>Persistent memory region has become Read-Only</source> <source>Persistent memory region has become Read-Only</source>
<translation>Η διατηρήσιμη μνήμη έχει μεταβεί αποκλειστικά σε λειτουργία ανάγνωσης</translation> <translation>Η διατηρήσιμη μνήμη έχει μεταβεί αποκλειστικά σε λειτουργία ανάγνωσης</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="910"/> <location filename="../src/mainwindow.cpp" line="864"/>
<source>Critical Warning</source> <source>Critical Warning</source>
<translation>Σημαντική Προειδοποίηση</translation> <translation>Σημαντική Προειδοποίηση</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="1029"/> <location filename="../src/mainwindow.cpp" line="974"/>
<source>KDiskInfo needs root access in order to read S.M.A.R.T. data!</source>
<translation>Το KDiskInfo χρειάζεται δικαιώματα υπερχρήστη για να προσπελάσει τα δεδομένα S.M.A.R.T.!</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1090"/>
<source>Empty JSON</source> <source>Empty JSON</source>
<translation>Κενό JSON</translation> <translation>Κενό JSON</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="1091"/> <location filename="../src/mainwindow.cpp" line="975"/>
<source>The JSON is empty</source> <source>The JSON is empty</source>
<translation>Αυτό το JSON είναι κενό</translation> <translation>Αυτό το JSON είναι κενό</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="1096"/> <location filename="../src/mainwindow.cpp" line="980"/>
<source>Save JSON</source> <source>Save JSON</source>
<translation>Αποθήκευση JSON</translation> <translation>Αποθήκευση JSON</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="1097"/> <location filename="../src/mainwindow.cpp" line="981"/>
<source>JSON (*.json);;All Files (*)</source> <source>JSON (*.json);;All Files (*)</source>
<translation>JSON (*.json);;;Όλα τα αρχεία (*)</translation> <translation>JSON (*.json);;;Όλα τα αρχεία (*)</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="1103"/> <location filename="../src/mainwindow.cpp" line="987"/>
<source>Unable to open file for writing</source> <source>Unable to open file for writing</source>
<translation>Δεν είναι δυνατό το άνοιγμα αυτού του αρχείου για εγγραφή</translation> <translation>Δεν είναι δυνατό το άνοιγμα αυτού του αρχείου για εγγραφή</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="1131"/> <location filename="../src/mainwindow.cpp" line="1018"/>
<source>An ATA and NVMe S.M.A.R.T. data viewer for Linux</source> <source>An ATA and NVMe S.M.A.R.T. data viewer for Linux</source>
<translation>Ένας αναγνώστης S.M.A.R.T. για τα Linux</translation> <translation>Ένας αναγνώστης S.M.A.R.T. για τα Linux</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="1132"/> <location filename="../src/mainwindow.cpp" line="1019"/>
<source>Licensed under the GNU G.P.L. Version 3</source> <source>Licensed under the GNU G.P.L. Version 3</source>
<translation>Διατίθεται υπό την άδεια GNU G.P.L. Έκδοση 3</translation> <translation>Διατίθεται υπό την άδεια GNU G.P.L. Έκδοση 3</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="1134"/> <location filename="../src/mainwindow.cpp" line="1021"/>
<source>Version</source> <source>Version</source>
<translation>Έκδοση</translation> <translation>Έκδοση</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="1203"/> <location filename="../src/mainwindow.cpp" line="1020"/>
<source>KDiskInfo needs root access in order to abort a self-test!</source>
<translation>Το KDiskInfo χρειάζεται δικαιώματα υπερχρήστη για να ακυρώσει μία αυτοδιάγνωση!</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1205"/>
<source>The self-test has been aborted</source>
<translation>Η τρέχουσα αυτοδιάγνωση ακυρώθηκε</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1133"/>
<source>Made by Samantas5855</source> <source>Made by Samantas5855</source>
<translation>Δημιουργήθηκε από τον Samantas5855</translation> <translation>Δημιουργήθηκε από τον Samantas5855</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="1136"/> <location filename="../src/mainwindow.cpp" line="1023"/>
<source>About KDiskInfo</source> <source>About KDiskInfo</source>
<translation>Σχετικά με το KDiskInfo</translation> <translation>Σχετικά με το KDiskInfo</translation>
</message> </message>
</context> </context>
<context>
<name>QObject</name>
<message>
<location filename="../src/utils.cpp" line="49"/>
<location filename="../src/utils.cpp" line="82"/>
<location filename="../src/utils.cpp" line="140"/>
<location filename="../src/utils.cpp" line="144"/>
<source>KDiskInfo Error</source>
<translation type="unfinished">Σφάλμα KDiskInfo</translation>
</message>
<message>
<location filename="../src/utils.cpp" line="49"/>
<source>KDiskInfo needs root access in order to read S.M.A.R.T. data!</source>
<translation type="unfinished">Το KDiskInfo χρειάζεται δικαιώματα υπερχρήστη για να προσπελάσει τα δεδομένα S.M.A.R.T.!</translation>
</message>
<message>
<location filename="../src/utils.cpp" line="82"/>
<source>smartctl was not found, please install it!</source>
<translation type="unfinished">Το smartctl δε βρέθηκε, παρακαλείσθε να το εγκαταστήσετε!</translation>
</message>
<message>
<location filename="../src/utils.cpp" line="140"/>
<source>KDiskInfo needs root access in order to abort a self-test!</source>
<translation type="unfinished">Το KDiskInfo χρειάζεται δικαιώματα υπερχρήστη για να ακυρώσει μία αυτοδιάγνωση!</translation>
</message>
<message>
<location filename="../src/utils.cpp" line="142"/>
<source>Test Requested</source>
<translation type="unfinished">Η αυτοδιάγνωση ξεκίνησε</translation>
</message>
<message>
<location filename="../src/utils.cpp" line="142"/>
<source>The self-test has been aborted</source>
<translation type="unfinished">Η τρέχουσα αυτοδιάγνωση ακυρώθηκε</translation>
</message>
<message>
<location filename="../src/utils.cpp" line="144"/>
<source>Error: Something went wrong</source>
<translation type="unfinished">Σφάλμα: Κάτι πήγε στραβά</translation>
</message>
</context>
</TS> </TS>