mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-10-17 09:10:21 +01:00
common PrintMainWindowText
This commit is contained in:
parent
4dfbf33382
commit
5a5ba9be35
3 changed files with 119 additions and 115 deletions
|
@ -107,116 +107,6 @@ namespace win32
|
||||||
Shell_NotifyIcon (NIM_DELETE, &nid);
|
Shell_NotifyIcon (NIM_DELETE, &nid);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ShowUptime (std::stringstream& s, int seconds)
|
|
||||||
{
|
|
||||||
int num;
|
|
||||||
|
|
||||||
if ((num = seconds / 86400) > 0) {
|
|
||||||
s << num << " days, ";
|
|
||||||
seconds -= num * 86400;
|
|
||||||
}
|
|
||||||
if ((num = seconds / 3600) > 0) {
|
|
||||||
s << num << " hours, ";
|
|
||||||
seconds -= num * 3600;
|
|
||||||
}
|
|
||||||
if ((num = seconds / 60) > 0) {
|
|
||||||
s << num << " min, ";
|
|
||||||
seconds -= num * 60;
|
|
||||||
}
|
|
||||||
s << seconds << " seconds\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename size> static void ShowTransfered (std::stringstream& s, size transfer)
|
|
||||||
{
|
|
||||||
auto bytes = transfer & 0x03ff;
|
|
||||||
transfer >>= 10;
|
|
||||||
auto kbytes = transfer & 0x03ff;
|
|
||||||
transfer >>= 10;
|
|
||||||
auto mbytes = transfer & 0x03ff;
|
|
||||||
transfer >>= 10;
|
|
||||||
auto gbytes = transfer;
|
|
||||||
|
|
||||||
if (gbytes)
|
|
||||||
s << gbytes << " GB, ";
|
|
||||||
if (mbytes)
|
|
||||||
s << mbytes << " MB, ";
|
|
||||||
if (kbytes)
|
|
||||||
s << kbytes << " KB, ";
|
|
||||||
s << bytes << " Bytes\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ShowNetworkStatus (std::stringstream& s, RouterStatus status, bool testing, RouterError error)
|
|
||||||
{
|
|
||||||
switch (status)
|
|
||||||
{
|
|
||||||
case eRouterStatusOK: s << "OK"; break;
|
|
||||||
case eRouterStatusFirewalled: s << "FW"; break;
|
|
||||||
case eRouterStatusUnknown: s << "Unk"; break;
|
|
||||||
case eRouterStatusProxy: s << "Proxy"; break;
|
|
||||||
case eRouterStatusMesh: s << "Mesh"; break;
|
|
||||||
default: s << "Unk";
|
|
||||||
};
|
|
||||||
if (testing)
|
|
||||||
s << " (Test)";
|
|
||||||
if (error != eRouterErrorNone)
|
|
||||||
{
|
|
||||||
switch (error)
|
|
||||||
{
|
|
||||||
case eRouterErrorClockSkew:
|
|
||||||
s << " - " << tr("Clock skew");
|
|
||||||
break;
|
|
||||||
case eRouterErrorOffline:
|
|
||||||
s << " - " << tr("Offline");
|
|
||||||
break;
|
|
||||||
case eRouterErrorSymmetricNAT:
|
|
||||||
s << " - " << tr("Symmetric NAT");
|
|
||||||
break;
|
|
||||||
case eRouterErrorFullConeNAT:
|
|
||||||
s << " - " << tr("Full cone NAT");
|
|
||||||
break;
|
|
||||||
case eRouterErrorNoDescriptors:
|
|
||||||
s << " - " << tr("No Descriptors");
|
|
||||||
break;
|
|
||||||
default: ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void PrintMainWindowText (std::stringstream& s)
|
|
||||||
{
|
|
||||||
s << "\n";
|
|
||||||
s << "Status: ";
|
|
||||||
ShowNetworkStatus (s, i2p::context.GetStatus (), i2p::context.GetTesting(), i2p::context.GetError ());
|
|
||||||
if (i2p::context.SupportsV6 ())
|
|
||||||
{
|
|
||||||
s << " / ";
|
|
||||||
ShowNetworkStatus (s, i2p::context.GetStatusV6 (), i2p::context.GetTestingV6(), i2p::context.GetErrorV6 ());
|
|
||||||
}
|
|
||||||
s << "; ";
|
|
||||||
s << "Success Rate: " << i2p::tunnel::tunnels.GetTunnelCreationSuccessRate() << "%\n";
|
|
||||||
s << "Uptime: "; ShowUptime(s, i2p::context.GetUptime ());
|
|
||||||
auto gracefulTimeLeft = Daemon.GetGracefulShutdownInterval ();
|
|
||||||
if (gracefulTimeLeft > 0)
|
|
||||||
{
|
|
||||||
s << "Graceful shutdown, time left: "; ShowUptime(s, gracefulTimeLeft);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
s << "\n";
|
|
||||||
s << "Inbound: " << i2p::transport::transports.GetInBandwidth() / 1024 << " KiB/s; ";
|
|
||||||
s << "Outbound: " << i2p::transport::transports.GetOutBandwidth() / 1024 << " KiB/s\n";
|
|
||||||
s << "Received: "; ShowTransfered (s, i2p::transport::transports.GetTotalReceivedBytes());
|
|
||||||
s << "Sent: "; ShowTransfered (s, i2p::transport::transports.GetTotalSentBytes());
|
|
||||||
s << "\n";
|
|
||||||
s << "Routers: " << i2p::data::netdb.GetNumRouters () << "; ";
|
|
||||||
s << "Floodfills: " << i2p::data::netdb.GetNumFloodfills () << "; ";
|
|
||||||
s << "LeaseSets: " << i2p::data::netdb.GetNumLeaseSets () << "\n";
|
|
||||||
s << "Tunnels: ";
|
|
||||||
s << "In: " << i2p::tunnel::tunnels.CountInboundTunnels() << "; ";
|
|
||||||
s << "Out: " << i2p::tunnel::tunnels.CountOutboundTunnels() << "; ";
|
|
||||||
s << "Transit: " << i2p::tunnel::tunnels.CountTransitTunnels() << "\n";
|
|
||||||
s << "\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
static LRESULT CALLBACK WndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
static LRESULT CALLBACK WndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
static UINT s_uTaskbarRestart;
|
static UINT s_uTaskbarRestart;
|
||||||
|
@ -404,7 +294,7 @@ namespace win32
|
||||||
PAINTSTRUCT ps;
|
PAINTSTRUCT ps;
|
||||||
RECT rp;
|
RECT rp;
|
||||||
HFONT hFont;
|
HFONT hFont;
|
||||||
std::stringstream s; PrintMainWindowText (s);
|
std::stringstream s; i2p::util::PrintMainWindowText (s);
|
||||||
hDC = BeginPaint (hWnd, &ps);
|
hDC = BeginPaint (hWnd, &ps);
|
||||||
GetClientRect(hWnd, &rp);
|
GetClientRect(hWnd, &rp);
|
||||||
SetTextColor(hDC, 0x00D43B69);
|
SetTextColor(hDC, 0x00D43B69);
|
||||||
|
|
|
@ -62,9 +62,9 @@ namespace util
|
||||||
return service;
|
return service;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Daemon_Singleton::setDataDir(std::string path)
|
void Daemon_Singleton::setDataDir(std::string_view path)
|
||||||
{
|
{
|
||||||
if (path != "")
|
if (!path.empty ())
|
||||||
DaemonDataDir = path;
|
DaemonDataDir = path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -434,5 +434,115 @@ namespace util
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ShowUptime (std::stringstream& s, int seconds)
|
||||||
|
{
|
||||||
|
int num;
|
||||||
|
|
||||||
|
if ((num = seconds / 86400) > 0) {
|
||||||
|
s << num << " days, ";
|
||||||
|
seconds -= num * 86400;
|
||||||
|
}
|
||||||
|
if ((num = seconds / 3600) > 0) {
|
||||||
|
s << num << " hours, ";
|
||||||
|
seconds -= num * 3600;
|
||||||
|
}
|
||||||
|
if ((num = seconds / 60) > 0) {
|
||||||
|
s << num << " min, ";
|
||||||
|
seconds -= num * 60;
|
||||||
|
}
|
||||||
|
s << seconds << " seconds\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ShowTransfered (std::stringstream& s, size_t transfer)
|
||||||
|
{
|
||||||
|
auto bytes = transfer & 0x03ff;
|
||||||
|
transfer >>= 10;
|
||||||
|
auto kbytes = transfer & 0x03ff;
|
||||||
|
transfer >>= 10;
|
||||||
|
auto mbytes = transfer & 0x03ff;
|
||||||
|
transfer >>= 10;
|
||||||
|
auto gbytes = transfer;
|
||||||
|
|
||||||
|
if (gbytes)
|
||||||
|
s << gbytes << " GB, ";
|
||||||
|
if (mbytes)
|
||||||
|
s << mbytes << " MB, ";
|
||||||
|
if (kbytes)
|
||||||
|
s << kbytes << " KB, ";
|
||||||
|
s << bytes << " Bytes\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ShowNetworkStatus (std::stringstream& s, RouterStatus status, bool testing, RouterError error)
|
||||||
|
{
|
||||||
|
switch (status)
|
||||||
|
{
|
||||||
|
case eRouterStatusOK: s << "OK"; break;
|
||||||
|
case eRouterStatusFirewalled: s << "FW"; break;
|
||||||
|
case eRouterStatusUnknown: s << "Unk"; break;
|
||||||
|
case eRouterStatusProxy: s << "Proxy"; break;
|
||||||
|
case eRouterStatusMesh: s << "Mesh"; break;
|
||||||
|
default: s << "Unk";
|
||||||
|
};
|
||||||
|
if (testing)
|
||||||
|
s << " (Test)";
|
||||||
|
if (error != eRouterErrorNone)
|
||||||
|
{
|
||||||
|
switch (error)
|
||||||
|
{
|
||||||
|
case eRouterErrorClockSkew:
|
||||||
|
s << " - " << tr("Clock skew");
|
||||||
|
break;
|
||||||
|
case eRouterErrorOffline:
|
||||||
|
s << " - " << tr("Offline");
|
||||||
|
break;
|
||||||
|
case eRouterErrorSymmetricNAT:
|
||||||
|
s << " - " << tr("Symmetric NAT");
|
||||||
|
break;
|
||||||
|
case eRouterErrorFullConeNAT:
|
||||||
|
s << " - " << tr("Full cone NAT");
|
||||||
|
break;
|
||||||
|
case eRouterErrorNoDescriptors:
|
||||||
|
s << " - " << tr("No Descriptors");
|
||||||
|
break;
|
||||||
|
default: ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PrintMainWindowText (std::stringstream& s)
|
||||||
|
{
|
||||||
|
s << "\n";
|
||||||
|
s << "Status: ";
|
||||||
|
ShowNetworkStatus (s, i2p::context.GetStatus (), i2p::context.GetTesting(), i2p::context.GetError ());
|
||||||
|
if (i2p::context.SupportsV6 ())
|
||||||
|
{
|
||||||
|
s << " / ";
|
||||||
|
ShowNetworkStatus (s, i2p::context.GetStatusV6 (), i2p::context.GetTestingV6(), i2p::context.GetErrorV6 ());
|
||||||
|
}
|
||||||
|
s << "; ";
|
||||||
|
s << "Success Rate: " << i2p::tunnel::tunnels.GetTunnelCreationSuccessRate() << "%\n";
|
||||||
|
s << "Uptime: "; ShowUptime(s, i2p::context.GetUptime ());
|
||||||
|
auto gracefulTimeLeft = Daemon.GetGracefulShutdownInterval ();
|
||||||
|
if (gracefulTimeLeft > 0)
|
||||||
|
{
|
||||||
|
s << "Graceful shutdown, time left: "; ShowUptime(s, gracefulTimeLeft);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
s << "\n";
|
||||||
|
s << "Inbound: " << i2p::transport::transports.GetInBandwidth() / 1024 << " KiB/s; ";
|
||||||
|
s << "Outbound: " << i2p::transport::transports.GetOutBandwidth() / 1024 << " KiB/s\n";
|
||||||
|
s << "Received: "; ShowTransfered (s, i2p::transport::transports.GetTotalReceivedBytes());
|
||||||
|
s << "Sent: "; ShowTransfered (s, i2p::transport::transports.GetTotalSentBytes());
|
||||||
|
s << "\n";
|
||||||
|
s << "Routers: " << i2p::data::netdb.GetNumRouters () << "; ";
|
||||||
|
s << "Floodfills: " << i2p::data::netdb.GetNumFloodfills () << "; ";
|
||||||
|
s << "LeaseSets: " << i2p::data::netdb.GetNumLeaseSets () << "\n";
|
||||||
|
s << "Tunnels: ";
|
||||||
|
s << "In: " << i2p::tunnel::tunnels.CountInboundTunnels() << "; ";
|
||||||
|
s << "Out: " << i2p::tunnel::tunnels.CountOutboundTunnels() << "; ";
|
||||||
|
s << "Transit: " << i2p::tunnel::tunnels.CountTransitTunnels() << "\n";
|
||||||
|
s << "\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,9 @@
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <string_view>
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
namespace i2p
|
namespace i2p
|
||||||
{
|
{
|
||||||
|
@ -28,8 +30,8 @@ namespace util
|
||||||
virtual bool stop ();
|
virtual bool stop ();
|
||||||
virtual void run () {};
|
virtual void run () {};
|
||||||
|
|
||||||
virtual void setDataDir (std::string path);
|
|
||||||
virtual int GetGracefulShutdownInterval () const { return 0; };
|
virtual int GetGracefulShutdownInterval () const { return 0; };
|
||||||
|
void setDataDir (std::string_view path);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -52,6 +54,8 @@ namespace util
|
||||||
std::string DaemonDataDir;
|
std::string DaemonDataDir;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void PrintMainWindowText (std::stringstream& s); // for GUI
|
||||||
|
|
||||||
#if defined(QT_GUI_LIB) // check if QT
|
#if defined(QT_GUI_LIB) // check if QT
|
||||||
#define Daemon i2p::util::DaemonQT::Instance()
|
#define Daemon i2p::util::DaemonQT::Instance()
|
||||||
// dummy, invoked from RunQT
|
// dummy, invoked from RunQT
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue