Merge pull request #2281

e499ff33 simplewallet: factor out message_writer (moneromooo-monero)
7ed5ab47 scoped_message_writer: pause readline to match simplewallet (moneromooo-monero)
This commit is contained in:
Riccardo Spagni 2017-08-15 20:54:21 +02:00
commit e457cc7891
No known key found for this signature in database
GPG Key ID: 55432DF31CCD4FCD
2 changed files with 21 additions and 84 deletions

View File

@ -31,6 +31,14 @@
#include "misc_log_ex.h" #include "misc_log_ex.h"
#include <iostream> #include <iostream>
#ifdef HAVE_READLINE
#include "readline_buffer.h"
#define PAUSE_READLINE() \
rdln::suspend_readline pause_readline;
#else
#define PAUSE_READLINE()
#endif
namespace tools namespace tools
{ {
@ -99,6 +107,7 @@ public:
} }
else else
{ {
PAUSE_READLINE();
set_console_color(m_color, m_bright); set_console_color(m_color, m_bright);
std::cout << m_oss.str(); std::cout << m_oss.str();
epee::reset_console_color(); epee::reset_console_color();
@ -108,9 +117,9 @@ public:
} }
}; };
inline scoped_message_writer success_msg_writer() inline scoped_message_writer success_msg_writer(bool color = true)
{ {
return scoped_message_writer(epee::console_color_green, false, std::string(), el::Level::Info); return scoped_message_writer(color ? epee::console_color_green : epee::console_color_default, false, std::string(), el::Level::Info);
} }
inline scoped_message_writer msg_writer(epee::console_colors color = epee::console_color_default) inline scoped_message_writer msg_writer(epee::console_colors color = epee::console_color_default)

View File

@ -48,6 +48,7 @@
#include "common/util.h" #include "common/util.h"
#include "common/dns_utils.h" #include "common/dns_utils.h"
#include "common/base58.h" #include "common/base58.h"
#include "common/scoped_message_writer.h"
#include "p2p/net_node.h" #include "p2p/net_node.h"
#include "cryptonote_protocol/cryptonote_protocol_handler.h" #include "cryptonote_protocol/cryptonote_protocol_handler.h"
#include "simplewallet.h" #include "simplewallet.h"
@ -62,14 +63,6 @@
#include "wallet/wallet_args.h" #include "wallet/wallet_args.h"
#include <stdexcept> #include <stdexcept>
#ifdef HAVE_READLINE
#include "readline_buffer.h"
#define PAUSE_READLINE() \
rdln::suspend_readline pause_readline;
#else
#define PAUSE_READLINE()
#endif
using namespace std; using namespace std;
using namespace epee; using namespace epee;
using namespace cryptonote; using namespace cryptonote;
@ -147,84 +140,19 @@ namespace
return err; return err;
} }
class message_writer tools::scoped_message_writer success_msg_writer(bool color = false)
{ {
public: return tools::scoped_message_writer(color ? console_color_green : console_color_default, false, std::string(), el::Level::Info);
message_writer(console_colors color = console_color_default, bool bright = false,
std::string&& prefix = std::string(), el::Level log_level = el::Level::Info)
: m_flush(true)
, m_color(color)
, m_bright(bright)
, m_log_level(log_level)
{
m_oss << prefix;
} }
message_writer(message_writer&& rhs) tools::scoped_message_writer message_writer(epee::console_colors color = epee::console_color_default, bool bright = false)
: m_flush(std::move(rhs.m_flush))
#if defined(_MSC_VER)
, m_oss(std::move(rhs.m_oss))
#else
// GCC bug: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54316
, m_oss(rhs.m_oss.str(), ios_base::out | ios_base::ate)
#endif
, m_color(std::move(rhs.m_color))
, m_log_level(std::move(rhs.m_log_level))
{ {
rhs.m_flush = false; return tools::scoped_message_writer(color, bright);
} }
template<typename T> tools::scoped_message_writer fail_msg_writer()
std::ostream& operator<<(const T& val)
{ {
m_oss << val; return tools::scoped_message_writer(console_color_red, true, sw::tr("Error: "), el::Level::Error);
return m_oss;
}
~message_writer()
{
if (m_flush)
{
m_flush = false;
MCLOG(m_log_level, "global", m_oss.str());
if (console_color_default == m_color)
{
std::cout << m_oss.str();
}
else
{
PAUSE_READLINE();
set_console_color(m_color, m_bright);
std::cout << m_oss.str();
reset_console_color();
}
std::cout << std::endl;
}
}
private:
message_writer(message_writer& rhs);
message_writer& operator=(message_writer& rhs);
message_writer& operator=(message_writer&& rhs);
private:
bool m_flush;
std::stringstream m_oss;
console_colors m_color;
bool m_bright;
el::Level m_log_level;
};
message_writer success_msg_writer(bool color = false)
{
return message_writer(color ? console_color_green : console_color_default, false, std::string(), el::Level::Info);
}
message_writer fail_msg_writer()
{
return message_writer(console_color_red, true, sw::tr("Error: "), el::Level::Error);
} }
bool is_it_true(const std::string& s) bool is_it_true(const std::string& s)