summaryrefslogtreecommitdiff
path: root/src/slack-timedate.h
blob: c80cbf2538b2e88f1d28af8c4d3abf90c10f40bc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/*
 * Copyright (C) 2013-2024  Eugen Wissner <belka@caraus.de>
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

#include <dbus/dbus.h>
#include <glibmm.h>
#include <gio/gio.h>

#define BUS_NAME "org.freedesktop.timedate1"
#define BUS_PATH "/org/freedesktop/timedate1"
#define BUS_INTERFACE "org.freedesktop.timedate1"

#define INTROSPECTION_XML DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE \
	"<node>\n" \
	" <interface name=\"org.freedesktop.timedate1\">\n"             \
	"  <property name=\"Timezone\" type=\"s\" access=\"read\"/>\n"  \
	"  <property name=\"LocalRTC\" type=\"b\" access=\"read\"/>\n"  \
	"  <property name=\"NTP\" type=\"b\" access=\"read\"/>\n"       \
	"  <method name=\"SetTime\">\n"                                 \
	"   <arg name=\"usec_utc\" type=\"x\" direction=\"in\"/>\n"     \
	"   <arg name=\"relative\" type=\"b\" direction=\"in\"/>\n"     \
	"   <arg name=\"user_interaction\" type=\"b\" direction=\"in\"/>\n" \
	"  </method>\n"                                                 \
	"  <method name=\"SetTimezone\">\n"                             \
	"   <arg name=\"timezone\" type=\"s\" direction=\"in\"/>\n"     \
	"   <arg name=\"user_interaction\" type=\"b\" direction=\"in\"/>\n" \
	"  </method>\n"                                                 \
	"  <method name=\"SetLocalRTC\">\n"                             \
	"   <arg name=\"local_rtc\" type=\"b\" direction=\"in\"/>\n"    \
	"   <arg name=\"fix_system\" type=\"b\" direction=\"in\"/>\n"   \
	"   <arg name=\"user_interaction\" type=\"b\" direction=\"in\"/>\n" \
	"  </method>\n"                                                 \
	"  <method name=\"SetNTP\">\n"                                  \
	"   <arg name=\"use_ntp\" type=\"b\" direction=\"in\"/>\n"      \
	"   <arg name=\"user_interaction\" type=\"b\" direction=\"in\"/>\n" \
	"  </method>\n"                                                 \
	"  <method name=\"ListTimezones\">\n"                           \
	"   <arg name=\"timezones\" type=\"as\" direction=\"out\"/>\n"  \
	"  </method>"                                                   \
	" </interface>\n"												\
	"</node>\n"

#define DEFAULT_EXIT_SEC 300

constexpr gint32 USEC_PER_SEC = 1000000ULL;
constexpr gint32 NSEC_PER_USEC = 1000ULL;

namespace dlackware::timedate
{
    constexpr const char *zoneinfo_database = "/usr/share/zoneinfo";

    class timedate1
    {
        void list_timezones(const std::string& prefix, std::vector<Glib::ustring>& accumulator);

    public:
        // Returns the timezones available on the system.
        Glib::Variant<std::vector<Glib::ustring>> list_timezones();

        // Returns the system time zone.
        Glib::ustring timezone();
    };
}

// Sets the system time zone to the one passed by the argument
// Returns true on success, false otherwise
gboolean slack_set_timezone (gchar *);

// Changes the date/time
// Takes the amount of seconds since UNIX epoche and 
// Returns true on success, false otherwise
gboolean slack_set_time(gint64 seconds_since_epoch, gboolean relative);

// Returns if the hardware clock is set to local time or not
gboolean slack_get_is_localtime ();

// Returns if NTP is enabled
gboolean slack_get_ntp ();

// Sets NTP
gboolean slack_set_ntp (gboolean);