From 1449e807ad9554f2b43f27aeedd41d2ec99131cd Mon Sep 17 00:00:00 2001 From: localhorst Date: Fri, 12 Dec 2025 22:32:51 +0100 Subject: [PATCH] User triggered print of drive lable (#85) implements https://git.mosad.xyz/localhorst/reHDD/issues/66 Reviewed-on: https://git.mosad.xyz/localhorst/reHDD/pulls/85 Co-authored-by: localhorst Co-committed-by: localhorst --- include/reHDD.h | 4 +++- include/tui.h | 2 ++ src/reHDD.cpp | 50 +++++++++++++++++++++++++++++++++++++++++++++++++ src/tui.cpp | 18 ++++++++++++++---- 4 files changed, 69 insertions(+), 5 deletions(-) diff --git a/include/reHDD.h b/include/reHDD.h index 059e199..86edc09 100644 --- a/include/reHDD.h +++ b/include/reHDD.h @@ -31,7 +31,7 @@ #endif // Logic -// #define DRYRUN // don't touch the drives +// #define DRYRUN // don't touch the drives #define FROZEN_ALERT // show alert if drive is frozen #define ZERO_CHECK // check drive after shred if all bytes are zero, show alert if this fails @@ -90,6 +90,8 @@ private: static void filterInvalidDrives(list *plistDrives); static void filterNewDrives(list *plistOldDrives, list *plistNewDrives); static void addSMARTData(list *plistDrives); + static void printAllDrives(list *plistDrives); + static void printDrive(Drive *const pDrive); static void ThreadScanDevices(); static void ThreadUserInput(); static void ThreadShred(Drive *const pDrive); diff --git a/include/tui.h b/include/tui.h index 7c170ac..3826650 100644 --- a/include/tui.h +++ b/include/tui.h @@ -32,6 +32,8 @@ public: Enter, ESC, Terminate, + Print, + PrintAll, Undefined }; struct MenuState diff --git a/src/reHDD.cpp b/src/reHDD.cpp index ea3757f..a395908 100644 --- a/src/reHDD.cpp +++ b/src/reHDD.cpp @@ -216,12 +216,62 @@ void reHDD::ThreadUserInput() sleep(5); // sleep 5 sec std::exit(1); // Terminates main, doesn't wait for threads break; + case TUI::UserInput::Print: + // cout << "Print" << endl; + if (tmpSelectedDrive != nullptr) + { + printDrive(tmpSelectedDrive); + } + ui->updateTUI(&listDrives, u16SelectedEntry); + break; + case TUI::UserInput::PrintAll: + // cout << "PrintAll" << endl; + printAllDrives(&listDrives); + ui->updateTUI(&listDrives, u16SelectedEntry); + break; default: break; } } } +/** + * \brief print all shredded drives + * \param pointer of list * plistDrives + * \return void + */ +void reHDD::printAllDrives(list *plistDrives) +{ + list::iterator it; + mxDrives.lock(); + for (it = plistDrives->begin(); it != plistDrives->end(); ++it) + { + Drive *pTmpDrive = iterator_to_pointer::iterator>(it); + printDrive(pTmpDrive); + } + mxDrives.unlock(); +} + +/** + * \brief print a shredded drives + * \param pointer of a drive + * \return void + */ +void reHDD::printDrive(Drive *const pDrive) +{ + if (pDrive->bWasShredded) + { +#ifdef ZERO_CHECK + if (pDrive->bWasChecked && (pDrive->u32DriveChecksumAfterShredding != 0U)) + { + return; // Drive was shredded&checked but checksum failed, don't print label + } +#endif + Logger::logThis()->info("User print for: " + pDrive->getModelName() + "-" + pDrive->getSerial()); + Printer::getPrinter()->print(pDrive); + } +} + void reHDD::ThreadShred(Drive *const pDrive) { if (pDrive != nullptr) diff --git a/src/tui.cpp b/src/tui.cpp index 54d1474..49e01b8 100644 --- a/src/tui.cpp +++ b/src/tui.cpp @@ -259,6 +259,12 @@ enum TUI::UserInput TUI::readUserInput() case 'T': return TUI::UserInput::Terminate; break; + case 'p': + return TUI::UserInput::Print; + break; + case 'P': + return TUI::UserInput::PrintAll; + break; default: return TUI::UserInput::Undefined; break; @@ -348,7 +354,7 @@ WINDOW *TUI::overwriteDetailViewWindow(int iXSize, int iYSize, int iXStart) string sLine01 = "reHDD - hard drive refurbishing tool"; string sLine02 = "Version: " + string(REHDD_VERSION); - string sLine03 = "Available under GPL 3.0"; + string sLine03 = "Free software under the GNU GPL 3.0"; string sLine04 = "https://git.mosad.xyz/localhorst/reHDD"; string sLine05 = "Delete: Wipe format table - this is NOT secure"; string sLine06 = "Shred: Overwrite drive " + to_string(SHRED_ITERATIONS) + " iterations - this is secure"; @@ -466,7 +472,7 @@ WINDOW *TUI::createSystemStats(int iXSize, int iYSize, int iXStart, int iYStart) sLine03.append(__DATE__); sLine03.append(" "); sLine03.append(__TIME__); - string sLine04 = "Available under GPL 3.0"; + string sLine04 = "Free software under the GNU GPL 3.0"; string sLine05 = "https://git.mosad.xyz/localhorst/reHDD"; uint16_t u16Line = 2; @@ -493,7 +499,7 @@ WINDOW *TUI::createMenuView(int iXSize, int iYSize, int iXStart, int iYStart, st centerTitle(newWindow, "Controls"); - uint16_t u16Line = 4; + uint16_t u16Line = 2; if (menustate.bAbort) { @@ -514,7 +520,11 @@ WINDOW *TUI::createMenuView(int iXSize, int iYSize, int iXStart, int iYStart, st u16Line++; } - string sLineTmp = "Press T for terminating reHDD"; + string sLineTmp = "Press p for Print (P for all drives)"; + mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (sLineTmp.size() / 2), sLineTmp.c_str()); + u16Line++; + + sLineTmp = "Press T for terminating reHDD"; mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (sLineTmp.size() / 2), sLineTmp.c_str()); return newWindow;