Handle wrapping of potentially long lines
This commit is contained in:
parent
0ddd6d1cd8
commit
db853f8a46
|
@ -12,6 +12,7 @@
|
||||||
#include <boost/thread.hpp>
|
#include <boost/thread.hpp>
|
||||||
#include <boost/thread/synchronized_value.hpp>
|
#include <boost/thread/synchronized_value.hpp>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
|
||||||
AtomicCounter transactionsValidated;
|
AtomicCounter transactionsValidated;
|
||||||
AtomicCounter ehSolverRuns;
|
AtomicCounter ehSolverRuns;
|
||||||
|
@ -80,7 +81,7 @@ void printMiningStatus(bool mining)
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
int printMetrics(int64_t nStart, bool mining)
|
int printMetrics(size_t cols, int64_t nStart, bool mining)
|
||||||
{
|
{
|
||||||
// Number of lines that are always displayed
|
// Number of lines that are always displayed
|
||||||
int lines = 3;
|
int lines = 3;
|
||||||
|
@ -103,7 +104,9 @@ int printMetrics(int64_t nStart, bool mining)
|
||||||
} else {
|
} else {
|
||||||
duration = strprintf(_("%d seconds"), seconds);
|
duration = strprintf(_("%d seconds"), seconds);
|
||||||
}
|
}
|
||||||
std::cout << strprintf(_("Since starting this node %s ago:"), duration) << std::endl;
|
std::string strDuration = strprintf(_("Since starting this node %s ago:"), duration);
|
||||||
|
std::cout << strDuration << std::endl;
|
||||||
|
lines += (strDuration.size() / cols);
|
||||||
|
|
||||||
std::cout << "- " << strprintf(_("You have validated %d transactions."), transactionsValidated.get()) << std::endl;
|
std::cout << "- " << strprintf(_("You have validated %d transactions."), transactionsValidated.get()) << std::endl;
|
||||||
|
|
||||||
|
@ -122,7 +125,7 @@ int printMetrics(int64_t nStart, bool mining)
|
||||||
return lines;
|
return lines;
|
||||||
}
|
}
|
||||||
|
|
||||||
int printMessageBox()
|
int printMessageBox(size_t cols)
|
||||||
{
|
{
|
||||||
boost::strict_lock_ptr<std::list<std::string>> u = messageBox.synchronize();
|
boost::strict_lock_ptr<std::list<std::string>> u = messageBox.synchronize();
|
||||||
|
|
||||||
|
@ -130,12 +133,15 @@ int printMessageBox()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int lines = 2 + u->size();
|
||||||
std::cout << _("Messages:") << std::endl;
|
std::cout << _("Messages:") << std::endl;
|
||||||
for (auto it = u->cbegin(); it != u->cend(); ++it) {
|
for (auto it = u->cbegin(); it != u->cend(); ++it) {
|
||||||
std::cout << *it << std::endl;
|
std::cout << *it << std::endl;
|
||||||
|
// Handle wrapped lines
|
||||||
|
lines += (it->size() / cols);
|
||||||
}
|
}
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
return 2 + u->size();
|
return lines;
|
||||||
}
|
}
|
||||||
|
|
||||||
int printInitMessage()
|
int printInitMessage()
|
||||||
|
@ -183,11 +189,15 @@ void ThreadShowMetricsScreen()
|
||||||
// Number of lines that are always displayed
|
// Number of lines that are always displayed
|
||||||
int lines = 1;
|
int lines = 1;
|
||||||
|
|
||||||
|
// Get current window size
|
||||||
|
struct winsize w;
|
||||||
|
ioctl(STDOUT_FILENO, TIOCGWINSZ, &w);
|
||||||
|
|
||||||
// Erase below current position
|
// Erase below current position
|
||||||
std::cout << "\e[J";
|
std::cout << "\e[J";
|
||||||
|
|
||||||
lines += printMetrics(nStart, mining);
|
lines += printMetrics(w.ws_col, nStart, mining);
|
||||||
lines += printMessageBox();
|
lines += printMessageBox(w.ws_col);
|
||||||
lines += printInitMessage();
|
lines += printInitMessage();
|
||||||
|
|
||||||
// Explain how to exit
|
// Explain how to exit
|
||||||
|
|
Loading…
Reference in New Issue