shred thread
This commit is contained in:
parent
e4b3923f6d
commit
c6a8fd861d
|
@ -1 +1 @@
|
||||||
<mxfile host="app.diagrams.net" modified="2020-04-30T20:05:53.432Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36" etag="5yI57G0tj_AETib5-SCg" version="13.0.4" type="device"><diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">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</diagram></mxfile>
|
<mxfile host="app.diagrams.net" modified="2020-08-23T07:05:27.762Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36" etag="SGyuMJOWQf98SwQRl4R2" version="13.6.4" type="device"><diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">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</diagram></mxfile>
|
Binary file not shown.
|
@ -0,0 +1 @@
|
||||||
|
<mxfile host="app.diagrams.net" modified="2020-08-23T06:57:40.722Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36" etag="hfpQUXi749i-5e3peR6Z" version="13.6.4" type="device"><diagram id="uYiMRnSvU_g0LN3LXuwh" name="Page-1">5Vtbd6M2EP41fkwOkrg+Ojbb3Z5sNo192u4jiRWbXYxcWV7b/fUVRgIL4Usag0jykqBBkmFmvtE3I9FDg/nmNxotZl/JBCc9aE02PTTsQeh6Dv+bCba5ANl+LpjSeJKLQCkYxf9iIbSEdBVP8FLpyAhJWLxQhU8kTfETU2QRpWStdnsmifqri2iKNcHoKUp06V/xhM1yqQ+9Uv4Zx9OZ/GXgBvmdeSQ7izdZzqIJWe+JUNhDA0oIy6/mmwFOMt1JveTjPh24WzwYxSk7ZwD78uOPwA1nv4++jj9B9/4n+7a+ssXTLtlWvjGecAWIJqFsRqYkjZKwlN5QskonOJvW4q2yzy0hCy4EXPgDM7YV1oxWjHDRjM0TcRdvYvZ3NvzaEa3ve3eGGzHzrrGVjZTR7d6grPl9/145bNeS4/L3y17qoN6EaElW9AkfUZb0v4hOMTvSDxbW5ajAZI758/BxFCcRi3+pzxEJ/5wW/UoT8gthxRdYVMz7K0pW4pd60E344948E/7C+6Z2/1kReeNquTNWn3cA/mJT3uRX0+z/aNx/GMup+JPls+X3dB9KEg7QzFfWs5jh0SLaKXbNQ4TqCeJhMWV4c9w+uj7FACQRJyOMwNu6hGsgRLM9pNpWQwaANQaoqEcFUAsqcmxFRYGuIgBrdOQ2pSMANJ20EXbKEGJ7Sgy5hs6JMLJr3WMacwVgevnYgs6MLZ7R2KK7crtmMxX5z7WO/0rr7Ib2KY22ex0WJE7Zcm/m+0xQotsGKroBqhCBSn8HwWP9+UX+BKWfFK/y/10HaVFxtKNjlP8dzSj3D7G0PFK5qgyLDkOccNR1LowCcGYcbWytsRta7O++3YXnrvVcn5l8ySj5iQckIVl0TEmaYf85TpKKaM8k2bQC9dCWbTFxdj8zVsypeD+JpymXzePJZBdSIiF44obLgvFlaIRqXL/GtlabtnW6xyN49qYCwDNOJBzDKxKwXZVJBL53Yl1qmkq4Zy5WyMRiBQPVhaB1fLFCHjzWv5nFCnga9sLRoNbTbqNHnKjeoUWng3GMYh6Io8fdfJkTCOXxyZ2bnjM8BlpR7xCDe0WVYd9hjiDmIMQ5NXaQKNG8zBNK08ku5Pl5yT2wivELGAgiw7A3RUTPxTYIXgnuV0VlV4fP3Th8KPjcFi91urdDmOiQku6tdecmzY0RAj0ovZjswdrKzueHMOPao/A2HIyzyw9F/KCNVEO7ppmf3z3mZ1eW4Q4wP9fwEuD5Sg0JXFvINsz8gi4zv2rZ4RTzs+VOUavMT8fe+2F+7gnm5yDXVVQuNxO6SwSRHho/BhE8F+rwtSXJVwXp4B0QQW3pM04EZdnx4kxwyBngOPy4VND2K6Y2TgVBbd28XvsNLURZ+Msd52J1dKnCI3X0OkDBxrSs19GHb17LDuialvXVwHhwr2b5sA7xreY10HReg5BS0eZ5DSh6GMprpAG6mdigSkkbtZGoQL0a1K91nDeXpsBTaYqN1AM/Iop0OEnxzUK697KjLiaAC00At/DJeuCe7A8sp3mg2/qBPlmwHZD5ovZgRAu4p4Rxy5BsVGA1EgfQgcxVTH/FVyrL87qOfajnav0iu+0/clx3jwPVHX1oNcGFus9fdqujPxh/+fOjnXCBdsXOjunsFupnXER96I3nXtCvqLrmULLbZu4F38CekvncCxk/VhBU95TM516d3lSyobpj0UruhfRy0TvJvdABI5a5l1U5Jtn95MvMF04lpoOg8q0BKAssXce0kbTMBS9Ly6r9A7/5EGDrtL7YPHnnadmBk2VlWga9SkLR/W1kCYgOZ2kaWzKepSEdAxfehvyQaVp1E7LJNI03yw+QczCVX3Gj8D8=</diagram></mxfile>
|
Binary file not shown.
After Width: | Height: | Size: 61 KiB |
|
@ -17,11 +17,12 @@ public:
|
||||||
enum TaskState {NONE,
|
enum TaskState {NONE,
|
||||||
SHRED_SELECTED,
|
SHRED_SELECTED,
|
||||||
SHRED_ACTIVE,
|
SHRED_ACTIVE,
|
||||||
SHRED_FINISHED,
|
|
||||||
DELETE_SELECTED,
|
DELETE_SELECTED,
|
||||||
DELETE_ACTIVE,
|
DELETE_ACTIVE
|
||||||
DELETE_FINISHED
|
|
||||||
} state;
|
} state;
|
||||||
|
|
||||||
|
bool bWasShredded = false;
|
||||||
|
bool bWasDeleteted = false;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
string sPath;
|
string sPath;
|
||||||
|
@ -33,7 +34,7 @@ private:
|
||||||
uint32_t u32PowerOnHours = 0U; //in hours
|
uint32_t u32PowerOnHours = 0U; //in hours
|
||||||
uint32_t u32PowerCycles = 0U;
|
uint32_t u32PowerCycles = 0U;
|
||||||
|
|
||||||
uint8_t u8TaskPercentage = 0U; //in percent for Shred (1 to 100) and Delete (1 OR 100)
|
uint8_t u8TaskPercentage = 0U; //in percent for Shred (1 to 100)
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
|
|
@ -62,10 +62,12 @@ private:
|
||||||
static void addSMARTData(vector <Drive>* pvecDrives);
|
static void addSMARTData(vector <Drive>* pvecDrives);
|
||||||
static void ThreadScannDevices();
|
static void ThreadScannDevices();
|
||||||
static void ThreadUserInput();
|
static void ThreadUserInput();
|
||||||
static void handleArrowKey(TUI::UserInput userInput);
|
static void ThreadShred();
|
||||||
|
static void handleArrowKey(TUI::UserInput userInput);
|
||||||
static void handleEnter();
|
static void handleEnter();
|
||||||
static void handleESC();
|
static void handleESC();
|
||||||
static void handleAbort();
|
static void handleAbort();
|
||||||
|
static void checkShredComplete(vector <Drive>* pvecDrives);
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -15,7 +15,7 @@ class Shred
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static void shredDrive(Drive* drive);
|
static void shredDrive(Drive* drive, int* fdInformPipeWrite);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Shred(void);
|
Shred(void);
|
||||||
|
|
|
@ -55,7 +55,7 @@ private:
|
||||||
static void centerTitle(WINDOW *pwin, const char * title);
|
static void centerTitle(WINDOW *pwin, const char * title);
|
||||||
static WINDOW *createOverViewWindow( int iXSize, int iYSize);
|
static WINDOW *createOverViewWindow( int iXSize, int iYSize);
|
||||||
static WINDOW *createDetailViewWindow( int iXSize, int iYSize, int iXStart, Drive drive);
|
static WINDOW *createDetailViewWindow( int iXSize, int iYSize, int iXStart, Drive drive);
|
||||||
static WINDOW *createEntryWindow(int iXSize, int iYSize, int iXStart, int iYStart,string sModelFamily, string sModelName, string sCapacity, bool bSelected);
|
static WINDOW *createEntryWindow(int iXSize, int iYSize, int iXStart, int iYStart,string sModelFamily, string sModelName, string sCapacity, string sState, bool bSelected);
|
||||||
static WINDOW *createSystemStats(int iXSize, int iYSize, int iYStart);
|
static WINDOW *createSystemStats(int iXSize, int iYSize, int iYStart);
|
||||||
static WINDOW *createMenuView(int iXSize, int iYSize, int iXStart, int iYStart, struct MenuState menustate);
|
static WINDOW *createMenuView(int iXSize, int iYSize, int iXStart, int iYStart, struct MenuState menustate);
|
||||||
static WINDOW *createDialog(int iXSize, int iYSize, int iXStart, int iYStart, string selectedTask, string optionA, string optionB);
|
static WINDOW *createDialog(int iXSize, int iYSize, int iXStart, int iYStart, string selectedTask, string optionA, string optionB);
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
echo "starting SHRED DUMMY"
|
echo "starting SHRED DUMMY"
|
||||||
|
|
||||||
for i in {0..100..10}
|
for i in {0..100..20}
|
||||||
do
|
do
|
||||||
echo "DUMMY shred $i%"
|
echo "DUMMY shred $i%"
|
||||||
sleep 1
|
sleep 1
|
||||||
|
|
|
@ -7,9 +7,9 @@
|
||||||
|
|
||||||
#include "../include/reHDD.h"
|
#include "../include/reHDD.h"
|
||||||
|
|
||||||
static int fdSearchDrives[2];//File descriptor for pipe that informs if new drives are found
|
static int fdNewDrivesInformPipe[2];//File descriptor for pipe that informs if new drives are found
|
||||||
|
|
||||||
static int fdShred[2];//File descriptor for pipe that informs if a wipe thread signals
|
static int fdShredInformPipe[2];//File descriptor for pipe that informs if a wipe thread signals
|
||||||
|
|
||||||
static std::mutex mxScannDrives;
|
static std::mutex mxScannDrives;
|
||||||
|
|
||||||
|
@ -47,38 +47,42 @@ void reHDD::app_logic(void)
|
||||||
ui = new TUI();
|
ui = new TUI();
|
||||||
ui->initTUI();
|
ui->initTUI();
|
||||||
|
|
||||||
pipe(fdSearchDrives);
|
pipe(fdNewDrivesInformPipe);
|
||||||
pipe(fdShred);
|
pipe(fdShredInformPipe);
|
||||||
|
|
||||||
|
|
||||||
FD_ZERO(&selectSet);
|
|
||||||
FD_SET(fdSearchDrives[0], &selectSet);
|
|
||||||
FD_SET(fdShred[0], &selectSet);
|
|
||||||
|
|
||||||
thread thDevices(ThreadScannDevices); //start thread that scanns for drives
|
thread thDevices(ThreadScannDevices); //start thread that scanns for drives
|
||||||
thread thUserInput(ThreadUserInput); //start thread that reads user input
|
thread thUserInput(ThreadUserInput); //start thread that reads user input
|
||||||
|
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
|
FD_ZERO(&selectSet);
|
||||||
|
FD_SET(fdNewDrivesInformPipe[0], &selectSet);
|
||||||
|
FD_SET(fdShredInformPipe[0], &selectSet);
|
||||||
|
|
||||||
select(FD_SETSIZE, &selectSet, NULL, NULL, NULL);
|
select(FD_SETSIZE, &selectSet, NULL, NULL, NULL);
|
||||||
|
|
||||||
if( FD_ISSET(fdSearchDrives[0], &selectSet))
|
if( FD_ISSET(fdNewDrivesInformPipe[0], &selectSet))
|
||||||
{
|
{
|
||||||
char dummy;
|
char dummy;
|
||||||
read (fdSearchDrives[0],&dummy,1);
|
read (fdNewDrivesInformPipe[0],&dummy,1);
|
||||||
mxScannDrives.lock();
|
mxScannDrives.lock();
|
||||||
|
|
||||||
filterNewDrives(&vecDrives, &vecNewDrives); //filter and copy to app logic vector
|
filterNewDrives(&vecDrives, &vecNewDrives); //filter and copy to app logic vector
|
||||||
mxScannDrives.unlock();
|
mxScannDrives.unlock();
|
||||||
//TODO update UI
|
}
|
||||||
|
|
||||||
ui->updateTUI(&vecDrives, i32SelectedEntry);
|
if (FD_ISSET(fdShredInformPipe[0], &selectSet))
|
||||||
}
|
|
||||||
else if (FD_ISSET(fdShred[0], &selectSet))
|
|
||||||
{
|
{
|
||||||
cout << "shred signal" << endl;
|
char dummy;
|
||||||
//TODO update percantage & state
|
read (fdShredInformPipe[0],&dummy,1);
|
||||||
//TODO update ui
|
|
||||||
|
checkShredComplete(&vecDrives);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ui->updateTUI(&vecDrives, i32SelectedEntry);
|
||||||
|
|
||||||
} //endless loop
|
} //endless loop
|
||||||
thDevices.join();
|
thDevices.join();
|
||||||
thUserInput.join();
|
thUserInput.join();
|
||||||
|
@ -95,7 +99,7 @@ void reHDD::ThreadScannDevices()
|
||||||
filterIgnoredDrives(&vecNewDrives); //filter out ignored drives
|
filterIgnoredDrives(&vecNewDrives); //filter out ignored drives
|
||||||
addSMARTData(&vecNewDrives); //add S.M.A.R.T. Data to the drives
|
addSMARTData(&vecNewDrives); //add S.M.A.R.T. Data to the drives
|
||||||
mxScannDrives.unlock();
|
mxScannDrives.unlock();
|
||||||
write (fdSearchDrives[1], "A",1);
|
write(fdNewDrivesInformPipe[1], "A",1);
|
||||||
sleep(5); //sleep 5 sec
|
sleep(5); //sleep 5 sec
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -157,6 +161,11 @@ void reHDD::ThreadUserInput()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void reHDD::ThreadShred()
|
||||||
|
{
|
||||||
|
Shred::shredDrive(&vecDrives.at(i32SelectedEntry), &fdShredInformPipe[1]);
|
||||||
|
}
|
||||||
|
|
||||||
void reHDD::filterNewDrives(vector <Drive>* pvecOldDrives, vector <Drive>* pvecNewDrives)
|
void reHDD::filterNewDrives(vector <Drive>* pvecOldDrives, vector <Drive>* pvecNewDrives)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -171,9 +180,11 @@ void reHDD::filterNewDrives(vector <Drive>* pvecOldDrives, vector <Drive>* pvecN
|
||||||
if(itOld->getSerial() == itNew->getSerial())
|
if(itOld->getSerial() == itNew->getSerial())
|
||||||
{
|
{
|
||||||
bOldDriveIsOffline = false;
|
bOldDriveIsOffline = false;
|
||||||
// cout << "already online drive found: " << itOld->getPath() << endl;
|
// copy old drive instance date in new instance
|
||||||
itNew->state = itOld->state;
|
itNew->state = itOld->state; //copy state
|
||||||
itNew->setTaskPercentage(itOld->getTaskPercentage());
|
itNew->setTaskPercentage(itOld->getTaskPercentage()); //copy percentage
|
||||||
|
itNew->bWasDeleteted = itOld->bWasDeleteted; //copy finished task delete
|
||||||
|
itNew->bWasShredded = itOld->bWasShredded; //copy finished task shred
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -377,9 +388,7 @@ void reHDD::handleEnter()
|
||||||
{
|
{
|
||||||
SELECTED_DRIVE.state = Drive::TaskState::SHRED_ACTIVE;
|
SELECTED_DRIVE.state = Drive::TaskState::SHRED_ACTIVE;
|
||||||
//task for drive is running --> don´t show more task options
|
//task for drive is running --> don´t show more task options
|
||||||
|
thread(ThreadShred).detach();
|
||||||
//TODO start shredding
|
|
||||||
Shred::shredDrive(&vecDrives.at(i32SelectedEntry));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(SELECTED_DRIVE.state == Drive::TaskState::DELETE_SELECTED)
|
if(SELECTED_DRIVE.state == Drive::TaskState::DELETE_SELECTED)
|
||||||
|
@ -413,4 +422,19 @@ void reHDD::handleAbort()
|
||||||
SELECTED_DRIVE.state = Drive::NONE;
|
SELECTED_DRIVE.state = Drive::NONE;
|
||||||
//task for drive is running --> remove selection
|
//task for drive is running --> remove selection
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void reHDD::checkShredComplete(vector <Drive>* pvecDrives)
|
||||||
|
{
|
||||||
|
vector <Drive>::iterator it;
|
||||||
|
for (it = pvecDrives->begin(); it != pvecDrives->end(); ++it)
|
||||||
|
{
|
||||||
|
if(it->getTaskPercentage() == 100 )
|
||||||
|
{
|
||||||
|
it->bWasShredded = true; //mark this drive as shredded
|
||||||
|
it->setTaskPercentage(0); //reset for an other shredding
|
||||||
|
it->state = Drive::NONE; //reset for an other task#
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -12,7 +12,7 @@
|
||||||
* \param pointer of Drive instance
|
* \param pointer of Drive instance
|
||||||
* \return void
|
* \return void
|
||||||
*/
|
*/
|
||||||
void Shred::shredDrive(Drive* drive)
|
void Shred::shredDrive(Drive* drive, int* fdInformPipeWrite)
|
||||||
|
|
||||||
{
|
{
|
||||||
size_t len = 0; //lenght of found line
|
size_t len = 0; //lenght of found line
|
||||||
|
@ -24,34 +24,27 @@ void Shred::shredDrive(Drive* drive)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DRYRUN
|
#ifdef DRYRUN
|
||||||
cout << "dryrun for " << drive->getPath() << endl;
|
//cout << "dryrun for " << drive->getPath() << endl;
|
||||||
// string sCMD = ("ping ::1 -c 5");
|
|
||||||
string sCMD = ("bash shred_dummy.sh");
|
string sCMD = ("bash shred_dummy.sh");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char* cpComand = sCMD.c_str();
|
const char* cpComand = sCMD.c_str();
|
||||||
cout << "shred: " << cpComand << endl;
|
//cout << "shred: " << cpComand << endl;
|
||||||
|
|
||||||
FILE* shredCmdOutput = popen(cpComand, "r");
|
FILE* shredCmdOutput = popen(cpComand, "r");
|
||||||
|
|
||||||
while ((getline(&cLine, &len, shredCmdOutput)) != -1)
|
while ((getline(&cLine, &len, shredCmdOutput)) != -1)
|
||||||
{
|
{
|
||||||
string sLine = string(cLine);
|
string sLine = string(cLine);
|
||||||
|
string search("%");
|
||||||
|
size_t found = sLine.find(search);
|
||||||
// TODO parse percentage
|
if (found!=string::npos)
|
||||||
|
{
|
||||||
string search("%");
|
sLine.erase(0, sLine.find("%")-3);
|
||||||
size_t found = sLine.find(search);
|
sLine.erase(std::remove(sLine.begin(), sLine.end(), '\n'), sLine.end());
|
||||||
if (found!=string::npos){
|
drive->setTaskPercentage(stoi(sLine));
|
||||||
uint8_t percent = 0U;
|
write(*fdInformPipeWrite, "A",1);
|
||||||
sLine.erase(0, sLine.find("%")-2);
|
}
|
||||||
sLine.erase(std::remove(sLine.begin(), sLine.end(), '\n'), sLine.end());
|
|
||||||
int i = std::stoi(sLine);
|
|
||||||
cout << i << " percent" << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
fclose(shredCmdOutput);
|
fclose(shredCmdOutput);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
* @date 03.08.2020
|
* @date 03.08.2020
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../../include/reHDD.h"
|
#include "../include/reHDD.h"
|
||||||
|
|
||||||
|
|
||||||
TUI::TUI(void)
|
TUI::TUI(void)
|
||||||
|
@ -78,11 +78,39 @@ void TUI::updateTUI(vector <Drive>* pvecDrives, int32_t i32SelectedEntry)
|
||||||
|
|
||||||
if(i32SelectedEntry == (it - pvecDrives->begin()))
|
if(i32SelectedEntry == (it - pvecDrives->begin()))
|
||||||
{
|
{
|
||||||
bSelectedEntry = true; //mark this drive in entries list
|
bSelectedEntry = true; //mark this drive in entries list
|
||||||
displaySelectedDrive(pvecDrives->at(i32SelectedEntry), stdscrX, stdscrY);
|
displaySelectedDrive(pvecDrives->at(i32SelectedEntry), stdscrX, stdscrY);
|
||||||
}
|
}
|
||||||
|
|
||||||
WINDOW * tmp = createEntryWindow( ((int)(stdscrX/3) - 2), 5, 3, (5* (it - pvecDrives->begin()) )+3, sModelFamily, sModelName, sCapacity, bSelectedEntry);
|
string sState = " ";
|
||||||
|
|
||||||
|
switch (it->state)
|
||||||
|
{
|
||||||
|
case Drive::SHRED_ACTIVE:
|
||||||
|
sState = "Shredding: " + to_string(it->getTaskPercentage()) + "%";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Drive::DELETE_ACTIVE:
|
||||||
|
sState = "Deleting ...";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Drive::NONE:
|
||||||
|
case Drive::SHRED_SELECTED:
|
||||||
|
case Drive::DELETE_SELECTED:
|
||||||
|
if (it->bWasDeleteted)
|
||||||
|
{
|
||||||
|
sState = "DELETED"; //mark drive as deleted previously
|
||||||
|
}
|
||||||
|
if (it->bWasShredded)
|
||||||
|
{
|
||||||
|
sState = "SHREDDED"; //mark drive as shreded previously, overwrite if deleted
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
WINDOW * tmp = createEntryWindow( ((int)(stdscrX/3) - 2), 5, 3, (5* (it - pvecDrives->begin()) )+3, sModelFamily, sModelName, sCapacity, sState, bSelectedEntry);
|
||||||
wrefresh(tmp);
|
wrefresh(tmp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -212,7 +240,7 @@ WINDOW* TUI::createDetailViewWindow( int iXSize, int iYSize, int iXStart, Drive
|
||||||
return newWindow;
|
return newWindow;
|
||||||
}
|
}
|
||||||
|
|
||||||
WINDOW* TUI::createEntryWindow(int iXSize, int iYSize, int iXStart, int iYStart, string sModelFamily, string sModelName, string sCapacity, bool bSelected)
|
WINDOW* TUI::createEntryWindow(int iXSize, int iYSize, int iXStart, int iYStart, string sModelFamily, string sModelName, string sCapacity, string sState, bool bSelected)
|
||||||
{
|
{
|
||||||
WINDOW *newWindow;
|
WINDOW *newWindow;
|
||||||
newWindow = newwin(iYSize, iXSize, iYStart, iXStart);
|
newWindow = newwin(iYSize, iXSize, iYStart, iXStart);
|
||||||
|
@ -236,6 +264,8 @@ WINDOW* TUI::createEntryWindow(int iXSize, int iYSize, int iXStart, int iYStart,
|
||||||
mvwaddstr(newWindow,2, 1, sModelName.c_str());
|
mvwaddstr(newWindow,2, 1, sModelName.c_str());
|
||||||
mvwaddstr(newWindow,3, 1, sCapacity.c_str());
|
mvwaddstr(newWindow,3, 1, sCapacity.c_str());
|
||||||
|
|
||||||
|
mvwaddstr(newWindow,2, iXSize-sState.length()-5, sState.c_str());
|
||||||
|
|
||||||
keypad(newWindow, TRUE);
|
keypad(newWindow, TRUE);
|
||||||
|
|
||||||
return newWindow;
|
return newWindow;
|
||||||
|
@ -345,9 +375,6 @@ void TUI::displaySelectedDrive(Drive drive, int stdscrX, int stdscrY)
|
||||||
case Drive::SHRED_SELECTED : //shred task selected for this drive
|
case Drive::SHRED_SELECTED : //shred task selected for this drive
|
||||||
menustate.bConfirmShred = true;
|
menustate.bConfirmShred = true;
|
||||||
break;
|
break;
|
||||||
case Drive::DELETE_FINISHED : //delete task finished for this drive
|
|
||||||
case Drive::SHRED_FINISHED : //shred task finished for this drive
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
Loading…
Reference in New Issue