summaryrefslogtreecommitdiff
path: root/src/timedate.cpp
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2024-06-27 01:24:37 +0200
committerEugen Wissner <belka@caraus.de>2024-06-27 01:24:37 +0200
commitd75053b2439ab30d45aaa55365e7586498cd3299 (patch)
treed3aff698101e7ad3a0b79dcb06c1c5641c47caf7 /src/timedate.cpp
parentb11e18e560edc9f363c4a98ddb5f5da3d66a7881 (diff)
downloadslack-timedate-d75053b2439ab30d45aaa55365e7586498cd3299.tar.gz
Implement TimeUSec property
Diffstat (limited to 'src/timedate.cpp')
-rw-r--r--src/timedate.cpp33
1 files changed, 30 insertions, 3 deletions
diff --git a/src/timedate.cpp b/src/timedate.cpp
index 42bacf6..e6ec83f 100644
--- a/src/timedate.cpp
+++ b/src/timedate.cpp
@@ -125,9 +125,13 @@ static void slack_get_property(Glib::VariantBase& result, const Glib::RefPtr<Gio
{
result = Glib::Variant<bool>::create(dlackware::timedate::ntp_synchronized());
}
- else if (prop_name == "TimeUSecRTC")
+ else if (prop_name == "TimeUSec")
{
- result = Glib::Variant<std::uint64_t>::create(dlackware::timedate::time_usec_rtc());
+ result = Glib::Variant<std::uint64_t>::create(dlackware::timedate::time_usec());
+ }
+ else if (prop_name == "RTCTimeUSec")
+ {
+ result = Glib::Variant<std::uint64_t>::create(dlackware::timedate::rtc_time_usec());
}
}
@@ -338,7 +342,30 @@ namespace dlackware::timedate
return ntp_result != TIME_ERROR && (buffer.status & STA_UNSYNC) == 0;
}
- std::uint64_t time_usec_rtc()
+ std::uint64_t time_usec()
+ {
+ timespec spec;
+
+ if (clock_gettime(CLOCK_REALTIME, &spec) == -1)
+ {
+ throw std::system_error(errno, std::generic_category());
+ }
+ time_t seconds = spec.tv_sec;
+ tm time;
+
+ if (local_rtc())
+ {
+ gmtime_r(&seconds, &time);
+ }
+ else
+ {
+ localtime_r(&seconds, &time);
+ }
+ return std::chrono::duration_cast<std::chrono::microseconds>(
+ std::chrono::seconds(std::mktime(&time)) + std::chrono::nanoseconds(spec.tv_nsec)).count();
+ }
+
+ std::uint64_t rtc_time_usec()
{
return std::chrono::duration_cast<std::chrono::microseconds>(
std::chrono::system_clock::now().time_since_epoch()).count();