diff --git a/src/reHDD.cpp b/src/reHDD.cpp index 8083925..f460325 100644 --- a/src/reHDD.cpp +++ b/src/reHDD.cpp @@ -135,77 +135,77 @@ void reHDD::ThreadUserInput() { while (true) { - // cout << TUI::readUserInput() << endl; - switch (TUI::readUserInput()) + Drive *tmpSelectedDrive = getSelectedDrive(); + if (tmpSelectedDrive != nullptr) { - case TUI::UserInput::DownKey: - // cout << "Down" << endl; - handleArrowKey(TUI::UserInput::DownKey); - ui->updateTUI(&listDrives, u8SelectedEntry); - break; - case TUI::UserInput::UpKey: - // cout << "Up" << endl; - handleArrowKey(TUI::UserInput::UpKey); - ui->updateTUI(&listDrives, u8SelectedEntry); - break; - case TUI::UserInput::Undefined: - // cout << "Undefined" << endl; - break; - case TUI::UserInput::Abort: - // cout << "Abort" << endl; - handleAbort(); - ui->updateTUI(&listDrives, u8SelectedEntry); - break; - case TUI::UserInput::Delete: - // cout << "Delete" << endl; - if (getSelectedDrive() != nullptr) + // cout << TUI::readUserInput() << endl; + switch (TUI::readUserInput()) { - if (getSelectedDrive()->state == Drive::NONE) + case TUI::UserInput::DownKey: + // cout << "Down" << endl; + handleArrowKey(TUI::UserInput::DownKey); + ui->updateTUI(&listDrives, u8SelectedEntry); + break; + case TUI::UserInput::UpKey: + // cout << "Up" << endl; + handleArrowKey(TUI::UserInput::UpKey); + ui->updateTUI(&listDrives, u8SelectedEntry); + break; + case TUI::UserInput::Undefined: + // cout << "Undefined" << endl; + break; + case TUI::UserInput::Abort: + // cout << "Abort" << endl; + handleAbort(); + ui->updateTUI(&listDrives, u8SelectedEntry); + break; + case TUI::UserInput::Delete: + // cout << "Delete" << endl; + + if (tmpSelectedDrive != nullptr) { - getSelectedDrive()->state = Drive::DELETE_SELECTED; + if (tmpSelectedDrive->state == Drive::NONE) + { + tmpSelectedDrive->state = Drive::DELETE_SELECTED; + } } - } - ui->updateTUI(&listDrives, u8SelectedEntry); - break; - case TUI::UserInput::Shred: - // cout << "Shred" << endl; - - if (getSelectedDrive() != nullptr) - { - if (getSelectedDrive()->state == Drive::NONE) + ui->updateTUI(&listDrives, u8SelectedEntry); + break; + case TUI::UserInput::Shred: + // cout << "Shred" << endl; + if (tmpSelectedDrive->state == Drive::NONE) { - getSelectedDrive()->state = Drive::SHRED_SELECTED; + tmpSelectedDrive->state = Drive::SHRED_SELECTED; } + ui->updateTUI(&listDrives, u8SelectedEntry); + break; + case TUI::UserInput::ShredAll: + // cout << "ShredAll" << endl; + startShredAllDrives(&listDrives); + ui->updateTUI(&listDrives, u8SelectedEntry); + break; + case TUI::UserInput::Enter: + // cout << "Enter" << endl; + handleEnter(); + ui->updateTUI(&listDrives, u8SelectedEntry); + break; + case TUI::UserInput::ESC: + // cout << "ESC" << endl; + handleESC(); + ui->updateTUI(&listDrives, u8SelectedEntry); + break; + case TUI::UserInput::Terminate: + // cout << "Terminate" << endl; + stopShredAllDrives(&listDrives); + ui->terminateTUI(); + sleep(5); // sleep 5 sec + std::exit(1); // Terminates main, doesn't wait for threads + break; + default: + break; } - - ui->updateTUI(&listDrives, u8SelectedEntry); - break; - case TUI::UserInput::ShredAll: - // cout << "ShredAll" << endl; - startShredAllDrives(&listDrives); - ui->updateTUI(&listDrives, u8SelectedEntry); - break; - case TUI::UserInput::Enter: - // cout << "Enter" << endl; - handleEnter(); - ui->updateTUI(&listDrives, u8SelectedEntry); - break; - case TUI::UserInput::ESC: - // cout << "ESC" << endl; - handleESC(); - ui->updateTUI(&listDrives, u8SelectedEntry); - break; - case TUI::UserInput::Terminate: - // cout << "Terminate" << endl; - stopShredAllDrives(&listDrives); - ui->terminateTUI(); - sleep(5); // sleep 5 sec - std::exit(1); // Terminates main, doesn't wait for threads - break; - default: - break; } } } @@ -224,13 +224,14 @@ void reHDD::ThreadShred(Drive *const pDrive) void reHDD::ThreadDelete() { - if (getSelectedDrive() != nullptr) + Drive *tmpSelectedDrive = getSelectedDrive(); + if (tmpSelectedDrive != nullptr) { - getSelectedDrive()->setActionStartTimestamp(); // save timestamp at start of deleting - Delete::deleteDrive(getSelectedDrive()); // blocking, no thread - getSelectedDrive()->state = Drive::TaskState::NONE; // delete finished - getSelectedDrive()->bWasDeleted = true; - Logger::logThis()->info("Finished delete for: " + getSelectedDrive()->getModelName() + "-" + getSelectedDrive()->getSerial()); + tmpSelectedDrive->setActionStartTimestamp(); // save timestamp at start of deleting + Delete::deleteDrive(tmpSelectedDrive); // blocking, no thread + tmpSelectedDrive->state = Drive::TaskState::NONE; // delete finished + tmpSelectedDrive->bWasDeleted = true; + Logger::logThis()->info("Finished delete for: " + tmpSelectedDrive->getModelName() + "-" + tmpSelectedDrive->getSerial()); ui->updateTUI(&listDrives, u8SelectedEntry); } } @@ -313,7 +314,6 @@ void reHDD::searchDrives(std::list *plistDrives) if (!fp) { Logger::logThis()->error("Unable to execute lsblk to scan drives"); - pclose(fp); exit(EXIT_FAILURE); } @@ -620,22 +620,21 @@ void reHDD::handleArrowKey(TUI::UserInput userInput) void reHDD::handleEnter() { - - if (getSelectedDrive() != nullptr) + Drive *tmpSelectedDrive = getSelectedDrive(); + if (tmpSelectedDrive != nullptr) { - if (getSelectedDrive()->state == Drive::TaskState::SHRED_SELECTED) + if (tmpSelectedDrive->state == Drive::TaskState::SHRED_SELECTED) { - Logger::logThis()->info("Started shred/check for: " + getSelectedDrive()->getModelName() + "-" + getSelectedDrive()->getSerial()); - getSelectedDrive()->state = Drive::TaskState::SHRED_ACTIVE; - // task for drive is running --> don't show more task options - Drive *pTmpDrive = getSelectedDrive(); - thread(ThreadShred, pTmpDrive).detach(); + Logger::logThis()->info("Started shred/check for: " + tmpSelectedDrive->getModelName() + "-" + tmpSelectedDrive->getSerial()); + tmpSelectedDrive->state = Drive::TaskState::SHRED_ACTIVE; + // task for drive is running --> don't show more task option + thread(ThreadShred, tmpSelectedDrive).detach(); } - if (getSelectedDrive()->state == Drive::TaskState::DELETE_SELECTED) + if (tmpSelectedDrive->state == Drive::TaskState::DELETE_SELECTED) { - Logger::logThis()->info("Started delete for: " + getSelectedDrive()->getModelName() + "-" + getSelectedDrive()->getSerial()); - getSelectedDrive()->state = Drive::TaskState::DELETE_ACTIVE; + Logger::logThis()->info("Started delete for: " + tmpSelectedDrive->getModelName() + "-" + tmpSelectedDrive->getSerial()); + tmpSelectedDrive->state = Drive::TaskState::DELETE_ACTIVE; // task for drive is running --> don't show more task options thread(ThreadDelete).detach(); } @@ -644,17 +643,18 @@ void reHDD::handleEnter() void reHDD::handleESC() { - if (getSelectedDrive() != nullptr) + Drive *tmpSelectedDrive = getSelectedDrive(); + if (tmpSelectedDrive != nullptr) { - if (getSelectedDrive()->state == Drive::TaskState::SHRED_SELECTED) + if (tmpSelectedDrive->state == Drive::TaskState::SHRED_SELECTED) { - getSelectedDrive()->state = Drive::TaskState::NONE; + tmpSelectedDrive->state = Drive::TaskState::NONE; // task for drive is selected --> remove selection } - if (getSelectedDrive()->state == Drive::TaskState::DELETE_SELECTED) + if (tmpSelectedDrive->state == Drive::TaskState::DELETE_SELECTED) { - getSelectedDrive()->state = Drive::TaskState::NONE; + tmpSelectedDrive->state = Drive::TaskState::NONE; // task for drive is selected --> remove selection } } @@ -662,12 +662,13 @@ void reHDD::handleESC() void reHDD::handleAbort() { - if (getSelectedDrive() != nullptr) + Drive *tmpSelectedDrive = getSelectedDrive(); + if (tmpSelectedDrive != nullptr) { - if (getSelectedDrive()->state == Drive::SHRED_ACTIVE || getSelectedDrive()->state == Drive::DELETE_ACTIVE) + if (tmpSelectedDrive->state == Drive::SHRED_ACTIVE || tmpSelectedDrive->state == Drive::DELETE_ACTIVE) { - getSelectedDrive()->state = Drive::NONE; - Logger::logThis()->info("Abort-Shred-Signal for: " + getSelectedDrive()->getModelName() + "-" + getSelectedDrive()->getSerial()); + tmpSelectedDrive->state = Drive::NONE; + Logger::logThis()->info("Abort-Shred-Signal for: " + tmpSelectedDrive->getModelName() + "-" + tmpSelectedDrive->getSerial()); // task for drive is running --> remove selection } }