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) {
QString output = initiateSelfTest(mode, name);
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 {
@@ -324,7 +324,7 @@ void MainWindow::selfTestHandler(const QString &mode, const QString &name, const
msgBox.exec();
if (msgBox.clickedButton() == abortButton) {
cancelSelfTest(name);
Utils.cancelSelfTest(name);
}
} else if (exitStatus == 0) {
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 name = key.replace("_", " ");
name = toTitleCase(name);
name = Utils.toTitleCase(name);
int rawInt = pair.second;
QString raw = QString::number(rawInt);
@@ -963,29 +963,6 @@ void MainWindow::addSmartAttributesTable(const QJsonArray &attributes)
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()
{
qApp->quit();
@@ -1020,13 +997,11 @@ void MainWindow::on_actionSave_JSON_triggered()
}
}
void MainWindow::on_actionGitHub_triggered()
{
QDesktopServices::openUrl(QUrl("https://github.com/edisionnano/KDiskInfo"));
}
void MainWindow::on_actionRescan_Refresh_triggered()
{
QPair<QStringList, QJsonArray> values = Utils.scanDevices(initializing);
@@ -1038,7 +1013,6 @@ void MainWindow::on_actionRescan_Refresh_triggered()
}
}
void MainWindow::on_actionAbout_triggered()
{
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)
{
settings.setValue("HEX", ui->actionHEX->isChecked());
@@ -1085,39 +1058,12 @@ void MainWindow::on_actionCyclic_Navigation_toggled(bool cyclicNavigation)
updateNavigationButtons(currentIndex);
}
QString MainWindow::initiateSelfTest(const QString &testType, const QString &deviceNode)
void MainWindow::on_actionUse_GB_instead_of_TB_toggled(bool gigabytes)
{
QProcess process;
QString command = Utils.getSmartctlPath(initializing);
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 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"));
settings.setValue("UseGB", ui->actionUse_GB_instead_of_TB->isChecked());
if (!initializing) {
Utils.clearButtonGroup(buttonGroup, horizontalLayout, buttonStretch, menuDisk);
updateUI();
}
}
@@ -1129,12 +1075,3 @@ void MainWindow::mousePressEvent(QMouseEvent *event)
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 addNvmeLogTable(const QVector<QPair<QString, int>>& nvmeLogOrdered);
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*);
};
#endif

View File

@@ -108,3 +108,62 @@ QPair<QStringList, QJsonArray> utils::scanDevices(bool initializing)
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 getSmartctlOutput(const QStringList &arguments, bool root, 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

Binary file not shown.

View File

@@ -14,258 +14,247 @@
<translation type="unfinished"></translation>
</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>
<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>
<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>
<translation type="unfinished"></translation>
</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>
<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>
<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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="179"/>
<location filename="../src/mainwindow.ui" line="220"/>
<source>Firmware</source>
<translation>Έκδοση Λογισμικού</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="193"/>
<location filename="../src/mainwindow.ui" line="234"/>
<source>Serial Number</source>
<translation>Σειριακός Αριθμός</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="207"/>
<location filename="../src/mainwindow.ui" line="248"/>
<source>Protocol</source>
<translation>Πρωτόκολλο</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="221"/>
<location filename="../src/mainwindow.ui" line="262"/>
<source>Device Node</source>
<translation>Διαδρομή</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="241"/>
<location filename="../src/mainwindow.cpp" line="440"/>
<location filename="../src/mainwindow.ui" line="282"/>
<location filename="../src/mainwindow.cpp" line="387"/>
<source>Type</source>
<translation>Τύπος</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="263"/>
<location filename="../src/mainwindow.ui" line="304"/>
<source>Total Host Reads</source>
<translation>Συνολικές Αναγνώσεις</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="277"/>
<location filename="../src/mainwindow.ui" line="318"/>
<source>Total Host Writes</source>
<translation>Συνολικές Εγγραφές</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="291"/>
<location filename="../src/mainwindow.ui" line="332"/>
<source>Rotation Rate</source>
<translation>Ρυθμός Περιστροφής</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="305"/>
<location filename="../src/mainwindow.ui" line="346"/>
<source>Power On Count</source>
<translation>Μετρητής Λειτουργίας</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="319"/>
<location filename="../src/mainwindow.cpp" line="440"/>
<location filename="../src/mainwindow.ui" line="360"/>
<location filename="../src/mainwindow.cpp" line="387"/>
<source>Power On Hours</source>
<translation>Ώρες Λειτουργίας</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="351"/>
<location filename="../src/mainwindow.ui" line="392"/>
<source>File</source>
<translation>&amp;Αρχείο</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="358"/>
<location filename="../src/mainwindow.ui" line="399"/>
<source>Settings</source>
<translation>&amp;Ρυθμίσεις</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="405"/>
<location filename="../src/mainwindow.ui" line="446"/>
<source>&amp;Quit</source>
<translation>Έ&amp;ξοδος</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="416"/>
<location filename="../src/mainwindow.ui" line="457"/>
<source>&amp;Refresh Devices</source>
<translation>&amp;Ανανέωση Συσκευών</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="451"/>
<location filename="../src/mainwindow.ui" line="492"/>
<source>&amp;Convert Raw values to HEX</source>
<translation>&amp;Μετατροπή των τιμών σε δεκαεξαδικές</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="464"/>
<location filename="../src/mainwindow.ui" line="505"/>
<source>Self Test</source>
<translation>Αυτοδιάγνωση</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="472"/>
<location filename="../src/mainwindow.ui" line="513"/>
<source>Cyclic &amp;Navigation</source>
<translation>&amp;Κυκλική Πλοήγηση</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="480"/>
<location filename="../src/mainwindow.ui" line="521"/>
<source>Use &amp;GB instead of TB</source>
<translation>Χρήση &amp;GB αντί για TB</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="368"/>
<location filename="../src/mainwindow.ui" line="409"/>
<source>&amp;Help</source>
<translation>&amp;Βοήθεια</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="376"/>
<location filename="../src/mainwindow.ui" line="417"/>
<source>De&amp;vice</source>
<translation>&amp;Συσκευή</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="383"/>
<location filename="../src/mainwindow.cpp" line="283"/>
<location filename="../src/mainwindow.ui" line="424"/>
<location filename="../src/mainwindow.cpp" line="230"/>
<source>Disk</source>
<translation>&amp;Δίσκος</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="397"/>
<location filename="../src/mainwindow.ui" line="438"/>
<source>&amp;Save JSON</source>
<translation>Αποθήκευση &amp;JSON</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="424"/>
<location filename="../src/mainwindow.ui" line="465"/>
<source>&amp;GitHub</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="432"/>
<location filename="../src/mainwindow.ui" line="473"/>
<source>&amp;About</source>
<translation>&amp;Σχετικά</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="443"/>
<location filename="../src/mainwindow.ui" line="484"/>
<source>&amp;Ignore C4 (Reallocated Event Count)</source>
<translation>&amp;Αγνόησε το C4 (Reallocated Event Count)</translation>
</message>
<message>
<location filename="../src/mainwindow.ui" line="459"/>
<location filename="../src/mainwindow.ui" line="500"/>
<source>&amp;Use Fahrenheit</source>
<translation>Χρήση &amp;Fahrenheit</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="269"/>
<location filename="../src/mainwindow.cpp" line="709"/>
<location filename="../src/mainwindow.cpp" line="216"/>
<location filename="../src/mainwindow.cpp" line="671"/>
<source>Good</source>
<translation>Καλή</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="272"/>
<location filename="../src/mainwindow.cpp" line="707"/>
<location filename="../src/mainwindow.cpp" line="219"/>
<location filename="../src/mainwindow.cpp" line="669"/>
<source>Caution</source>
<translation>Προσοχή</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="275"/>
<location filename="../src/mainwindow.cpp" line="705"/>
<location filename="../src/mainwindow.cpp" line="222"/>
<location filename="../src/mainwindow.cpp" line="667"/>
<source>Bad</source>
<translation>Κακή</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="278"/>
<location filename="../src/mainwindow.cpp" line="225"/>
<source>Unknown</source>
<translation>Άγνωστη</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="813"/>
<location filename="../src/mainwindow.cpp" line="917"/>
<location filename="../src/mainwindow.cpp" line="775"/>
<location filename="../src/mainwindow.cpp" line="871"/>
<source>Attribute Name</source>
<translation>Ιδιότητα</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="813"/>
<location filename="../src/mainwindow.cpp" line="917"/>
<location filename="../src/mainwindow.cpp" line="775"/>
<location filename="../src/mainwindow.cpp" line="871"/>
<source>Raw Values</source>
<translation>Τιμή</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="917"/>
<location filename="../src/mainwindow.cpp" line="871"/>
<source>Current</source>
<translation>Τρέχουσα</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="917"/>
<location filename="../src/mainwindow.cpp" line="871"/>
<source>Worst</source>
<translation>Χειρότερη</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="917"/>
<location filename="../src/mainwindow.cpp" line="871"/>
<source>Threshold</source>
<translation>Όριο</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="151"/>
<location filename="../src/mainwindow.cpp" line="344"/>
<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"/>
<location filename="../src/mainwindow.cpp" line="291"/>
<location filename="../src/mainwindow.cpp" line="336"/>
<source>KDiskInfo Error</source>
<translation>Σφάλμα KDiskInfo</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="151"/>
<source>smartctl was not found, please install it!</source>
<translation>Το smartctl δε βρέθηκε, παρακαλείσθε να το εγκαταστήσετε!</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="344"/>
<location filename="../src/mainwindow.cpp" line="291"/>
<source>KDiskInfo needs root access in order to request a self-test!</source>
<translation>Το KDiskInfo χρειάζεται δικαιώματα υπερχρήστη για να εκτελέσει την αυτοδιάγνωση!</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="370"/>
<location filename="../src/mainwindow.cpp" line="317"/>
<source>Test Already Running</source>
<translation>Μία αυτοδιάγνωση είναι ήδη σε εκτέλεση</translation>
</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>
<translation>Η αυτοδιάγνωση ξεκίνησε επιτυχώς</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="387"/>
<location filename="../src/mainwindow.cpp" line="1205"/>
<location filename="../src/mainwindow.cpp" line="334"/>
<source>Test Requested</source>
<translation>Η αυτοδιάγνωση ξεκίνησε</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="389"/>
<location filename="../src/mainwindow.cpp" line="1207"/>
<location filename="../src/mainwindow.cpp" line="336"/>
<source>Error: Something went wrong</source>
<translation>Σφάλμα: Κάτι πήγε στραβά</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="440"/>
<location filename="../src/mainwindow.cpp" line="387"/>
<source>Status</source>
<translation>Κατάσταση</translation>
</message>
<message>
<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>
<translation>&amp;Καταγραφολόγιο Αυτοδιάγνωσης</translation>
</message>
@@ -275,172 +264,198 @@
<translation>&amp;Εκκίνηση Αυτοδιάγνωσης</translation>
</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>
<translation>Μία αυτοδιάγνωση εκτελείτε αυτή τη στιγμή</translation>
</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>
<translation>Μπορείτε να πατήσετε το κουμπί Εντάξει για να ακυρώσετε την τρέχουσα αυτοδιάγνωση</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="385"/>
<location filename="../src/mainwindow.cpp" line="332"/>
<source>minutes</source>
<translation>λεπτά</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="746"/>
<location filename="../src/mainwindow.cpp" line="708"/>
<source>Min.)</source>
<translation>Λεπ.)</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="737"/>
<location filename="../src/mainwindow.cpp" line="784"/>
<location filename="../src/mainwindow.cpp" line="699"/>
<location filename="../src/mainwindow.cpp" line="746"/>
<source>Short</source>
<translation>Σύντομο</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="365"/>
<location filename="../src/mainwindow.cpp" line="312"/>
<source>remaining</source>
<translation>απομένει</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="366"/>
<location filename="../src/mainwindow.cpp" line="313"/>
<source>completed</source>
<translation>ολοκληρώθηκε</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="385"/>
<location filename="../src/mainwindow.cpp" line="332"/>
<source>It will be completed after</source>
<translation>Θα τελειώσει μετά από</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="505"/>
<location filename="../src/mainwindow.cpp" line="467"/>
<source>count</source>
<translation>μονάδες</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="516"/>
<location filename="../src/mainwindow.cpp" line="478"/>
<source>hours</source>
<translation>ώρες</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="739"/>
<location filename="../src/mainwindow.cpp" line="701"/>
<source>Conveyance</source>
<translation>Μεταφορά</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="741"/>
<location filename="../src/mainwindow.cpp" line="790"/>
<location filename="../src/mainwindow.cpp" line="703"/>
<location filename="../src/mainwindow.cpp" line="752"/>
<source>Extended</source>
<translation>Εμπεριστατωμένο</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="813"/>
<location filename="../src/mainwindow.cpp" line="917"/>
<location filename="../src/mainwindow.cpp" line="775"/>
<location filename="../src/mainwindow.cpp" line="871"/>
<source>ID</source>
<translation type="unfinished"></translation>
</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>
<translation>Η υγεία του δίσκου έχει πέσει κάτω από το όριο</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="850"/>
<location filename="../src/mainwindow.cpp" line="804"/>
<source>Temperature error (Overheat or Overcool)</source>
<translation>Σφάλμα θερμοκρασίας (Υπερθέρμανση ή Υπερψύξη)</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="852"/>
<location filename="../src/mainwindow.cpp" line="806"/>
<source>NVM subsystem reliability has been degraded</source>
<translation>Η αξιοπιστία του NVMe έχει μειωθεί</translation>
</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>
<translation>Το μέσο έχει τεθεί αποκλειστικά σε λειτουργία ανάγνωσης</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="856"/>
<location filename="../src/mainwindow.cpp" line="810"/>
<source>Volatile memory backup device has Failed</source>
<translation>Η δημιουργία αρχείου επαναφοράς της μη διατηρήσιμης μνήμης απέτυχε</translation>
</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>
<translation>Η διατηρήσιμη μνήμη έχει μεταβεί αποκλειστικά σε λειτουργία ανάγνωσης</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="910"/>
<location filename="../src/mainwindow.cpp" line="864"/>
<source>Critical Warning</source>
<translation>Σημαντική Προειδοποίηση</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1029"/>
<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"/>
<location filename="../src/mainwindow.cpp" line="974"/>
<source>Empty JSON</source>
<translation>Κενό JSON</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1091"/>
<location filename="../src/mainwindow.cpp" line="975"/>
<source>The JSON is empty</source>
<translation>Αυτό το JSON είναι κενό</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1096"/>
<location filename="../src/mainwindow.cpp" line="980"/>
<source>Save JSON</source>
<translation>Αποθήκευση JSON</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1097"/>
<location filename="../src/mainwindow.cpp" line="981"/>
<source>JSON (*.json);;All Files (*)</source>
<translation>JSON (*.json);;;Όλα τα αρχεία (*)</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1103"/>
<location filename="../src/mainwindow.cpp" line="987"/>
<source>Unable to open file for writing</source>
<translation>Δεν είναι δυνατό το άνοιγμα αυτού του αρχείου για εγγραφή</translation>
</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>
<translation>Ένας αναγνώστης S.M.A.R.T. για τα Linux</translation>
</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>
<translation>Διατίθεται υπό την άδεια GNU G.P.L. Έκδοση 3</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1134"/>
<location filename="../src/mainwindow.cpp" line="1021"/>
<source>Version</source>
<translation>Έκδοση</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1203"/>
<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"/>
<location filename="../src/mainwindow.cpp" line="1020"/>
<source>Made by Samantas5855</source>
<translation>Δημιουργήθηκε από τον Samantas5855</translation>
</message>
<message>
<location filename="../src/mainwindow.cpp" line="1136"/>
<location filename="../src/mainwindow.cpp" line="1023"/>
<source>About KDiskInfo</source>
<translation>Σχετικά με το KDiskInfo</translation>
</message>
</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>