Ring Daemon
Loading...
Searching...
No Matches
preferences.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2004-2026 Savoir-faire Linux Inc.
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <https://www.gnu.org/licenses/>.
16 */
17
18#ifndef __PREFERENCE_H__
19#define __PREFERENCE_H__
20
21#include "config/serializable.h"
22#include "client/jami_signal.h"
23#include <string>
24#include <set>
25#include <vector>
26#include <chrono>
27
28namespace YAML {
29class Emitter;
30class Node;
31} // namespace YAML
32
33extern "C" {
34struct pjsip_msg;
35}
36
37namespace jami {
38
39class AudioLayer;
40
42{
43public:
44 static const char* const DFT_ZONE;
45 static const char* const REGISTRATION_EXPIRE_KEY;
46
48
49 void serialize(YAML::Emitter& out) const override;
50 void unserialize(const YAML::Node& in) override;
51
52 const std::string& getAccountOrder() const { return accountOrder_; }
53
54 // flush invalid accountIDs from account order
55 void verifyAccountOrder(const std::vector<std::string>& accounts);
56
57 void addAccount(const std::string& acc);
58 void removeAccount(const std::string& acc);
59
60 void setAccountOrder(const std::string& ord) { accountOrder_ = ord; }
61
62 bool isAccountPending(const std::string& accountId) const;
63 bool addPendingAccountId(const std::string& accountId);
64 bool removePendingAccountId(const std::string& accountId);
65
66 int getHistoryLimit() const { return historyLimit_; }
67
68 void setHistoryLimit(int lim) { historyLimit_ = lim; }
69
70 std::chrono::seconds getRingingTimeout() const { return std::chrono::seconds(ringingTimeout_); }
71
72 void setRingingTimeout(std::chrono::seconds timeout) { ringingTimeout_ = static_cast<int>(timeout.count()); }
73
74 int getHistoryMaxCalls() const { return historyMaxCalls_; }
75
76 void setHistoryMaxCalls(int max) { historyMaxCalls_ = max; }
77
78 std::string getZoneToneChoice() const { return zoneToneChoice_; }
79
80 void setZoneToneChoice(const std::string& str) { zoneToneChoice_ = str; }
81
82 int getPortNum() const { return portNum_; }
83
84 void setPortNum(int port) { portNum_ = port; }
85
86 bool getSearchBarDisplay() const { return searchBarDisplay_; }
87
88 void setSearchBarDisplay(bool search) { searchBarDisplay_ = search; }
89
90 bool getMd5Hash() const { return md5Hash_; }
91 void setMd5Hash(bool md5) { md5Hash_ = md5; }
92
93private:
94 std::string accountOrder_;
95 int historyLimit_;
96 int historyMaxCalls_;
97 int ringingTimeout_;
98 std::string zoneToneChoice_;
99 int portNum_;
100 bool searchBarDisplay_;
101 bool md5Hash_;
102 std::set<std::string> pendingAccountIds_;
103 constexpr static const char* const CONFIG_LABEL = "preferences";
104};
105
107{
108public:
110
111 void serialize(YAML::Emitter& out) const override;
112 void unserialize(const YAML::Node& in) override;
113
114 bool getPlayDtmf() const { return playDtmf_; }
115
116 void setPlayDtmf(bool dtmf) { playDtmf_ = dtmf; }
117
118 bool getPlayTones() const { return playTones_; }
119
120 void setPlayTones(bool tone) { playTones_ = tone; }
121
122 int getPulseLength() const { return pulseLength_; }
123
124 void setPulseLength(int length) { pulseLength_ = length; }
125
126private:
127 bool playDtmf_;
128 bool playTones_;
129 int pulseLength_;
130 constexpr static const char* const CONFIG_LABEL = "voipPreferences";
131};
132
134{
135public:
138
139 static std::vector<std::string> getSupportedAudioManagers();
140
141 const std::string& getAudioApi() const { return audioApi_; }
142
143 void setAudioApi(const std::string& api) { audioApi_ = api; }
144
145 void serialize(YAML::Emitter& out) const override;
146
147 void unserialize(const YAML::Node& in) override;
148
149 // alsa preference
150 int getAlsaCardin() const { return alsaCardin_; }
151
152 void setAlsaCardin(int c) { alsaCardin_ = c; }
153
154 int getAlsaCardout() const { return alsaCardout_; }
155
156 void setAlsaCardout(int c) { alsaCardout_ = c; }
157
158 int getAlsaCardRingtone() const { return alsaCardRingtone_; }
159
160 void setAlsaCardRingtone(int c) { alsaCardRingtone_ = c; }
161
162 const std::string& getAlsaPlugin() const { return alsaPlugin_; }
163
164 void setAlsaPlugin(const std::string& p) { alsaPlugin_ = p; }
165
166 int getAlsaSmplrate() const { return alsaSmplrate_; }
167
168 void setAlsaSmplrate(int r) { alsaSmplrate_ = r; }
169
170 // pulseaudio preference
171 const std::string& getPulseDevicePlayback() const { return pulseDevicePlayback_; }
172
173 void setPulseDevicePlayback(const std::string& p) { pulseDevicePlayback_ = p; }
174
175 const std::string& getPulseDeviceRecord() const { return pulseDeviceRecord_; }
176 void setPulseDeviceRecord(const std::string& r) { pulseDeviceRecord_ = r; }
177
178 const std::string& getPulseDeviceRingtone() const { return pulseDeviceRingtone_; }
179
180 void setPulseDeviceRingtone(const std::string& r) { pulseDeviceRingtone_ = r; }
181
182 // portaudio preference
183 const std::string& getPortAudioDevicePlayback() const { return portaudioDevicePlayback_; }
184
185 void setPortAudioDevicePlayback(const std::string& p) { portaudioDevicePlayback_ = p; }
186
187 const std::string& getPortAudioDeviceRecord() const { return portaudioDeviceRecord_; }
188
189 void setPortAudioDeviceRecord(const std::string& r) { portaudioDeviceRecord_ = r; }
190
191 const std::string& getPortAudioDeviceRingtone() const { return portaudioDeviceRingtone_; }
192
193 void setPortAudioDeviceRingtone(const std::string& r) { portaudioDeviceRingtone_ = r; }
194
195 // general preference
196 const std::string& getRecordPath() const { return recordpath_; }
197
198 // Returns true if directory is writeable
199 bool setRecordPath(const std::string& r);
200
201 bool getIsAlwaysRecording() const { return alwaysRecording_; }
202
203 void setIsAlwaysRecording(bool rec) { alwaysRecording_ = rec; }
204
205 double getVolumemic() const { return volumemic_; }
206 void setVolumemic(double m) { volumemic_ = m; }
207
208 double getVolumespkr() const { return volumespkr_; }
209 void setVolumespkr(double s) { volumespkr_ = s; }
210
211 bool isAGCEnabled() const { return agcEnabled_; }
212
213 void setAGCState(bool enabled) { agcEnabled_ = enabled; }
214
215 const std::string& getNoiseReduce() const { return denoise_; }
216
217 void setNoiseReduce(const std::string& enabled) { denoise_ = enabled; }
218
219 bool getCaptureMuted() const { return captureMuted_; }
220
221 void setCaptureMuted(bool muted) { captureMuted_ = muted; }
222
223 bool getPlaybackMuted() const { return playbackMuted_; }
224
225 void setPlaybackMuted(bool muted) { playbackMuted_ = muted; }
226
227 const std::string& getAudioProcessor() const { return audioProcessor_; }
228
229 void setAudioProcessor(const std::string& ap) { audioProcessor_ = ap; }
230
231 bool getVadEnabled() const { return vadEnabled_; }
232
233 void setVad(bool enable) { vadEnabled_ = enable; }
234
235 const std::string& getEchoCanceller() const { return echoCanceller_; }
236
237 void setEchoCancel(const std::string& canceller) { echoCanceller_ = canceller; }
238
239private:
240 std::string audioApi_;
241
242 // alsa preference
243 int alsaCardin_;
244 int alsaCardout_;
245 int alsaCardRingtone_;
246 std::string alsaPlugin_;
247 int alsaSmplrate_;
248
249 // pulseaudio preference
250 std::string pulseDevicePlayback_;
251 std::string pulseDeviceRecord_;
252 std::string pulseDeviceRingtone_;
253
254 // portaudio preference
255 std::string portaudioDevicePlayback_;
256 std::string portaudioDeviceRecord_;
257 std::string portaudioDeviceRingtone_;
258
259 // general preference
260 std::string recordpath_;
261 bool alwaysRecording_;
262 double volumemic_;
263 double volumespkr_;
264
265 // audio processor preferences
266 std::string audioProcessor_;
267 std::string denoise_;
268 bool agcEnabled_;
269 bool vadEnabled_;
270 std::string echoCanceller_;
271
272 bool captureMuted_;
273 bool playbackMuted_;
274 constexpr static const char* const CONFIG_LABEL = "audio";
275};
276
277#ifdef ENABLE_VIDEO
278class VideoPreferences : public Serializable
279{
280public:
282
283 void serialize(YAML::Emitter& out) const override;
284 void unserialize(const YAML::Node& in) override;
285
286 bool getDecodingAccelerated() const { return decodingAccelerated_; }
287
289 {
293 return true;
294 }
295 return false;
296 }
297
298 bool getEncodingAccelerated() const { return encodingAccelerated_; }
299
301 {
305 return true;
306 }
307 return false;
308 }
309
310 bool getRecordPreview() const { return recordPreview_; }
311
312 void setRecordPreview(bool rec) { recordPreview_ = rec; }
313
314 int getRecordQuality() const { return recordQuality_; }
315
316 void setRecordQuality(int rec) { recordQuality_ = rec; }
317
318 const std::string& getConferenceResolution() const { return conferenceResolution_; }
319
320 void setConferenceResolution(const std::string& res) { conferenceResolution_ = res; }
321
322private:
325 bool recordPreview_;
326 int recordQuality_;
327 std::string conferenceResolution_;
328 constexpr static const char* const CONFIG_LABEL = "video";
329};
330#endif // ENABLE_VIDEO
331
332#ifdef ENABLE_PLUGIN
333class PluginPreferences : public Serializable
334{
335public:
337
338 void serialize(YAML::Emitter& out) const override;
339 void unserialize(const YAML::Node& in) override;
340
341 bool getPluginsEnabled() const { return pluginsEnabled_; }
342
344
345 std::vector<std::string> getLoadedPlugins() const
346 {
347 std::vector<std::string> v(loadedPlugins_.begin(), loadedPlugins_.end());
348 return v;
349 }
350
351 std::vector<std::string> getInstalledPlugins() const
352 {
353 return std::vector<std::string>(installedPlugins_.begin(), installedPlugins_.end());
354 }
355
356 void saveStateLoadedPlugins(std::string plugin, bool loaded)
357 {
358 if (loaded) {
359 if (loadedPlugins_.find(plugin) != loadedPlugins_.end())
360 return;
361 loadedPlugins_.emplace(plugin);
362 } else {
363 auto it = loadedPlugins_.find(plugin);
364 if (it != loadedPlugins_.end())
365 loadedPlugins_.erase(it);
366 }
367 }
368
369private:
370 bool pluginsEnabled_;
371 std::set<std::string> installedPlugins_;
372 std::set<std::string> loadedPlugins_;
373 constexpr static const char* const CONFIG_LABEL = "plugins";
374};
375#endif // ENABLE_PLUGIN
376
377} // namespace jami
378
379#endif
const std::string & getAudioApi() const
int getAlsaCardout() const
bool getIsAlwaysRecording() const
bool getVadEnabled() const
int getAlsaCardin() const
void setVad(bool enable)
void setPortAudioDeviceRecord(const std::string &r)
AudioLayer * createAudioLayer()
void setIsAlwaysRecording(bool rec)
void setPulseDevicePlayback(const std::string &p)
int getAlsaCardRingtone() const
void setNoiseReduce(const std::string &enabled)
const std::string & getPortAudioDeviceRecord() const
void setVolumespkr(double s)
double getVolumespkr() const
bool getCaptureMuted() const
int getAlsaSmplrate() const
bool getPlaybackMuted() const
void setEchoCancel(const std::string &canceller)
const std::string & getPulseDeviceRecord() const
bool setRecordPath(const std::string &r)
const std::string & getPortAudioDeviceRingtone() const
void setAudioApi(const std::string &api)
void setPulseDeviceRingtone(const std::string &r)
bool isAGCEnabled() const
void setAlsaCardout(int c)
void setPortAudioDeviceRingtone(const std::string &r)
const std::string & getPulseDeviceRingtone() const
void setCaptureMuted(bool muted)
void setAlsaCardin(int c)
void setPulseDeviceRecord(const std::string &r)
void setAGCState(bool enabled)
void setAlsaSmplrate(int r)
const std::string & getEchoCanceller() const
void setAudioProcessor(const std::string &ap)
void setAlsaCardRingtone(int c)
void setPortAudioDevicePlayback(const std::string &p)
void unserialize(const YAML::Node &in) override
static std::vector< std::string > getSupportedAudioManagers()
const std::string & getNoiseReduce() const
void setAlsaPlugin(const std::string &p)
const std::string & getAlsaPlugin() const
void serialize(YAML::Emitter &out) const override
const std::string & getPortAudioDevicePlayback() const
void setPlaybackMuted(bool muted)
double getVolumemic() const
const std::string & getPulseDevicePlayback() const
const std::string & getAudioProcessor() const
const std::string & getRecordPath() const
void setVolumemic(double m)
void setRingingTimeout(std::chrono::seconds timeout)
Definition preferences.h:72
void setHistoryMaxCalls(int max)
Definition preferences.h:76
void setAccountOrder(const std::string &ord)
Definition preferences.h:60
void verifyAccountOrder(const std::vector< std::string > &accounts)
int getPortNum() const
Definition preferences.h:82
void setHistoryLimit(int lim)
Definition preferences.h:68
bool removePendingAccountId(const std::string &accountId)
static const char *const DFT_ZONE
Definition preferences.h:44
void removeAccount(const std::string &acc)
void setPortNum(int port)
Definition preferences.h:84
bool getMd5Hash() const
Definition preferences.h:90
void unserialize(const YAML::Node &in) override
bool addPendingAccountId(const std::string &accountId)
void serialize(YAML::Emitter &out) const override
int getHistoryLimit() const
Definition preferences.h:66
Preferences()
Default sound card index.
static const char *const REGISTRATION_EXPIRE_KEY
Definition preferences.h:45
void setMd5Hash(bool md5)
Definition preferences.h:91
int getHistoryMaxCalls() const
Definition preferences.h:74
void setSearchBarDisplay(bool search)
Definition preferences.h:88
bool getSearchBarDisplay() const
Definition preferences.h:86
std::chrono::seconds getRingingTimeout() const
Definition preferences.h:70
const std::string & getAccountOrder() const
Definition preferences.h:52
void setZoneToneChoice(const std::string &str)
Definition preferences.h:80
void addAccount(const std::string &acc)
std::string getZoneToneChoice() const
Definition preferences.h:78
bool isAccountPending(const std::string &accountId) const
void setPulseLength(int length)
void setPlayDtmf(bool dtmf)
void serialize(YAML::Emitter &out) const override
bool getPlayTones() const
void unserialize(const YAML::Node &in) override
void setPlayTones(bool tone)
int getPulseLength() const
bool getPlayDtmf() const
void emitSignal(Args... args)
Definition jami_signal.h:64
int32_t getRecordQuality()
bool getEncodingAccelerated()
std::vector< std::string > getLoadedPlugins()
void setEncodingAccelerated(bool state)
void setRecordPreview(bool rec)
void setDecodingAccelerated(bool state)
void setPluginsEnabled(bool state)
void setRecordQuality(int32_t quality)
std::vector< std::string > getInstalledPlugins()