This commit is contained in:
2020-09-21 21:19:58 +02:00
8 changed files with 182 additions and 92 deletions

View File

@ -23,8 +23,6 @@ static uint8_t u8SelectedEntry;
static fd_set selectSet;
//static struct TUI::MenuState menustate;
/**
* \brief app constructor
* \param void
@ -59,22 +57,27 @@ void reHDD::app_logic(void)
FD_SET(fdShredInformPipe[0], &selectSet);
select(FD_SETSIZE, &selectSet, NULL, NULL, NULL);
mxScannDrives.lock();
if( FD_ISSET(fdNewDrivesInformPipe[0], &selectSet))
if(FD_ISSET(fdNewDrivesInformPipe[0], &selectSet))
{
mxScannDrives.lock();
char dummy;
read (fdNewDrivesInformPipe[0],&dummy,1);
filterNewDrives(&listDrives, &listNewDrives); //filter and copy to app logic vector
printDrives(&listDrives);
filterNewDrives(&vecDrives, &vecNewDrives); //filter and copy to app logic vector
printDrives(&vecDrives);
mxScannDrives.unlock();
}
if (FD_ISSET(fdShredInformPipe[0], &selectSet))
if(FD_ISSET(fdShredInformPipe[0], &selectSet))
{
char dummy;
read (fdShredInformPipe[0],&dummy,1);
#ifdef LOG_LEVEL_HIGH
Logger::logThis()->info("got progress signal from a shred task");
#endif
}
ui->updateTUI(&listDrives, u8SelectedEntry);
mxScannDrives.unlock();
//mxScannDrives.lock();
ui->updateTUI(&vecDrives, u8SelectedEntry);
//mxScannDrives.unlock();
} //endless loop
thDevices.join();
thUserInput.join();
@ -111,8 +114,6 @@ void reHDD::ThreadScannDevices()
}
}
void reHDD::ThreadCheckFrozenDrives()
{
while(true)
@ -126,7 +127,7 @@ void reHDD::ThreadCheckFrozenDrives()
}
}
mxScannDrives.unlock();
sleep(5); //sleep 5 sec
sleep(13); //sleep 13 sec
}
}
@ -206,7 +207,19 @@ void reHDD::ThreadShred()
}
}
void reHDD::filterNewDrives(list <Drive>* plistOldDrives, list <Drive>* plistNewDrives)
void reHDD::ThreadDelete()
{
if (getSelectedDrive() != nullptr)
{
Delete::deleteDrive(getSelectedDrive()); //blocking, no thread
getSelectedDrive()->state = Drive::TaskState::NONE; //delete finished
getSelectedDrive()->bWasDeleteted = true;
Logger::logThis()->info("Finished delete for: " + getSelectedDrive()->getModelName() + "-" + getSelectedDrive()->getSerial());
ui->updateTUI(&vecDrives, u8SelectedEntry);
}
}
void reHDD::filterNewDrives(vector <Drive>* pvecOldDrives, vector <Drive>* pvecNewDrives)
{
list <Drive>::iterator itOld; //Iterator for current (old) drive list
list <Drive>::iterator itNew; //Iterator for new drive list that was created from to scann thread
@ -283,18 +296,19 @@ void reHDD::searchDrives(list <Drive>* plistDrives)
char * cLine = NULL;
size_t len = 0;
FILE* outputfileHwinfo = popen("hwinfo --short --disk", "r");
FILE* outputfileHwinfo = popen("ls -1 /dev/sd*", "r");
if (outputfileHwinfo == NULL)
{
Logger::logThis()->error("Unable to scann attached drives");
exit(EXIT_FAILURE);
}
while ((getline(&cLine, &len, outputfileHwinfo)) != -1)
{
if (string(cLine).find("/dev/sd") != string::npos)
if (string(cLine).length() == 9)
{
Drive* tmpDrive = new Drive(string(cLine).substr (2,8));
Drive* tmpDrive = new Drive(string(cLine).substr(0, 8));
tmpDrive->state = Drive::NONE;
tmpDrive->bIsOffline = false;
plistDrives->push_back(*tmpDrive);
@ -396,7 +410,7 @@ void reHDD::filterIgnoredDrives(list <Drive>* plistDrives)
void reHDD::printDrives(list <Drive>* plistDrives)
{
#ifdef LOG_LEVEL_HIGH
Logger::logThis()->info("------------DRIVES---------------");
Logger::logThis()->info("------------DRIVES START------------");
//cout << "------------DRIVES---------------" << endl;
list <Drive>::iterator it;
uint8_t u8Index = 0;
@ -415,11 +429,10 @@ void reHDD::printDrives(list <Drive>* plistDrives)
cout << endl;*/
ostringstream address;
address << (void const *)&(*it);
Logger::logThis()->info(to_string(u8Index++) + ": " + it->getPath() + " - " + it->getModelFamily() + " - " + it->getSerial() + " @" + address.str());
address << (void const *)&pvecDrives->at(it - pvecDrives->begin());
Logger::logThis()->info(to_string(it - pvecDrives->begin()) + ": " + it->getPath() + " - " + it->getModelFamily() + " - " + it->getSerial() + " @" + address.str());
}
Logger::logThis()->info("---------------------------------");
Logger::logThis()->info("------------DRIVES END--------------");
//cout << "---------------------------------" << endl;
#endif
}
@ -486,10 +499,7 @@ void reHDD::handleEnter()
Logger::logThis()->info("Started delete for: " + getSelectedDrive()->getModelName() + "-" + getSelectedDrive()->getSerial());
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;
Logger::logThis()->info("Finished delete for: " + getSelectedDrive()->getModelName() + "-" + getSelectedDrive()->getSerial());
thread(ThreadDelete).detach();
}
}
}