summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Schatz <genius3000@g3k.solutions>2019-02-17 02:10:26 -0700
committerPeter Powell <petpow@saberuk.com>2019-02-18 09:17:38 +0000
commite02c22ff165c7b0dbe39343066a4167e94f5618e (patch)
tree5519c2b6df33e206fac03c99104d40a94a86d34e
parent21e7efdadfa685ac1ddcb0a0a515502bc873302b (diff)
Add a function for displaying human-readable durations.
Add InspIRCd::DurationString() to take a time_t and return a string with the duration in a human-readable format (ex: 1y20w2d3h5m9s).
-rw-r--r--include/inspircd.h6
-rw-r--r--src/helperfuncs.cpp28
2 files changed, 34 insertions, 0 deletions
diff --git a/include/inspircd.h b/include/inspircd.h
index f5c7dbafb..0de64b103 100644
--- a/include/inspircd.h
+++ b/include/inspircd.h
@@ -516,6 +516,12 @@ class CoreExport InspIRCd
*/
static bool IsValidDuration(const std::string& str);
+ /** Return a duration in seconds as a human-readable string.
+ * @param duration The duration in seconds to convert to a human-readable string.
+ * @return A string representing the given duration.
+ */
+ static std::string DurationString(time_t duration);
+
/** Attempt to compare a password to a string from the config file.
* This will be passed to handling modules which will compare the data
* against possible hashed equivalents in the input string.
diff --git a/src/helperfuncs.cpp b/src/helperfuncs.cpp
index 94a5240c9..846feab50 100644
--- a/src/helperfuncs.cpp
+++ b/src/helperfuncs.cpp
@@ -7,6 +7,7 @@
* Copyright (C) 2008 Thomas Stagner <aquanight@inspircd.org>
* Copyright (C) 2006-2007 Oliver Lupton <oliverlupton@gmail.com>
* Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
+ * Copyright (C) 2003-2019 Anope Team <team@anope.org>
*
* This file is part of InspIRCd. InspIRCd is free software: you can
* redistribute it and/or modify it under the terms of the GNU General Public
@@ -429,6 +430,33 @@ bool InspIRCd::IsValidDuration(const std::string& duration)
return true;
}
+std::string InspIRCd::DurationString(time_t duration)
+{
+ time_t years = duration / 31536000;
+ time_t weeks = (duration / 604800) % 52;
+ time_t days = (duration / 86400) % 7;
+ time_t hours = (duration / 3600) % 24;
+ time_t minutes = (duration / 60) % 60;
+ time_t seconds = duration % 60;
+
+ std::string ret;
+
+ if (years)
+ ret = ConvToStr(years) + "y";
+ if (weeks)
+ ret += ConvToStr(weeks) + "w";
+ if (days)
+ ret += ConvToStr(days) + "d";
+ if (hours)
+ ret += ConvToStr(hours) + "h";
+ if (minutes)
+ ret += ConvToStr(minutes) + "m";
+ if (seconds)
+ ret += ConvToStr(seconds) + "s";
+
+ return ret;
+}
+
std::string InspIRCd::Format(va_list& vaList, const char* formatString)
{
static std::vector<char> formatBuffer(1024);