Merge pull request 'Terminate reHDD on user input' (#75) from feature/control-menu into master

Reviewed-on: #75
This commit is contained in:
Hendrik Schutter 2025-06-21 11:51:00 +02:00
commit d8584486b9
5 changed files with 47 additions and 4 deletions

View File

@ -8,7 +8,7 @@
#ifndef REHDD_H_
#define REHDD_H_
#define REHDD_VERSION "V1.1.3"
#define REHDD_VERSION "V1.2.0"
// Drive handling Settings
#define WORSE_HOURS 19200 // mark drive if at this limit or beyond
@ -86,6 +86,7 @@ private:
static void searchDrives(list<Drive> *plistDrives);
static void printDrives(list<Drive> *plistDrives);
static void startShredAllDrives(list<Drive> *plistDrives);
static void stopShredAllDrives(list<Drive> *plistDrives);
static void updateShredMetrics(list<Drive> *plistDrives);
static void filterIgnoredDrives(list<Drive> *plistDrives);
static void filterInvalidDrives(list<Drive> *plistDrives);

View File

@ -31,6 +31,7 @@ public:
Delete,
Enter,
ESC,
Terminate,
Undefined
};
struct MenuState

View File

@ -197,6 +197,12 @@ void reHDD::ThreadUserInput()
handleESC();
ui->updateTUI(&listDrives, u8SelectedEntry);
break;
case TUI::UserInput::Terminate:
cout << "Terminate" << endl;
stopShredAllDrives(&listDrives);
sleep(5); // sleep 5 sec
std::exit(1); // Terminates main, doesn't wait for threads
break;
default:
break;
}
@ -464,6 +470,34 @@ void reHDD::startShredAllDrives(list<Drive> *plistDrives)
mxDrives.unlock();
}
/**
* \brief stop shred for all drives
* \param pointer of list <Drive>* plistDrives
* \return void
*/
void reHDD::stopShredAllDrives(list<Drive> *plistDrives)
{
list<Drive>::iterator it;
mxDrives.lock();
for (it = plistDrives->begin(); it != plistDrives->end(); ++it)
{
if (it->state == Drive::SHRED_ACTIVE || it->state == Drive::DELETE_ACTIVE)
{
it->state = Drive::NONE;
Logger::logThis()->info("Abort-Shred-Signal for: " + it->getModelName() + "-" + it->getSerial());
// task for drive is running --> remove selection
}
#ifdef LOG_LEVEL_HIGH
ostringstream address;
address << (void const *)&(*it);
Logger::logThis()->info("Started shred (all) for: " + it->getModelName() + "-" + it->getSerial() + " @" + address.str());
#endif
}
mxDrives.unlock();
}
/**
* \brief print drives with all information
* \param pointer of list <Drive>* plistDrives

View File

@ -187,7 +187,7 @@ int Shred::shredDrive(Drive *drive, int *ipSignalFd)
Logger::logThis()->info("Check-Task started - Drive: " + drive->getModelName() + "-" + drive->getSerial() + " @" + address.str());
drive->u32DriveChecksumAfterShredding = uiCalcChecksum(driveFileDiscr, drive, ipSignalFd);
#ifdef LOG_LEVEL_HIGH
if (drive->u32DriveChecksumAferShredding != 0)
if (drive->u32DriveChecksumAfterShredding != 0)
{
Logger::logThis()->info("Shred-Task: Checksum not zero: " + to_string(drive->u32DriveChecksumAfterShredding) + " - Drive: " + drive->getSerial());
}

View File

@ -237,6 +237,9 @@ enum TUI::UserInput TUI::readUserInput()
case 'S':
return TUI::UserInput::ShredAll;
break;
case 'T':
return TUI::UserInput::Terminate;
break;
default:
return TUI::UserInput::Undefined;
break;
@ -482,8 +485,12 @@ WINDOW *TUI::createMenuView(int iXSize, int iYSize, int iXStart, int iYStart, st
{
string sLineTmp = "Press d for Delete";
mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (sLineTmp.size() / 2), sLineTmp.c_str());
u16Line++;
}
string sLineTmp = "Press T for terminating reHDD";
mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (sLineTmp.size() / 2), sLineTmp.c_str());
return newWindow;
}