From 7f1553890e614d5c7afd7f01a11277b822fd4a05 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sat, 12 Mar 2011 21:59:09 +0200 Subject: Add /uptime chat command to show client uptime. --- src/client.cpp | 3 +++ src/client.h | 3 +++ src/commandhandler.cpp | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/commandhandler.h | 2 ++ src/gui/chat.cpp | 1 + 5 files changed, 62 insertions(+) diff --git a/src/client.cpp b/src/client.cpp index e1753753e..5c183a17d 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -152,6 +152,7 @@ volatile int cur_time; volatile bool runCounters; bool isSafeMode = false; int serverVersion; +int start_time; /** * Advances game logic counter. @@ -535,6 +536,8 @@ Client::Client(const Options &options): optionChanged("fpslimit"); + start_time = time(NULL); + // Initialize PlayerInfo PlayerInfo::init(); } diff --git a/src/client.h b/src/client.h index e3f596c1a..eb859f0a8 100644 --- a/src/client.h +++ b/src/client.h @@ -34,6 +34,8 @@ #include +#include + #ifdef __GNUC__ #define _UNUSED_ __attribute__ ((unused)) #else @@ -60,6 +62,7 @@ extern volatile int tick_time; extern volatile int cur_time; extern bool isSafeMode; extern int serverVersion; +extern int start_time; class ErrorListener : public gcn::ActionListener { diff --git a/src/commandhandler.cpp b/src/commandhandler.cpp index 1d374541e..9f007acf1 100644 --- a/src/commandhandler.cpp +++ b/src/commandhandler.cpp @@ -254,6 +254,10 @@ void CommandHandler::handleCommand(const std::string &command, ChatTab *tab) { handleWait(args, tab); } + else if (type == "uptime") + { + handleUptime(args, tab); + } else if (tab->handleCommand(type, args)) { // Nothing to do @@ -1097,6 +1101,55 @@ void CommandHandler::handleWait(const std::string &args, player_node->waitFor(args); } +void CommandHandler::handleUptime(const std::string &args, + ChatTab *tab _UNUSED_) +{ + if (!debugChatTab) + return; + + if (cur_time < start_time) + { + debugChatTab->chatLog(strprintf(_("Client uptime: %s"), "unknown")); + } + else + { + std::string str; + const int timeDiff = cur_time - start_time; + const int min = timeDiff / 60; + const int hours = min / 60; + const int days = hours / 24; + const int weeks = days / 7; + if (weeks > 0) + { + str = strprintf(ngettext("%d week", "%d weeks", weeks), weeks); + } + if (days > 0) + { + if (!str.empty()) + str += ", "; + str += strprintf(ngettext("%d day", "%d days", days), days); + } + if (hours > 0) + { + if (!str.empty()) + str += ", "; + str += strprintf(ngettext("%d hour", "%d hours", hours), hours); + } + if (min > 0) + { + if (!str.empty()) + str += ", "; + str += strprintf(ngettext("%d minute", "%d minutes", min), min); + } + if (str.empty()) + { + str += strprintf(ngettext("%d second", "%d seconds", + timeDiff), timeDiff); + } + debugChatTab->chatLog(strprintf(_("Client uptime: %s"), str.c_str())); + } +} + void CommandHandler::handleCacheInfo(const std::string &args _UNUSED_, ChatTab *tab _UNUSED_) { diff --git a/src/commandhandler.h b/src/commandhandler.h index fb4039e04..779a6e6fd 100644 --- a/src/commandhandler.h +++ b/src/commandhandler.h @@ -272,6 +272,8 @@ class CommandHandler void handleWait(const std::string &args, ChatTab *tab); + void handleUptime(const std::string &args, ChatTab *tab); + void handleCacheInfo(const std::string &args, ChatTab *tab _UNUSED_); bool parse2Int(const std::string &args, int *x, int *y); diff --git a/src/gui/chat.cpp b/src/gui/chat.cpp index b2f51a5e6..399202b70 100644 --- a/src/gui/chat.cpp +++ b/src/gui/chat.cpp @@ -262,6 +262,7 @@ void ChatWindow::fillCommands() mCommands.push_back("/dirs"); mCommands.push_back("/info"); mCommands.push_back("/wait"); + mCommands.push_back("/uptime"); } void ChatWindow::resetToDefaultSize() -- cgit v1.2.3-70-g09d2