Skip to content

Commit 2fe0972

Browse files
authored
Portal: add io.elementary.settings-daemon.datetime (#41)
1 parent b6ce9da commit 2fe0972

2 files changed

Lines changed: 47 additions & 7 deletions

File tree

data/io.elementary.settings-daemon.gschema.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,12 @@
4141
<description></description>
4242
</key>
4343
</schema>
44+
45+
<schema path="/io/elementary/settings-daemon/datetime/" id="io.elementary.settings-daemon.datetime">
46+
<key type="b" name="show-weeks">
47+
<default>false</default>
48+
<summary>show week numbers.</summary>
49+
<description>If this is set to true, week numbers will be shown in the calendar.</description>
50+
</key>
51+
</schema>
4452
</schemalist>

settings-portal/Settings.vala

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -97,13 +97,30 @@ public class SettingsDaemon.Settings : GLib.Object {
9797

9898
public signal void setting_changed (string namespace, string key, GLib.Variant value);
9999

100+
private HashTable<string, GLib.Settings> settings;
100101
private AccountsServiceMonitor monitor;
101102

103+
private const string[] SUPPORTED_SCHEMAS = {
104+
"io.elementary.settings-daemon.datetime",
105+
"org.freedesktop.appearance"
106+
};
107+
102108
construct {
103109
monitor = new AccountsServiceMonitor ();
104110
monitor.notify["color-scheme"].connect (() => {
105111
setting_changed ("org.freedesktop.appearance", "color-scheme", get_color_scheme ());
106112
});
113+
114+
settings = new HashTable<string, GLib.Settings> (str_hash, str_equal);
115+
foreach (var schema in SUPPORTED_SCHEMAS) {
116+
if (SettingsSchemaSource.get_default ().lookup (schema, true) != null) {
117+
settings[schema] = new GLib.Settings (schema);
118+
settings[schema].changed.connect ((key) => {
119+
var @value = settings[schema].get_value (key);
120+
setting_changed (schema, key, value);
121+
});
122+
}
123+
}
107124
}
108125

109126
private bool namespace_matches (string namespace, string[] patterns) {
@@ -132,20 +149,35 @@ public class SettingsDaemon.Settings : GLib.Object {
132149
public async GLib.HashTable<string, GLib.HashTable<string, GLib.Variant>> read_all (string[] namespaces) throws GLib.DBusError, GLib.IOError {
133150
var ret = new GLib.HashTable<string, GLib.HashTable<string, GLib.Variant>> (str_hash, str_equal);
134151

135-
if (namespace_matches ("org.freedesktop.appearance", namespaces)) {
136-
var dict = new HashTable<string, Variant> (str_hash, str_equal);
137-
138-
dict.insert ("color-scheme", get_color_scheme ());
152+
foreach (var schema in SUPPORTED_SCHEMAS) {
153+
if (namespace_matches (schema, namespaces)) {
154+
var dict = new HashTable<string, Variant> (str_hash, str_equal);
155+
156+
if (schema == "org.freedesktop.appearance") {
157+
dict.insert ("color-scheme", get_color_scheme ());
158+
} else {
159+
var setting = settings[schema];
160+
foreach (var key in setting.settings_schema.list_keys ()) {
161+
dict.insert (key, setting.get_value (key));
162+
}
163+
}
139164

140-
ret.insert ("org.freedesktop.appearance", dict);
165+
ret.insert (schema, dict);
166+
}
141167
}
142168

143169
return ret;
144170
}
145171

146172
public async GLib.Variant read (string namespace, string key) throws GLib.DBusError, GLib.Error {
147-
if (namespace == "org.freedesktop.appearance" && key == "color-scheme") {
148-
return get_color_scheme ();
173+
if (namespace in SUPPORTED_SCHEMAS) {
174+
if (namespace == "org.freedesktop.appearance" && key == "color-scheme") {
175+
return get_color_scheme ();
176+
} else {
177+
if (settings[namespace].settings_schema.has_key (key)) {
178+
return settings[namespace].get_value (key);
179+
}
180+
}
149181
}
150182

151183
debug ("Attempted to read unknown namespace/key pair: %s %s", namespace, key);

0 commit comments

Comments
 (0)