This commit is contained in:
parent
d75053b243
commit
8bf3a92cbc
@ -45,6 +45,30 @@ static void slack_method_call(const Glib::RefPtr<Gio::DBus::Connection>& connect
|
||||
invocation->return_error(Gio::DBus::Error{ Gio::DBus::Error::FAILED, filesystem_error.what() });
|
||||
}
|
||||
}
|
||||
else if (method_name == "SetLocalRTC")
|
||||
{
|
||||
Glib::Variant<bool> local_rtc;
|
||||
Glib::Variant<bool> fix_system;
|
||||
Glib::Variant<bool> user_interaction;
|
||||
|
||||
parameters.get_child(local_rtc, 0);
|
||||
parameters.get_child(fix_system, 1);
|
||||
parameters.get_child(user_interaction, 2);
|
||||
|
||||
try
|
||||
{
|
||||
dlackware::timedate::set_local_rtc(local_rtc.get(), fix_system.get(), user_interaction.get());
|
||||
invocation->return_value(Glib::VariantContainerBase());
|
||||
}
|
||||
catch (const std::system_error& error)
|
||||
{
|
||||
invocation->return_error(Gio::DBus::Error{ Gio::DBus::Error::FAILED, error.what() });
|
||||
}
|
||||
catch (const Glib::SpawnError& spawn_error)
|
||||
{
|
||||
invocation->return_error(Gio::DBus::Error{ Gio::DBus::Error::FAILED, spawn_error.what() });
|
||||
}
|
||||
}
|
||||
else if (method_name == "SetTime")
|
||||
{
|
||||
Glib::Variant<gint64> usec_utc;
|
||||
@ -285,6 +309,37 @@ namespace dlackware::timedate
|
||||
}
|
||||
}
|
||||
|
||||
void set_local_rtc(bool local_rtc, bool fix_system, bool)
|
||||
{
|
||||
std::ofstream hardwareclock{ "/etc/hardwareclock", std::ios::trunc };
|
||||
std::string hwclock_argument;
|
||||
|
||||
hardwareclock << "# /etc/hardwareclock" << std::endl
|
||||
<< "#" << std::endl
|
||||
<< "# Tells how the hardware clock time is stored." << std::endl
|
||||
<< "# You should run timeconfig to edit this file." << std::endl
|
||||
<< std::endl;
|
||||
|
||||
if (local_rtc)
|
||||
{
|
||||
hwclock_argument = "--localtime";
|
||||
hardwareclock << "localtime";
|
||||
}
|
||||
else
|
||||
{
|
||||
hwclock_argument = "--utc";
|
||||
hardwareclock << "UTC";
|
||||
}
|
||||
hardwareclock << std::endl;
|
||||
|
||||
if (!fix_system)
|
||||
{
|
||||
Glib::spawn_sync("", std::vector<std::string>{ "/sbin/hwclock", hwclock_argument, "--hctosys" },
|
||||
Glib::SpawnFlags::SPAWN_STDOUT_TO_DEV_NULL | Glib::SpawnFlags::SPAWN_STDERR_TO_DEV_NULL,
|
||||
{}, nullptr, nullptr, static_cast<int *>(nullptr));
|
||||
}
|
||||
}
|
||||
|
||||
bool local_rtc()
|
||||
{
|
||||
std::ifstream fh{ "/etc/hardwareclock", std::ios::in };
|
||||
|
@ -65,6 +65,9 @@ namespace dlackware::timedate
|
||||
// Throws std::system_error.
|
||||
void set_time(std::int64_t seconds_since_epoch, bool relative, bool user_interaction);
|
||||
|
||||
// Controls whether the RTC is local time or UTC.
|
||||
void set_local_rtc(bool local_rtc, bool fix_system, bool user_interaction);
|
||||
|
||||
class timedate1
|
||||
{
|
||||
const Gio::DBus::InterfaceVTable interface_vtable;
|
||||
|
Loading…
Reference in New Issue
Block a user