Merge branch 'master' into feature/failed-state

This commit is contained in:
2025-12-10 21:59:04 +01:00
16 changed files with 459 additions and 238 deletions

View File

@ -6,6 +6,7 @@
*/
#include "../include/reHDD.h"
using namespace std;
static std::mutex mxUIrefresh;
@ -98,9 +99,9 @@ void TUI::updateTUI(list<Drive> *plistDrives, uint8_t u8SelectedEntry)
string sSpeed = " ";
string sTime = " ";
string sTemp = it->sTemperatureToText();
string sConnection = (it->connectionType == Drive::USB ? "USB" : it->connectionType == Drive::SATA ? "SATA"
: it->connectionType == Drive::NVME ? "NVME"
: "");
string sConnection = (it->connectionType == Drive::ConnectionType::USB ? "USB" : it->connectionType == Drive::ConnectionType::SATA ? "SATA"
: it->connectionType == Drive::ConnectionType::NVME ? "NVME"
: "");
bool bSelectedEntry = false;
@ -121,31 +122,40 @@ void TUI::updateTUI(list<Drive> *plistDrives, uint8_t u8SelectedEntry)
switch (it->state)
{
case Drive::SHRED_ACTIVE:
case Drive::TaskState::SHRED_ACTIVE:
{
stream << fixed << setprecision(3) << (it->getTaskPercentage());
sState = "Shredding: " + stream.str() + "%";
it->calculateTaskDuration();
sTime = this->formatTimeDuration(it->getTaskDuration());
sSpeed = this->formatSpeed(it->sShredSpeed.u32ShredTimeDelta, it->sShredSpeed.ulWrittenBytes);
auto shredSpeed = it->sShredSpeed.load();
sSpeed = this->formatSpeed(shredSpeed.u32ShredTimeDelta, shredSpeed.ulWrittenBytes);
break;
case Drive::CHECK_ACTIVE:
}
case Drive::TaskState::CHECK_ACTIVE:
{
stream << fixed << setprecision(3) << (it->getTaskPercentage());
sState = "Checking: " + stream.str() + "%";
it->calculateTaskDuration();
sTime = this->formatTimeDuration(it->getTaskDuration());
sSpeed = this->formatSpeed(it->sShredSpeed.u32ShredTimeDelta, it->sShredSpeed.ulWrittenBytes);
auto shredSpeed = it->sShredSpeed.load();
sSpeed = this->formatSpeed(shredSpeed.u32ShredTimeDelta, shredSpeed.ulWrittenBytes);
break;
case Drive::DELETE_ACTIVE:
}
case Drive::TaskState::DELETE_ACTIVE:
{
sState = "Deleting ...";
it->calculateTaskDuration();
sTime = this->formatTimeDuration(it->getTaskDuration());
break;
case Drive::NONE:
case Drive::SHRED_SELECTED:
case Drive::DELETE_SELECTED:
case Drive::CHECK_SUCCESSFUL:
}
case Drive::TaskState::NONE:
case Drive::TaskState::SHRED_SELECTED:
case Drive::TaskState::DELETE_SELECTED:
case Drive::TaskState::CHECK_SUCCESSFUL:
{
if (it->bWasDeleted)
{
sState = "DELETED"; // mark drive as deleted previously
@ -166,15 +176,15 @@ void TUI::updateTUI(list<Drive> *plistDrives, uint8_t u8SelectedEntry)
}
#ifdef ZERO_CHECK
if (bSelectedEntry && it->bWasChecked && (it->state == Drive::CHECK_FAILED))
if (bSelectedEntry && it->bWasChecked && (it->state == Drive::TaskState::CHECK_FAILED))
{
dialog = createZeroChecksumWarning(70, 16, ((u16StdscrX) - (int)(u16StdscrX / 2) - 20), (int)(u16StdscrY / 2) - 8, it->getPath(), it->getModelFamily(), it->getModelName(), it->getSerial(), it->u32DriveChecksumAfterShredding);
wrefresh(dialog);
}
#endif
break;
case Drive::FROZEN:
}
case Drive::TaskState::FROZEN:
stream << fixed << setprecision(3) << (it->getTaskPercentage());
#ifdef FROZEN_ALERT
if (bSelectedEntry)
@ -290,7 +300,7 @@ WINDOW *TUI::createOverViewWindow(int iXSize, int iYSize)
return newWindow;
}
WINDOW *TUI::createDetailViewWindow(int iXSize, int iYSize, int iXStart, Drive drive)
WINDOW *TUI::createDetailViewWindow(int iXSize, int iYSize, int iXStart, Drive &drive)
{
WINDOW *newWindow;
newWindow = newwin(iYSize, iXSize, 1, iXStart);
@ -633,7 +643,7 @@ void TUI::vTruncateText(string *psText, uint16_t u16MaxLenght)
}
}
void TUI::displaySelectedDrive(Drive drive, int stdscrX, int stdscrY)
void TUI::displaySelectedDrive(Drive &drive, int stdscrX, int stdscrY)
{
struct MenuState menustate;
static bool dialogIsActive;
@ -646,27 +656,27 @@ void TUI::displaySelectedDrive(Drive drive, int stdscrX, int stdscrY)
// set menustate based on drive state
switch (drive.state)
{
case Drive::NONE: // no task running or selected for this drive
case Drive::TaskState::NONE: // no task running or selected for this drive
menustate.bShred = true;
menustate.bDelete = true;
break;
case Drive::DELETE_ACTIVE: // delete task running for this drive
case Drive::TaskState::DELETE_ACTIVE: // delete task running for this drive
menustate.bAbort = true;
break;
case Drive::SHRED_ACTIVE: // shred task running for this drive
case Drive::TaskState::SHRED_ACTIVE: // shred task running for this drive
menustate.bAbort = true;
break;
case Drive::CHECK_ACTIVE: // check task running for this drive
case Drive::TaskState::CHECK_ACTIVE: // check task running for this drive
menustate.bAbort = true;
break;
case Drive::DELETE_SELECTED: // delete task selected for this drive
case Drive::TaskState::DELETE_SELECTED: // delete task selected for this drive
menustate.bConfirmDelete = true;
break;
case Drive::SHRED_SELECTED: // shred task selected for this drive
case Drive::TaskState::SHRED_SELECTED: // shred task selected for this drive
menustate.bConfirmShred = true;
break;
default: