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() });
|
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")
|
else if (method_name == "SetTime")
|
||||||
{
|
{
|
||||||
Glib::Variant<gint64> usec_utc;
|
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()
|
bool local_rtc()
|
||||||
{
|
{
|
||||||
std::ifstream fh{ "/etc/hardwareclock", std::ios::in };
|
std::ifstream fh{ "/etc/hardwareclock", std::ios::in };
|
||||||
|
@ -65,6 +65,9 @@ namespace dlackware::timedate
|
|||||||
// Throws std::system_error.
|
// Throws std::system_error.
|
||||||
void set_time(std::int64_t seconds_since_epoch, bool relative, bool user_interaction);
|
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
|
class timedate1
|
||||||
{
|
{
|
||||||
const Gio::DBus::InterfaceVTable interface_vtable;
|
const Gio::DBus::InterfaceVTable interface_vtable;
|
||||||
|
Loading…
Reference in New Issue
Block a user