forked from localhorst/reHDD
fixed states if drive is no longer present
This commit is contained in:
129
src/reHDD.cpp
129
src/reHDD.cpp
@ -19,7 +19,7 @@ static vector <Drive> vecDrives; //stores all drive data from scann thread
|
||||
|
||||
TUI *ui;
|
||||
|
||||
static int32_t i32SelectedEntry;
|
||||
static uint8_t u8SelectedEntry;
|
||||
|
||||
static fd_set selectSet;
|
||||
|
||||
@ -33,7 +33,7 @@ static fd_set selectSet;
|
||||
reHDD::reHDD(void)
|
||||
{
|
||||
cout << "created app" << endl;
|
||||
i32SelectedEntry = 0;
|
||||
u8SelectedEntry = 0U;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -78,14 +78,24 @@ void reHDD::app_logic(void)
|
||||
|
||||
checkShredComplete(&vecDrives);
|
||||
}
|
||||
|
||||
ui->updateTUI(&vecDrives, i32SelectedEntry);
|
||||
|
||||
ui->updateTUI(&vecDrives, u8SelectedEntry);
|
||||
} //endless loop
|
||||
thDevices.join();
|
||||
thUserInput.join();
|
||||
}
|
||||
|
||||
Drive* reHDD::getSelectedDrive()
|
||||
{
|
||||
if(u8SelectedEntry < vecDrives.size() )
|
||||
{
|
||||
return &(vecDrives.at(u8SelectedEntry));
|
||||
}
|
||||
else
|
||||
{
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
void reHDD::ThreadScannDevices()
|
||||
{
|
||||
while(true)
|
||||
@ -112,12 +122,12 @@ void reHDD::ThreadUserInput()
|
||||
case TUI::UserInput::DownKey:
|
||||
//cout << "Down" << endl;
|
||||
handleArrowKey(TUI::UserInput::DownKey);
|
||||
ui->updateTUI(&vecDrives, i32SelectedEntry);
|
||||
ui->updateTUI(&vecDrives, u8SelectedEntry);
|
||||
break;
|
||||
case TUI::UserInput::UpKey:
|
||||
//cout << "Up" << endl;
|
||||
handleArrowKey(TUI::UserInput::UpKey);
|
||||
ui->updateTUI(&vecDrives, i32SelectedEntry);
|
||||
ui->updateTUI(&vecDrives, u8SelectedEntry);
|
||||
break;
|
||||
case TUI::UserInput::Undefined:
|
||||
//cout << "Undefined" << endl;
|
||||
@ -125,33 +135,41 @@ void reHDD::ThreadUserInput()
|
||||
case TUI::UserInput::Abort:
|
||||
//cout << "Abort" << endl;
|
||||
handleAbort();
|
||||
ui->updateTUI(&vecDrives, i32SelectedEntry);
|
||||
ui->updateTUI(&vecDrives, u8SelectedEntry);
|
||||
break;
|
||||
case TUI::UserInput::Delete:
|
||||
//cout << "Delete" << endl;
|
||||
if(SELECTED_DRIVE.state == Drive::NONE)
|
||||
|
||||
if (getSelectedDrive() != nullptr)
|
||||
{
|
||||
SELECTED_DRIVE.state = Drive::DELETE_SELECTED;
|
||||
if(getSelectedDrive()->state == Drive::NONE)
|
||||
{
|
||||
getSelectedDrive()->state = Drive::DELETE_SELECTED;
|
||||
}
|
||||
}
|
||||
ui->updateTUI(&vecDrives, i32SelectedEntry);
|
||||
ui->updateTUI(&vecDrives, u8SelectedEntry);
|
||||
break;
|
||||
case TUI::UserInput::Shred:
|
||||
//cout << "Shred" << endl;
|
||||
if(SELECTED_DRIVE.state == Drive::NONE)
|
||||
|
||||
if (getSelectedDrive() != nullptr)
|
||||
{
|
||||
SELECTED_DRIVE.state = Drive::SHRED_SELECTED;
|
||||
if(getSelectedDrive()->state == Drive::NONE)
|
||||
{
|
||||
getSelectedDrive()->state = Drive::SHRED_SELECTED;
|
||||
}
|
||||
}
|
||||
ui->updateTUI(&vecDrives, i32SelectedEntry);
|
||||
ui->updateTUI(&vecDrives, u8SelectedEntry);
|
||||
break;
|
||||
case TUI::UserInput::Enter:
|
||||
//cout << "Enter" << endl;
|
||||
handleEnter();
|
||||
ui->updateTUI(&vecDrives, i32SelectedEntry);
|
||||
ui->updateTUI(&vecDrives, u8SelectedEntry);
|
||||
break;
|
||||
case TUI::UserInput::ESC:
|
||||
//cout << "ESC" << endl;
|
||||
handleESC();
|
||||
ui->updateTUI(&vecDrives, i32SelectedEntry);
|
||||
ui->updateTUI(&vecDrives, u8SelectedEntry);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -161,7 +179,10 @@ void reHDD::ThreadUserInput()
|
||||
|
||||
void reHDD::ThreadShred()
|
||||
{
|
||||
Shred::shredDrive(&SELECTED_DRIVE, &fdShredInformPipe[1]);
|
||||
if (getSelectedDrive() != nullptr)
|
||||
{
|
||||
Shred::shredDrive(getSelectedDrive(), &fdShredInformPipe[1]);
|
||||
}
|
||||
}
|
||||
|
||||
void reHDD::filterNewDrives(vector <Drive>* pvecOldDrives, vector <Drive>* pvecNewDrives)
|
||||
@ -358,69 +379,81 @@ void reHDD::addSMARTData(vector <Drive>* pvecDrives)
|
||||
|
||||
void reHDD::handleArrowKey(TUI::UserInput userInput)
|
||||
{
|
||||
int32_t i32EntrySize = (int32_t) vecDrives.size();
|
||||
int8_t u8EntrySize = (int8_t) vecDrives.size();
|
||||
switch (userInput)
|
||||
{
|
||||
case TUI::UserInput::DownKey:
|
||||
i32SelectedEntry++;
|
||||
if(i32SelectedEntry >= i32EntrySize)
|
||||
u8SelectedEntry++;
|
||||
if(u8SelectedEntry >= u8EntrySize)
|
||||
{
|
||||
i32SelectedEntry = 0;
|
||||
u8SelectedEntry = 0;
|
||||
}
|
||||
break;
|
||||
case TUI::UserInput::UpKey:
|
||||
i32SelectedEntry--;
|
||||
if(i32SelectedEntry < 0)
|
||||
if(u8SelectedEntry == 0)
|
||||
{
|
||||
i32SelectedEntry = (i32EntrySize-1);
|
||||
u8SelectedEntry = (u8EntrySize-1);
|
||||
}
|
||||
else
|
||||
{
|
||||
u8SelectedEntry--;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
i32SelectedEntry = 0;
|
||||
u8SelectedEntry = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void reHDD::handleEnter()
|
||||
{
|
||||
if(SELECTED_DRIVE.state == Drive::TaskState::SHRED_SELECTED)
|
||||
if (getSelectedDrive() != nullptr)
|
||||
{
|
||||
SELECTED_DRIVE.state = Drive::TaskState::SHRED_ACTIVE;
|
||||
//task for drive is running --> don´t show more task options
|
||||
thread(ThreadShred).detach();
|
||||
}
|
||||
if(getSelectedDrive()->state == Drive::TaskState::SHRED_SELECTED)
|
||||
{
|
||||
getSelectedDrive()->state = Drive::TaskState::SHRED_ACTIVE;
|
||||
//task for drive is running --> don´t show more task options
|
||||
thread(ThreadShred).detach();
|
||||
}
|
||||
|
||||
if(SELECTED_DRIVE.state == Drive::TaskState::DELETE_SELECTED)
|
||||
{
|
||||
SELECTED_DRIVE.state = Drive::TaskState::DELETE_ACTIVE;
|
||||
//task for drive is running --> don´t show more task options
|
||||
Delete::deleteDrive(&SELECTED_DRIVE); //blocking, no thread
|
||||
SELECTED_DRIVE.state = Drive::TaskState::NONE; //delete finished
|
||||
SELECTED_DRIVE.bWasDeleteted = true;
|
||||
if(getSelectedDrive()->state == Drive::TaskState::DELETE_SELECTED)
|
||||
{
|
||||
getSelectedDrive()->state = Drive::TaskState::DELETE_ACTIVE;
|
||||
//task for drive is running --> don´t show more task options
|
||||
Delete::deleteDrive(getSelectedDrive()); //blocking, no thread
|
||||
getSelectedDrive()->state = Drive::TaskState::NONE; //delete finished
|
||||
getSelectedDrive()->bWasDeleteted = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void reHDD::handleESC()
|
||||
{
|
||||
if(SELECTED_DRIVE.state == Drive::TaskState::SHRED_SELECTED)
|
||||
if (getSelectedDrive() != nullptr)
|
||||
{
|
||||
SELECTED_DRIVE.state = Drive::TaskState::NONE;
|
||||
//task for drive is selected --> remove selection
|
||||
}
|
||||
if(getSelectedDrive()->state == Drive::TaskState::SHRED_SELECTED)
|
||||
{
|
||||
getSelectedDrive()->state = Drive::TaskState::NONE;
|
||||
//task for drive is selected --> remove selection
|
||||
}
|
||||
|
||||
if(SELECTED_DRIVE.state == Drive::TaskState::DELETE_SELECTED)
|
||||
{
|
||||
SELECTED_DRIVE.state = Drive::TaskState::NONE;
|
||||
//task for drive is selected --> remove selection
|
||||
if(getSelectedDrive()->state == Drive::TaskState::DELETE_SELECTED)
|
||||
{
|
||||
getSelectedDrive()->state = Drive::TaskState::NONE;
|
||||
//task for drive is selected --> remove selection
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void reHDD::handleAbort()
|
||||
{
|
||||
if(SELECTED_DRIVE.state == Drive::SHRED_ACTIVE || SELECTED_DRIVE.state == Drive::DELETE_ACTIVE )
|
||||
if (getSelectedDrive() != nullptr)
|
||||
{
|
||||
SELECTED_DRIVE.state = Drive::NONE;
|
||||
//task for drive is running --> remove selection
|
||||
if(getSelectedDrive()->state == Drive::SHRED_ACTIVE || getSelectedDrive()->state == Drive::DELETE_ACTIVE )
|
||||
{
|
||||
getSelectedDrive()->state = Drive::NONE;
|
||||
//task for drive is running --> remove selection
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user