Serenity Operating System
1/*
2 * Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include <ConfigServer/ConfigClientEndpoint.h>
10#include <ConfigServer/ConfigServerEndpoint.h>
11#include <LibCore/Promise.h>
12#include <LibCore/StandardPaths.h>
13#include <LibIPC/ConnectionToServer.h>
14
15namespace Config {
16
17class Client final
18 : public IPC::ConnectionToServer<ConfigClientEndpoint, ConfigServerEndpoint>
19 , public ConfigClientEndpoint {
20 IPC_CLIENT_CONNECTION(Client, "/tmp/session/%sid/portal/config"sv)
21
22public:
23 void pledge_domains(Vector<DeprecatedString> const&);
24 void monitor_domain(DeprecatedString const&);
25
26 Vector<DeprecatedString> list_groups(StringView domain);
27 Vector<DeprecatedString> list_keys(StringView domain, StringView group);
28
29 DeprecatedString read_string(StringView domain, StringView group, StringView key, StringView fallback);
30 i32 read_i32(StringView domain, StringView group, StringView key, i32 fallback);
31 u32 read_u32(StringView domain, StringView group, StringView key, u32 fallback);
32 bool read_bool(StringView domain, StringView group, StringView key, bool fallback);
33
34 void write_string(StringView domain, StringView group, StringView key, StringView value);
35 void write_i32(StringView domain, StringView group, StringView key, i32 value);
36 void write_u32(StringView domain, StringView group, StringView key, u32 value);
37 void write_bool(StringView domain, StringView group, StringView key, bool value);
38 void remove_key(StringView domain, StringView group, StringView key);
39 void remove_group(StringView domain, StringView group);
40 void add_group(StringView domain, StringView group);
41
42 static Client& the();
43
44private:
45 explicit Client(NonnullOwnPtr<Core::LocalSocket> socket)
46 : IPC::ConnectionToServer<ConfigClientEndpoint, ConfigServerEndpoint>(*this, move(socket))
47 {
48 }
49
50 void notify_changed_string_value(DeprecatedString const& domain, DeprecatedString const& group, DeprecatedString const& key, DeprecatedString const& value) override;
51 void notify_changed_i32_value(DeprecatedString const& domain, DeprecatedString const& group, DeprecatedString const& key, i32 value) override;
52 void notify_changed_u32_value(DeprecatedString const& domain, DeprecatedString const& group, DeprecatedString const& key, u32 value) override;
53 void notify_changed_bool_value(DeprecatedString const& domain, DeprecatedString const& group, DeprecatedString const& key, bool value) override;
54 void notify_removed_key(DeprecatedString const& domain, DeprecatedString const& group, DeprecatedString const& key) override;
55 void notify_removed_group(DeprecatedString const& domain, DeprecatedString const& group) override;
56 void notify_added_group(DeprecatedString const& domain, DeprecatedString const& group) override;
57};
58
59inline Vector<DeprecatedString> list_groups(StringView domain)
60{
61 return Client::the().list_groups(domain);
62}
63
64inline Vector<DeprecatedString> list_keys(StringView domain, StringView group)
65{
66 return Client::the().list_keys(domain, group);
67}
68
69inline DeprecatedString read_string(StringView domain, StringView group, StringView key, StringView fallback = {})
70{
71 return Client::the().read_string(domain, group, key, fallback);
72}
73
74inline i32 read_i32(StringView domain, StringView group, StringView key, i32 fallback = 0)
75{
76 return Client::the().read_i32(domain, group, key, fallback);
77}
78
79inline u32 read_u32(StringView domain, StringView group, StringView key, u32 fallback = 0)
80{
81 return Client::the().read_u32(domain, group, key, fallback);
82}
83
84inline bool read_bool(StringView domain, StringView group, StringView key, bool fallback = false)
85{
86 return Client::the().read_bool(domain, group, key, fallback);
87}
88
89inline void write_string(StringView domain, StringView group, StringView key, StringView value)
90{
91 Client::the().write_string(domain, group, key, value);
92}
93
94inline void write_i32(StringView domain, StringView group, StringView key, i32 value)
95{
96 Client::the().write_i32(domain, group, key, value);
97}
98
99inline void write_u32(StringView domain, StringView group, StringView key, u32 value)
100{
101 Client::the().write_u32(domain, group, key, value);
102}
103
104inline void write_bool(StringView domain, StringView group, StringView key, bool value)
105{
106 Client::the().write_bool(domain, group, key, value);
107}
108
109inline void remove_key(StringView domain, StringView group, StringView key)
110{
111 Client::the().remove_key(domain, group, key);
112}
113
114inline void remove_group(StringView domain, StringView group)
115{
116 Client::the().remove_group(domain, group);
117}
118
119inline void add_group(StringView domain, StringView group)
120{
121 Client::the().add_group(domain, group);
122}
123
124inline void pledge_domains(Vector<DeprecatedString> const& domains)
125{
126 Client::the().pledge_domains(domains);
127}
128
129inline void pledge_domain(DeprecatedString const& domain)
130{
131 Client::the().pledge_domains({ domain });
132}
133
134inline void monitor_domain(DeprecatedString const& domain)
135{
136 Client::the().monitor_domain(domain);
137}
138
139}