aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Sadie Powell2025-03-03 18:17:21 +0000
committerGravatar Sadie Powell2025-03-03 18:19:49 +0000
commit205603cadf80ccd6cd9757455957b1f7c3a843be (patch)
tree3bbd021c7d40b862d3c339141dfbf17c0f5e6dd5
parentUse Duration::ToHuman instead of seconds in various messages. (diff)
Add an flag to ToHuman to shorten the output.
-rw-r--r--include/timeutils.h7
-rw-r--r--src/coremods/core_oper/core_oper.cpp4
-rw-r--r--src/helperfuncs.cpp20
-rw-r--r--src/modules/extra/m_ssl_gnutls.cpp4
-rw-r--r--src/modules/extra/m_ssl_openssl.cpp4
-rw-r--r--src/modules/m_helpmode.cpp4
-rw-r--r--src/modules/m_hideoper.cpp4
7 files changed, 35 insertions, 12 deletions
diff --git a/include/timeutils.h b/include/timeutils.h
index a86a21b9c..521105743 100644
--- a/include/timeutils.h
+++ b/include/timeutils.h
@@ -42,13 +42,18 @@ namespace Duration
*
* e.g. 33,019,565 will result in 1 year, 2 weeks, 3 days, 4 hours, 6
* minutes, 5 seconds.
+ *
+ * @param duration The number of seconds to convert.
+ * @param brief Whether to round to the nearest time period.
*/
- CoreExport std::string ToHuman(unsigned long duration);
+ CoreExport std::string ToHuman(unsigned long duration, bool brief = false);
/** Converts a number of seconds to a duration string.
*
* e.g. 33,019,565 will result in 1y2w3d4h6m5s which represents one year,
* two weeks, three days, four hours, six minutes, and five seconds.
+ *
+ * @param duration The number of seconds to convert.
*/
CoreExport std::string ToString(unsigned long duration);
diff --git a/src/coremods/core_oper/core_oper.cpp b/src/coremods/core_oper/core_oper.cpp
index a34219e01..0f464b660 100644
--- a/src/coremods/core_oper/core_oper.cpp
+++ b/src/coremods/core_oper/core_oper.cpp
@@ -217,7 +217,7 @@ public:
std::string extra;
if (oper->IsAway())
{
- const std::string awayperiod = Duration::ToHuman(ServerInstance->Time() - oper->away->time);
+ const std::string awayperiod = Duration::ToHuman(ServerInstance->Time() - oper->away->time, true);
const std::string awaytime = Time::ToString(oper->away->time);
extra = INSP_FORMAT(": away for {} [since {}] ({})", awayperiod, awaytime, oper->away->message);
@@ -226,7 +226,7 @@ public:
auto* loper = IS_LOCAL(oper);
if (loper)
{
- const std::string idleperiod = Duration::ToHuman(ServerInstance->Time() - loper->idle_lastmsg);
+ const std::string idleperiod = Duration::ToHuman(ServerInstance->Time() - loper->idle_lastmsg, true);
const std::string idletime = Time::ToString(loper->idle_lastmsg);
extra += INSP_FORMAT("{} idle for {} [since {}]", extra.empty() ? ':' : ',', idleperiod, idletime);
diff --git a/src/helperfuncs.cpp b/src/helperfuncs.cpp
index 3cfb65d9f..4f6ccb6f2 100644
--- a/src/helperfuncs.cpp
+++ b/src/helperfuncs.cpp
@@ -504,11 +504,29 @@ std::string Duration::ToString(unsigned long duration)
return ret;
}
-std::string Duration::ToHuman(unsigned long duration)
+std::string Duration::ToHuman(unsigned long duration, bool brief)
{
if (duration == 0)
return "0 seconds";
+ if (brief)
+ {
+ // This will get inlined when compiled with optimisations.
+ auto nearest = [](unsigned long seconds, unsigned long roundto) {
+ if ((seconds % roundto) <= (roundto / 2))
+ return seconds - (seconds % roundto);
+ return seconds - (seconds % roundto) + roundto;
+ };
+
+ // In order to get a shorter result we round to the nearest period.
+ if (duration >= SECONDS_PER_YEAR)
+ duration = nearest(duration, SECONDS_PER_DAY); // Nearest day if its more than a year
+ else if (duration >= SECONDS_PER_DAY)
+ duration = nearest(duration, SECONDS_PER_HOUR); // Nearest hour if its more than a day
+ else if (duration >= SECONDS_PER_HOUR)
+ duration = nearest(duration, SECONDS_PER_MINUTE); // Nearest minute if its more than an hour
+ }
+
std::string ret;
const auto years = (duration / SECONDS_PER_YEAR);
diff --git a/src/modules/extra/m_ssl_gnutls.cpp b/src/modules/extra/m_ssl_gnutls.cpp
index 74aeb9c6c..8b1fc0b8b 100644
--- a/src/modules/extra/m_ssl_gnutls.cpp
+++ b/src/modules/extra/m_ssl_gnutls.cpp
@@ -792,7 +792,7 @@ private:
else if (certinfo->activation >= ServerInstance->Time())
{
certinfo->error = INSP_FORMAT("Certificate not active for {} (on {})",
- Duration::ToHuman(certinfo->activation - ServerInstance->Time()),
+ Duration::ToHuman(certinfo->activation - ServerInstance->Time(), true),
Time::ToString(certinfo->activation));
}
@@ -805,7 +805,7 @@ private:
else if (certinfo->expiration <= ServerInstance->Time())
{
certinfo->error = INSP_FORMAT("Certificate expired {} ago (on {})",
- Duration::ToHuman(ServerInstance->Time() - certinfo->expiration),
+ Duration::ToHuman(ServerInstance->Time() - certinfo->expiration, true),
Time::ToString(certinfo->expiration));
}
diff --git a/src/modules/extra/m_ssl_openssl.cpp b/src/modules/extra/m_ssl_openssl.cpp
index f431039cc..d9fd7b6f5 100644
--- a/src/modules/extra/m_ssl_openssl.cpp
+++ b/src/modules/extra/m_ssl_openssl.cpp
@@ -635,7 +635,7 @@ private:
if (activated != -1 && activated != 0)
{
certinfo->error = INSP_FORMAT("Certificate not active for {} (on {})",
- Duration::ToHuman(certinfo->activation - ServerInstance->Time()),
+ Duration::ToHuman(certinfo->activation - ServerInstance->Time(), true),
Time::ToString(certinfo->activation));
}
@@ -643,7 +643,7 @@ private:
if (expired != 0 && expired != 1)
{
certinfo->error = INSP_FORMAT("Certificate expired {} ago (on {})",
- Duration::ToHuman(ServerInstance->Time() - certinfo->expiration),
+ Duration::ToHuman(ServerInstance->Time() - certinfo->expiration, true),
Time::ToString(certinfo->expiration));
}
diff --git a/src/modules/m_helpmode.cpp b/src/modules/m_helpmode.cpp
index 4b6bfb8d5..095e35ecc 100644
--- a/src/modules/m_helpmode.cpp
+++ b/src/modules/m_helpmode.cpp
@@ -91,7 +91,7 @@ public:
std::string extra;
if (helper->IsAway())
{
- const std::string awayperiod = Duration::ToHuman(ServerInstance->Time() - helper->away->time);
+ const std::string awayperiod = Duration::ToHuman(ServerInstance->Time() - helper->away->time, true);
const std::string awaytime = Time::ToString(helper->away->time);
extra = INSP_FORMAT(": away for {} [since {}] ({})", awayperiod, awaytime, helper->away->message);
@@ -100,7 +100,7 @@ public:
auto* lhelper = IS_LOCAL(helper);
if (lhelper)
{
- const std::string idleperiod = Duration::ToHuman(ServerInstance->Time() - lhelper->idle_lastmsg);
+ const std::string idleperiod = Duration::ToHuman(ServerInstance->Time() - lhelper->idle_lastmsg, true);
const std::string idletime = Time::ToString(lhelper->idle_lastmsg);
extra += INSP_FORMAT("{} idle for {} [since {}]", extra.empty() ? ':' : ',', idleperiod, idletime);
diff --git a/src/modules/m_hideoper.cpp b/src/modules/m_hideoper.cpp
index 786c962fe..ea2143fe7 100644
--- a/src/modules/m_hideoper.cpp
+++ b/src/modules/m_hideoper.cpp
@@ -157,7 +157,7 @@ public:
std::string extra;
if (oper->IsAway())
{
- const std::string awayperiod = Duration::ToHuman(ServerInstance->Time() - oper->away->time);
+ const std::string awayperiod = Duration::ToHuman(ServerInstance->Time() - oper->away->time, true);
const std::string awaytime = Time::ToString(oper->away->time);
extra = INSP_FORMAT(": away for {} [since {}] ({})", awayperiod, awaytime, oper->away->message);
@@ -166,7 +166,7 @@ public:
auto* loper = IS_LOCAL(oper);
if (loper)
{
- const std::string idleperiod = Duration::ToHuman(ServerInstance->Time() - loper->idle_lastmsg);
+ const std::string idleperiod = Duration::ToHuman(ServerInstance->Time() - loper->idle_lastmsg, true);
const std::string idletime = Time::ToString(loper->idle_lastmsg);
extra += INSP_FORMAT("{} idle for {} [since {}]", extra.empty() ? ':' : ',', idleperiod, idletime);