diff options
| author | Eugen Wissner <belka@caraus.de> | 2024-06-10 16:42:09 +0200 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2024-06-10 16:42:09 +0200 |
| commit | 8d43caadcc0c659f15feadfb5c7575c08eb4c1b6 (patch) | |
| tree | 9129ec2567d98d3303677327b1c3acc0eb560594 /src/slack-timedate.cpp | |
| parent | ed6c87638f68331fece92aef4646ee6544eb6d41 (diff) | |
| download | slack-timedate-8d43caadcc0c659f15feadfb5c7575c08eb4c1b6.tar.gz | |
Use glibmm API for variants
Diffstat (limited to 'src/slack-timedate.cpp')
| -rw-r--r-- | src/slack-timedate.cpp | 69 |
1 files changed, 33 insertions, 36 deletions
diff --git a/src/slack-timedate.cpp b/src/slack-timedate.cpp index f2c637a..391c4dc 100644 --- a/src/slack-timedate.cpp +++ b/src/slack-timedate.cpp @@ -29,61 +29,59 @@ static void slack_method_call(const Glib::RefPtr<Gio::DBus::Connection>& connection, const Glib::ustring& sender, const Glib::ustring& object_path, const Glib::ustring& interface_name, const Glib::ustring& method_name, - const Glib::VariantContainerBase& parameters, const Glib::RefPtr<Gio::DBus::MethodInvocation>& invocation) { - gchar *timezone; - gboolean user_interaction, relative, is_localtime, use_ntp; - gint64 usec_utc; - auto parameters_copy = parameters.gobj_copy(); - + const Glib::VariantContainerBase& parameters, const Glib::RefPtr<Gio::DBus::MethodInvocation>& invocation) +{ // Set time zone if (method_name == "SetTimezone") { - g_variant_get(parameters_copy, "(&sb)", &timezone, &user_interaction); + Glib::Variant<Glib::ustring> timezone; std::error_code error_code; - if (dlackware::timedate::set_timezone(timezone, error_code)) + parameters.get_child(timezone, 0); + if (dlackware::timedate::set_timezone(timezone.get(), error_code)) { - g_dbus_method_invocation_return_value(invocation->gobj(), NULL); + invocation->return_value(Glib::VariantContainerBase()); } else { - g_dbus_method_invocation_return_error(invocation->gobj(), G_IO_ERROR, G_IO_ERROR_FAILED, - "Set time zone: %s", - error_code ? error_code.message().c_str() : "Zone info is not a regular file"); + Gio::DBus::Error error{ Gio::DBus::Error::FAILED, + error_code ? error_code.message().c_str() : "Zone info is not a regular file" }; + invocation->return_error(error); } - g_free (timezone); } else if (method_name == "SetTime") { - g_variant_get(parameters_copy, "(xbb)", &usec_utc, &relative, &user_interaction); + Glib::Variant<gint64> usec_utc; + Glib::Variant<bool> relative; - // Set time - //if (!slack_set_time (usec_utc, slack_get_is_localtime ())) { - if (slack_set_time(usec_utc, relative)) + parameters.get_child(usec_utc, 0); + parameters.get_child(relative, 1); + + if (slack_set_time(usec_utc.get(), relative.get())) { - g_dbus_method_invocation_return_value(invocation->gobj(), NULL); + invocation->return_value(Glib::VariantContainerBase()); } else { - g_dbus_method_invocation_return_error(invocation->gobj(), G_IO_ERROR, G_IO_ERROR_FAILED, - "Failed to set system clock"); + Gio::DBus::Error error{ Gio::DBus::Error::FAILED, "Failed to set system clock" }; + invocation->return_error(error); } } else if (method_name == "SetNTP") { - g_variant_get(parameters_copy, "(bb)", &use_ntp, &user_interaction); + Glib::Variant<bool> use_ntp; + + parameters.get_child(use_ntp, 0); // Enable NTP - if (slack_set_ntp (use_ntp)) + if (slack_set_ntp(use_ntp.get())) { - g_dbus_method_invocation_return_value(invocation->gobj(), NULL); + invocation->return_value(Glib::VariantContainerBase()); } else { - g_dbus_method_invocation_return_error(invocation->gobj(), - G_IO_ERROR, - G_IO_ERROR_FAILED, - "Error enabling NTP"); + Gio::DBus::Error error{ Gio::DBus::Error::FAILED, "Error enabling NTP" }; + invocation->return_error(error); } } else if (method_name == "ListTimezones") @@ -93,15 +91,14 @@ static void slack_method_call(const Glib::RefPtr<Gio::DBus::Connection>& connect auto return_tuple = Glib::Variant<std::vector<Glib::ustring>>::create_tuple({ dlackware::timedate::list_timezones() }); - g_dbus_method_invocation_return_value(invocation->gobj(), return_tuple.gobj()); + invocation->return_value(return_tuple); } catch (const std::exception& exception) { - g_dbus_method_invocation_return_error(invocation->gobj(), G_IO_ERROR, G_IO_ERROR_FAILED, - "List time zones: %s", exception.what()); + Gio::DBus::Error error{ Gio::DBus::Error::FAILED, exception.what() }; + invocation->return_error(error); } } - g_free(parameters_copy); } static void slack_get_property(Glib::VariantBase& result, const Glib::RefPtr<Gio::DBus::Connection>& connection, @@ -144,11 +141,11 @@ int main(int argc, char **argv) Glib::RefPtr<Glib::MainLoop> loop = Glib::MainLoop::create(false); Glib::signal_timeout().connect_seconds(sigc::bind(&timeout_callback, loop), DEFAULT_EXIT_SEC); - loop->run(); + loop->run(); Gio::DBus::unown_name(owner_id); - return EXIT_SUCCESS; + return EXIT_SUCCESS; } namespace dlackware::timedate @@ -228,10 +225,10 @@ namespace dlackware::timedate return Glib::ustring{ zone_copied_from.get() + strlen(zoneinfo_database) + 1 }; } - bool set_timezone(gchar *zone, std::error_code& ec) + bool set_timezone(const Glib::ustring& zone, std::error_code& ec) { ec.clear(); - auto zone_file = std::filesystem::path("/usr/share/zoneinfo") / zone; + auto zone_file = std::filesystem::path("/usr/share/zoneinfo") / zone.data(); if (!std::filesystem::is_regular_file(zone_file, ec) || ec) { @@ -297,7 +294,7 @@ gboolean slack_get_is_localtime() gboolean slack_get_ntp() { - return Glib::file_test("/etc/rc.d/rc.ntpd", Glib::FileTest::FILE_TEST_IS_EXECUTABLE); + return Glib::file_test("/etc/rc.d/rc.ntpd", Glib::FileTest::FILE_TEST_IS_EXECUTABLE); } gboolean slack_set_ntp(gboolean xntp) |
