merge
This commit is contained in:
commit
5e190ba08f
|
@ -0,0 +1,24 @@
|
|||
#! /bin/bash
|
||||
|
||||
echo starting astyle for $PWD
|
||||
|
||||
astyle --style=gnu src/*.cpp
|
||||
rm -f src/*.orig
|
||||
|
||||
astyle --style=gnu src/shred/*.cpp
|
||||
rm -f src/shred/*.orig
|
||||
|
||||
astyle --style=gnu src/logger/*.cpp
|
||||
rm -f src/logger/*.orig
|
||||
|
||||
|
||||
astyle --style=gnu include/*.h
|
||||
rm -f include//*.orig
|
||||
|
||||
astyle --style=gnu include//shred/*.h
|
||||
rm -f include//shred/*.orig
|
||||
|
||||
astyle --style=gnu include//logger/*.h
|
||||
rm -f include//logger/*.orig
|
||||
|
||||
echo finished astyle for $PWD
|
|
@ -10,8 +10,6 @@
|
|||
|
||||
#define REHDD_VERSION "bV0.1.1"
|
||||
|
||||
//#define DRYRUN
|
||||
|
||||
// Drive handling Settings
|
||||
#define WORSE_HOURS 19200 //mark drive if at this limit or beyond
|
||||
#define WORSE_POWERUP 10000 //mark drive if at this limit or beyond
|
||||
|
@ -25,6 +23,11 @@
|
|||
#define SOFTWARE_VERSION "alpha"
|
||||
#define HARDWARE_VERSION "generic"
|
||||
|
||||
// Logic
|
||||
//#define DRYRUN //don´t touch the drives
|
||||
#define FROZEN_ALERT //show alert if drive is frozen
|
||||
|
||||
|
||||
#define LOG_LEVEL_HIGH //log everything, like drive scann thread
|
||||
#ifndef LOG_LEVEL_HIGH
|
||||
#define LOG_LEVEL_LOW //log only user actions and tasks
|
||||
|
@ -86,6 +89,7 @@ private:
|
|||
static void ThreadScannDevices();
|
||||
static void ThreadUserInput();
|
||||
static void ThreadShred();
|
||||
static void ThreadDelete();
|
||||
static void ThreadCheckFrozenDrives();
|
||||
static void handleArrowKey(TUI::UserInput userInput);
|
||||
static void handleEnter();
|
||||
|
|
|
@ -45,22 +45,23 @@ private:
|
|||
static string sRamUsage;
|
||||
static string sLocalTime;
|
||||
|
||||
|
||||
WINDOW* overview;
|
||||
WINDOW* systemview;
|
||||
WINDOW* detailview;
|
||||
WINDOW* menuview;
|
||||
WINDOW* dialog;
|
||||
WINDOW* smartWarning;
|
||||
|
||||
static void centerTitle(WINDOW *pwin, const char * title);
|
||||
static WINDOW *createOverViewWindow( int iXSize, int iYSize);
|
||||
static WINDOW *createDetailViewWindow( int iXSize, int iYSize, int iXStart, Drive drive);
|
||||
static WINDOW *overwriteDetailViewWindow( int iXSize, int iYSize, int iXStart);
|
||||
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 iXStart, int iYStart);
|
||||
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* createFrozenWarning(int iXSize, int iYSize, int iXStart, int iYStart, string sPath, string sModelFamily, string sModelName, string sSerial);
|
||||
static WINDOW* createFrozenWarning(int iXSize, int iYSize, int iXStart, int iYStart, string sPath, string sModelFamily, string sModelName, string sSerial, string sProgress);
|
||||
static WINDOW* createSmartWarning(int iXSize, int iYSize, int iXStart, int iYStart, string sPath, uint32_t u32PowerOnHours, uint32_t u32PowerCycles, uint32_t u32ErrorCount);
|
||||
|
||||
void displaySelectedDrive(Drive drive, int stdscrX, int stdscrY);
|
||||
|
||||
|
|
6
makefile
6
makefile
|
@ -167,6 +167,7 @@ clean:
|
|||
@echo "Deleting directories"
|
||||
@$(RM) -r build
|
||||
@$(RM) -r bin
|
||||
@$(RM) -f reHDD.log
|
||||
|
||||
# Main rule, checks the executable and symlinks to the output
|
||||
all: $(BIN_PATH)/$(BIN_NAME)
|
||||
|
@ -199,6 +200,7 @@ $(BUILD_PATH)/%.o: $(SRC_PATH)/%.$(SRC_EXT)
|
|||
docs:
|
||||
@$(RM) -r $(DOCDIR)/html
|
||||
@doxygen $(DOCDIR)/doxyfile
|
||||
|
||||
|
||||
|
||||
.PHONY: style
|
||||
style:
|
||||
@bash astyle.sh
|
||||
|
|
|
@ -21,6 +21,7 @@ void Delete::deleteDrive(Drive* drive)
|
|||
#ifndef DRYRUN
|
||||
string sCMD = ("wipefs -af ");
|
||||
sCMD.append(drive->getPath());
|
||||
sCMD.append("*");
|
||||
#endif
|
||||
|
||||
#ifdef DRYRUN
|
||||
|
|
|
@ -69,14 +69,19 @@ string Drive::sErrorCountToText()
|
|||
|
||||
string Drive::sPowerOnHoursToText()
|
||||
{
|
||||
double dDays = 0U;
|
||||
double dYears = 0U;
|
||||
uint32_t u32Hours = getPowerOnHours();
|
||||
stringstream stream;
|
||||
stringstream streamDays;
|
||||
stringstream streamYears;
|
||||
|
||||
dDays = (double) ((double)u32Hours/(double)24U);
|
||||
dYears = (double) ((double)u32Hours/(double)8760U);
|
||||
|
||||
stream << fixed << setprecision(2) << dYears;
|
||||
string sRet = to_string(getPowerOnHours()) + " hours or " + stream.str() + " years";
|
||||
streamDays << fixed << setprecision(0) << dDays;
|
||||
streamYears << fixed << setprecision(1) << dYears;
|
||||
|
||||
string sRet = to_string(getPowerOnHours()) + " hours or " + streamDays.str() + " days or " + streamYears.str() + " years";
|
||||
|
||||
return sRet;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
155
src/tui.cpp
155
src/tui.cpp
|
@ -53,18 +53,18 @@ void TUI::initTUI()
|
|||
void TUI::updateTUI(list <Drive>* plistDrives, uint8_t u8SelectedEntry)
|
||||
{
|
||||
mxUIrefresh.lock();
|
||||
int stdscrX, stdscrY;
|
||||
getmaxyx(stdscr, stdscrY, stdscrX);
|
||||
uint16_t u16StdscrX, u16StdscrY;
|
||||
getmaxyx(stdscr, u16StdscrY, u16StdscrX);
|
||||
|
||||
init_pair(COLOR_AREA_STDSCR,COLOR_WHITE, COLOR_BLUE);
|
||||
wbkgd(stdscr, COLOR_PAIR(COLOR_AREA_STDSCR));
|
||||
|
||||
refresh();
|
||||
|
||||
overview=createOverViewWindow((int)(stdscrX/3), (stdscrY-15));
|
||||
overview=createOverViewWindow((int)(u16StdscrX/3), (u16StdscrY-3));
|
||||
wrefresh(overview);
|
||||
|
||||
systemview=createSystemStats((int)(stdscrX/3), 10, (stdscrY-11));
|
||||
systemview=createSystemStats((int)(u16StdscrX/3), 10, u16StdscrX-(int)(u16StdscrX/3)-2, (u16StdscrY-11 ));
|
||||
wrefresh(systemview);
|
||||
|
||||
delwin(detailview);
|
||||
|
@ -83,7 +83,14 @@ void TUI::updateTUI(list <Drive>* plistDrives, uint8_t u8SelectedEntry)
|
|||
if(u8SelectedEntry == u8Index)
|
||||
{
|
||||
bSelectedEntry = true; //mark this drive in entries list
|
||||
displaySelectedDrive(*it, stdscrX, stdscrY);
|
||||
displaySelectedDrive(pvecDrives->at(u8SelectedEntry), u16StdscrX, u16StdscrY);
|
||||
|
||||
if((it->getPowerOnHours() >= WORSE_HOURS) || (it->getPowerCycles() >= WORSE_POWERUP) || (it->getErrorCount() > 0))
|
||||
{
|
||||
// smart values are bad --> show warning
|
||||
smartWarning=createSmartWarning(50, 10, ((u16StdscrX)-(int)(u16StdscrX/2)+35),(int)(u16StdscrY/2)-5, it->getPath(), it->getPowerOnHours(), it->getPowerCycles(), it->getErrorCount());
|
||||
wrefresh(smartWarning);
|
||||
}
|
||||
}
|
||||
|
||||
stringstream stream;
|
||||
|
@ -113,14 +120,21 @@ void TUI::updateTUI(list <Drive>* plistDrives, uint8_t u8SelectedEntry)
|
|||
}
|
||||
break;
|
||||
case Drive::FROZEN:
|
||||
dialog=createFrozenWarning(70, 16, ((stdscrX)-(int)(stdscrX/2)-35),(int)(stdscrY/2)-8, it->getPath(), it->getModelFamily(), it->getModelName(), it->getSerial());
|
||||
wrefresh(dialog);
|
||||
stream << fixed << setprecision(2) << (it->getTaskPercentage());
|
||||
#ifdef FROZEN_ALERT
|
||||
if(bSelectedEntry)
|
||||
{
|
||||
dialog=createFrozenWarning(70, 16, ((u16StdscrX)-(int)(u16StdscrX/2)-20),(int)(u16StdscrY/2)-8, it->getPath(), it->getModelFamily(), it->getModelName(), it->getSerial(), stream.str() + "%");
|
||||
wrefresh(dialog);
|
||||
}
|
||||
#endif
|
||||
sState = "FROZEN " + stream.str() + "%"; //mark drive as frozen and reached progress
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
WINDOW * tmp = createEntryWindow( ((int)(stdscrX/3) - 2), 5, 3, (5* (u8Index) )+3, sModelFamily, sModelName, sCapacity, sState, bSelectedEntry);
|
||||
WINDOW * tmp = createEntryWindow( ((int)(u16StdscrX/3) - 2), 5, 3, (5* (it - pvecDrives->begin()) )+3, sModelFamily, sModelName, sCapacity, sState, bSelectedEntry);
|
||||
wrefresh(tmp);
|
||||
u8Index++;
|
||||
}//end loop though drives
|
||||
|
@ -136,10 +150,10 @@ void TUI::updateTUI(list <Drive>* plistDrives, uint8_t u8SelectedEntry)
|
|||
menustate.bDelete = false;
|
||||
menustate.bShred = false;
|
||||
|
||||
menuview=createMenuView(((stdscrX)-(int)(stdscrX/3)-7), 10, (int)(stdscrX/3)+5,(stdscrY-11), menustate);
|
||||
menuview=createMenuView(((u16StdscrX)-(int)(u16StdscrX/3)-7), 10, (int)(u16StdscrX/3)+5,(u16StdscrY-11), menustate);
|
||||
wrefresh(menuview);
|
||||
|
||||
detailview=overwriteDetailViewWindow(((stdscrX)-(int)(stdscrX/3)-7), (stdscrY-15), (int)(stdscrX/3)+5);
|
||||
detailview=overwriteDetailViewWindow(((u16StdscrX)-(int)(u16StdscrX/3)-7), (u16StdscrY-15), (int)(u16StdscrX/3)+5);
|
||||
wrefresh(detailview);
|
||||
}
|
||||
|
||||
|
@ -234,38 +248,9 @@ WINDOW* TUI::createDetailViewWindow( int iXSize, int iYSize, int iXStart, Drive
|
|||
|
||||
attroff(COLOR_PAIR(COLOR_AREA_DETAIL));
|
||||
|
||||
if(drive.getPowerOnHours() >= WORSE_HOURS)
|
||||
{
|
||||
mvwaddstr(newWindow,u16Line++, 3, "------------> WARNING: OPERATING HOURS <-----------");
|
||||
mvwaddstr(newWindow,u16Line++, 3, sPowerOnHours.c_str());
|
||||
mvwaddstr(newWindow,u16Line++, 3, "---------------------------------------------------");
|
||||
}
|
||||
else
|
||||
{
|
||||
mvwaddstr(newWindow,u16Line++, 3, sPowerOnHours.c_str());
|
||||
}
|
||||
|
||||
if(drive.getPowerCycles() >= WORSE_POWERUP)
|
||||
{
|
||||
mvwaddstr(newWindow,u16Line++, 3, "------------> WARNING: POWER-ON <------------------");
|
||||
mvwaddstr(newWindow,u16Line++, 3, sPowerCycle.c_str());
|
||||
mvwaddstr(newWindow,u16Line++, 3, "---------------------------------------------------");
|
||||
}
|
||||
else
|
||||
{
|
||||
mvwaddstr(newWindow,u16Line++, 3, sPowerCycle.c_str());
|
||||
}
|
||||
|
||||
if(drive.getErrorCount() > 0)
|
||||
{
|
||||
mvwaddstr(newWindow,u16Line++, 3, "------------> WARNING: S.M.A.R.T ERROR <-----------");
|
||||
mvwaddstr(newWindow,u16Line++, 3, sErrorCount.c_str());
|
||||
mvwaddstr(newWindow,u16Line++, 3, "---------------------------------------------------");
|
||||
}
|
||||
else
|
||||
{
|
||||
mvwaddstr(newWindow,u16Line++, 3, sErrorCount.c_str());
|
||||
}
|
||||
mvwaddstr(newWindow,u16Line++, 3, sPowerOnHours.c_str());
|
||||
mvwaddstr(newWindow,u16Line++, 3, sPowerCycle.c_str());
|
||||
mvwaddstr(newWindow,u16Line++, 3, sErrorCount.c_str());
|
||||
|
||||
return newWindow;
|
||||
}
|
||||
|
@ -332,10 +317,10 @@ WINDOW* TUI::createEntryWindow(int iXSize, int iYSize, int iXStart, int iYStart,
|
|||
return newWindow;
|
||||
}
|
||||
|
||||
WINDOW* TUI::createSystemStats(int iXSize, int iYSize, int iYStart)
|
||||
WINDOW* TUI::createSystemStats(int iXSize, int iYSize, int iXStart, int iYStart)
|
||||
{
|
||||
WINDOW *newWindow;
|
||||
newWindow = newwin(iYSize, iXSize, iYStart, 2);
|
||||
newWindow = newwin(iYSize, iXSize, iYStart, iXStart);
|
||||
|
||||
wbkgd(newWindow, COLOR_PAIR(COLOR_AREA_OVERVIEW));
|
||||
box(newWindow, ACS_VLINE, ACS_HLINE);
|
||||
|
@ -350,7 +335,19 @@ WINDOW* TUI::createSystemStats(int iXSize, int iYSize, int iYStart)
|
|||
strftime(buffer,sizeof(buffer),"Date: %d-%m-%Y Time: %H:%M",timeinfo);
|
||||
string time(buffer);
|
||||
|
||||
mvwaddstr(newWindow,2, 2, time.c_str());
|
||||
string sLine01 = "reHDD - hard drive refurbishing tool";
|
||||
string sLine02 = "Version: " + string(REHDD_VERSION);
|
||||
string sLine03 = "Available under GPL 3.0";
|
||||
string sLine04 = "https://git.mosad.xyz/localhorst/reHDD";
|
||||
|
||||
uint16_t u16Line = 2;
|
||||
|
||||
mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine01.size()/2), sLine01.c_str());
|
||||
mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine01.size()/2), sLine02.c_str());
|
||||
mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine01.size()/2), sLine03.c_str());
|
||||
mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine01.size()/2), sLine04.c_str());
|
||||
u16Line++;
|
||||
mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine01.size()/2), time.c_str());
|
||||
|
||||
return newWindow;
|
||||
}
|
||||
|
@ -365,20 +362,24 @@ WINDOW* TUI::createMenuView(int iXSize, int iYSize, int iXStart, int iYStart, st
|
|||
|
||||
centerTitle(newWindow, "Controls");
|
||||
|
||||
|
||||
uint16_t u16Line = 2;
|
||||
|
||||
if(menustate.bAbort)
|
||||
{
|
||||
mvwaddstr(newWindow,u16Line++, 3, "Press A for Abort");
|
||||
string sLineTmp = "Press A for Abort";
|
||||
mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLineTmp.size()/2), sLineTmp.c_str());
|
||||
u16Line++;
|
||||
}
|
||||
if(menustate.bShred)
|
||||
{
|
||||
mvwaddstr(newWindow,u16Line++, 3, "Press S for Shred");
|
||||
string sLineTmp = "Press S for Shred ";
|
||||
mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLineTmp.size()/2), sLineTmp.c_str());
|
||||
u16Line++;
|
||||
}
|
||||
if(menustate.bDelete)
|
||||
{
|
||||
mvwaddstr(newWindow,u16Line++, 3, "Press D for Delete");
|
||||
string sLineTmp = "Press D for Delete";
|
||||
mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLineTmp.size()/2), sLineTmp.c_str());
|
||||
}
|
||||
|
||||
return newWindow;
|
||||
|
@ -394,14 +395,15 @@ WINDOW* TUI::createDialog(int iXSize, int iYSize, int iXStart, int iYStart, stri
|
|||
|
||||
centerTitle(newWindow, task.c_str());
|
||||
|
||||
uint16_t u16Line = 2;
|
||||
mvwaddstr(newWindow,u16Line++, 3, optionA.c_str());
|
||||
mvwaddstr(newWindow,u16Line++, 3, optionB.c_str());
|
||||
uint16_t u16Line = 3;
|
||||
mvwaddstr(newWindow,u16Line++, (iXSize/2)-(optionA.size()/2), optionA.c_str());
|
||||
u16Line++;
|
||||
mvwaddstr(newWindow,u16Line++, (iXSize/2)-(optionB.size()/2), optionB.c_str());
|
||||
|
||||
return newWindow;
|
||||
}
|
||||
|
||||
WINDOW* TUI::createFrozenWarning(int iXSize, int iYSize, int iXStart, int iYStart, string sPath, string sModelFamily, string sModelName, string sSerial)
|
||||
WINDOW* TUI::createFrozenWarning(int iXSize, int iYSize, int iXStart, int iYStart, string sPath, string sModelFamily, string sModelName, string sSerial, string sProgress)
|
||||
{
|
||||
WINDOW *newWindow;
|
||||
newWindow = newwin(iYSize, iXSize, iYStart, iXStart);
|
||||
|
@ -411,6 +413,7 @@ WINDOW* TUI::createFrozenWarning(int iXSize, int iYSize, int iXStart, int iYStar
|
|||
|
||||
string sHeader = "Drive " + sPath + " is frozen";
|
||||
string sLine01 = "Please detach this drive and check it manually:";
|
||||
string sShredState = "Shredding stopped after " + sProgress;
|
||||
string sLinePath = "Path: " +sPath;
|
||||
string sLineModelFamlily = "ModelFamily: " + sModelFamily;
|
||||
string sLineModelName = "ModelName: " + sModelName;
|
||||
|
@ -431,6 +434,7 @@ WINDOW* TUI::createFrozenWarning(int iXSize, int iYSize, int iXStart, int iYStar
|
|||
u16Line++;
|
||||
mvwaddstr(newWindow,u16Line++, 3, sLine02.c_str());
|
||||
mvwaddstr(newWindow,u16Line++, 3, sLine03.c_str());
|
||||
mvwaddstr(newWindow,u16Line++, 3, sShredState.c_str());
|
||||
|
||||
return newWindow;
|
||||
}
|
||||
|
@ -473,17 +477,17 @@ void TUI::displaySelectedDrive(Drive drive, int stdscrX, int stdscrY)
|
|||
detailview=createDetailViewWindow(((stdscrX)-(int)(stdscrX/3)-7), (stdscrY-15), (int)(stdscrX/3)+5, drive);
|
||||
wrefresh(detailview);
|
||||
|
||||
menuview=createMenuView(((stdscrX)-(int)(stdscrX/3)-7), 10, (int)(stdscrX/3)+5,(stdscrY-11), menustate);
|
||||
menuview=createMenuView(((int)(stdscrX/3)-10 ), 10, (int)(stdscrX/3)+5,(stdscrY-11), menustate);
|
||||
wrefresh(menuview);
|
||||
|
||||
if(menustate.bConfirmShred == true)
|
||||
{
|
||||
dialog=createDialog(70, 10, ((stdscrX)-(int)(stdscrX/3)-7)-(int)((stdscrX/3)+5)/2,(int)(stdscrY/2)-5, "Confirm SHRED", "Press ENTER for SHRED", "Press ESC for cancel");
|
||||
dialog=createDialog(40, 10, ((stdscrX)-(int)(stdscrX/3)-7)-(int)((stdscrX/3)+5)/2,(int)(stdscrY/2)-5, "Confirm SHRED", "Press ENTER for SHRED", "Press ESC for cancel");
|
||||
wrefresh(dialog);
|
||||
}
|
||||
else if(menustate.bConfirmDelete == true)
|
||||
{
|
||||
dialog=createDialog(70, 10, ((stdscrX)-(int)(stdscrX/3)-7)-(int)((stdscrX/3)+5)/2,(int)(stdscrY/2)-5, "Confirm DELETE", "Press ENTER for DELETE", "Press ESC for cancel");
|
||||
dialog=createDialog(40, 10, ((stdscrX)-(int)(stdscrX/3)-7)-(int)((stdscrX/3)+5)/2,(int)(stdscrY/2)-5, "Confirm DELETE", "Press ENTER for DELETE", "Press ESC for cancel");
|
||||
wrefresh(dialog);
|
||||
}
|
||||
else
|
||||
|
@ -491,3 +495,42 @@ void TUI::displaySelectedDrive(Drive drive, int stdscrX, int stdscrY)
|
|||
delwin(dialog);
|
||||
}
|
||||
}
|
||||
|
||||
WINDOW* TUI::createSmartWarning(int iXSize, int iYSize, int iXStart, int iYStart, string sPath, uint32_t u32PowerOnHours, uint32_t u32PowerCycles, uint32_t u32ErrorCount)
|
||||
{
|
||||
WINDOW *newWindow;
|
||||
newWindow = newwin(iYSize, iXSize, iYStart, iXStart);
|
||||
|
||||
wbkgd(newWindow, COLOR_PAIR(COLOR_AREA_ENTRY_SELECTED));
|
||||
box(newWindow, ACS_VLINE, ACS_HLINE);
|
||||
|
||||
string sHeader = "Drive " + sPath + " is suspicious";
|
||||
string sLine01 = "Please evaluate this drive carefully.";
|
||||
|
||||
centerTitle(newWindow, sHeader.c_str());
|
||||
|
||||
uint16_t u16Line = 2;
|
||||
mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine01.size()/2), sLine01.c_str());
|
||||
u16Line++;
|
||||
|
||||
if(u32PowerOnHours > WORSE_HOURS)
|
||||
{
|
||||
string sLineTmp = "Operating hours exceeded " + to_string(WORSE_HOURS) + " hours: " + to_string(u32PowerOnHours);
|
||||
mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine01.size()/2), sLineTmp.c_str());
|
||||
u16Line++;
|
||||
}
|
||||
|
||||
if(u32PowerCycles > WORSE_POWERUP)
|
||||
{
|
||||
string sLineTmp = "Power-on exceeded " + to_string(WORSE_POWERUP) + " cycles: " + to_string(u32PowerCycles);
|
||||
mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine01.size()/2), sLineTmp.c_str());
|
||||
u16Line++;
|
||||
}
|
||||
|
||||
if(u32ErrorCount > 0)
|
||||
{
|
||||
string sLineTmp = "S.M.A.R.T. erros detected: " + to_string(u32ErrorCount);
|
||||
mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine01.size()/2), sLineTmp.c_str());
|
||||
}
|
||||
return newWindow;
|
||||
}
|
Loading…
Reference in New Issue