Ring Daemon 16.0.0
Loading...
Searching...
No Matches
preferences.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2004-2025 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/ring_signal.h"
23#include <string>
24#include <map>
25#include <set>
26#include <vector>
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 int getHistoryLimit() const { return historyLimit_; }
63
64 void setHistoryLimit(int lim) { historyLimit_ = lim; }
65
66 int getRingingTimeout() const { return ringingTimeout_; }
67
68 void setRingingTimeout(int timeout) { ringingTimeout_ = timeout; }
69
70 int getHistoryMaxCalls() const { return historyMaxCalls_; }
71
72 void setHistoryMaxCalls(int max) { historyMaxCalls_ = max; }
73
74 std::string getZoneToneChoice() const { return zoneToneChoice_; }
75
76 void setZoneToneChoice(const std::string& str) { zoneToneChoice_ = str; }
77
78 int getPortNum() const { return portNum_; }
79
80 void setPortNum(int port) { portNum_ = port; }
81
82 bool getSearchBarDisplay() const { return searchBarDisplay_; }
83
84 void setSearchBarDisplay(bool search) { searchBarDisplay_ = search; }
85
86 bool getMd5Hash() const { return md5Hash_; }
87 void setMd5Hash(bool md5) { md5Hash_ = md5; }
88
89private:
90 std::string accountOrder_;
91 int historyLimit_;
92 int historyMaxCalls_;
93 int ringingTimeout_;
94 std::string zoneToneChoice_;
95 int portNum_;
96 bool searchBarDisplay_;
97 bool md5Hash_;
98 constexpr static const char* const CONFIG_LABEL = "preferences";
99};
100
102{
103public:
105
106 void serialize(YAML::Emitter& out) const override;
107 void unserialize(const YAML::Node& in) override;
108
109 bool getPlayDtmf() const { return playDtmf_; }
110
111 void setPlayDtmf(bool dtmf) { playDtmf_ = dtmf; }
112
113 bool getPlayTones() const { return playTones_; }
114
115 void setPlayTones(bool tone) { playTones_ = tone; }
116
117 int getPulseLength() const { return pulseLength_; }
118
119 void setPulseLength(int length) { pulseLength_ = length; }
120
121private:
122 bool playDtmf_;
123 bool playTones_;
124 int pulseLength_;
125 constexpr static const char* const CONFIG_LABEL = "voipPreferences";
126};
127
129{
130public:
133
134 static std::vector<std::string> getSupportedAudioManagers();
135
136 const std::string& getAudioApi() const { return audioApi_; }
137
138 void setAudioApi(const std::string& api) { audioApi_ = api; }
139
140 void serialize(YAML::Emitter& out) const override;
141
142 void unserialize(const YAML::Node& in) override;
143
144 // alsa preference
145 int getAlsaCardin() const { return alsaCardin_; }
146
147 void setAlsaCardin(int c) { alsaCardin_ = c; }
148
149 int getAlsaCardout() const { return alsaCardout_; }
150
151 void setAlsaCardout(int c) { alsaCardout_ = c; }
152
153 int getAlsaCardRingtone() const { return alsaCardRingtone_; }
154
155 void setAlsaCardRingtone(int c) { alsaCardRingtone_ = c; }
156
157 const std::string& getAlsaPlugin() const { return alsaPlugin_; }
158
159 void setAlsaPlugin(const std::string& p) { alsaPlugin_ = p; }
160
161 int getAlsaSmplrate() const { return alsaSmplrate_; }
162
163 void setAlsaSmplrate(int r) { alsaSmplrate_ = r; }
164
165 // pulseaudio preference
166 const std::string& getPulseDevicePlayback() const { return pulseDevicePlayback_; }
167
168 void setPulseDevicePlayback(const std::string& p) { pulseDevicePlayback_ = p; }
169
170 const std::string& getPulseDeviceRecord() const { return pulseDeviceRecord_; }
171 void setPulseDeviceRecord(const std::string& r) { pulseDeviceRecord_ = r; }
172
173 const std::string& getPulseDeviceRingtone() const { return pulseDeviceRingtone_; }
174
175 void setPulseDeviceRingtone(const std::string& r) { pulseDeviceRingtone_ = r; }
176
177 // portaudio preference
178 const std::string& getPortAudioDevicePlayback() const { return portaudioDevicePlayback_; }
179
180 void setPortAudioDevicePlayback(const std::string& p) { portaudioDevicePlayback_ = p; }
181
182 const std::string& getPortAudioDeviceRecord() const { return portaudioDeviceRecord_; }
183
184 void setPortAudioDeviceRecord(const std::string& r) { portaudioDeviceRecord_ = r; }
185
186 const std::string& getPortAudioDeviceRingtone() const { return portaudioDeviceRingtone_; }
187
188 void setPortAudioDeviceRingtone(const std::string& r) { portaudioDeviceRingtone_ = r; }
189
190 // general preference
191 const std::string& getRecordPath() const { return recordpath_; }
192
193 // Returns true if directory is writeable
194 bool setRecordPath(const std::string& r);
195
196 bool getIsAlwaysRecording() const { return alwaysRecording_; }
197
198 void setIsAlwaysRecording(bool rec) { alwaysRecording_ = rec; }
199
200 double getVolumemic() const { return volumemic_; }
201 void setVolumemic(double m) { volumemic_ = m; }
202
203 double getVolumespkr() const { return volumespkr_; }
204 void setVolumespkr(double s) { volumespkr_ = s; }
205
206 bool isAGCEnabled() const { return agcEnabled_; }
207
208 void setAGCState(bool enabled) { agcEnabled_ = enabled; }
209
210 const std::string& getNoiseReduce() const { return denoise_; }
211
212 void setNoiseReduce(const std::string& enabled) { denoise_ = enabled; }
213
214 bool getCaptureMuted() const { return captureMuted_; }
215
216 void setCaptureMuted(bool muted) { captureMuted_ = muted; }
217
218 bool getPlaybackMuted() const { return playbackMuted_; }
219
220 void setPlaybackMuted(bool muted) { playbackMuted_ = muted; }
221
222 const std::string& getAudioProcessor() const { return audioProcessor_; }
223
224 void setAudioProcessor(const std::string& ap) { audioProcessor_ = ap; }
225
226 bool getVadEnabled() const { return vadEnabled_; }
227
228 void setVad(bool enable) { vadEnabled_ = enable; }
229
230 const std::string& getEchoCanceller() const { return echoCanceller_; }
231
232 void setEchoCancel(std::string& canceller) { echoCanceller_ = canceller; }
233
234private:
235 std::string audioApi_;
236
237 // alsa preference
238 int alsaCardin_;
239 int alsaCardout_;
240 int alsaCardRingtone_;
241 std::string alsaPlugin_;
242 int alsaSmplrate_;
243
244 // pulseaudio preference
245 std::string pulseDevicePlayback_;
246 std::string pulseDeviceRecord_;
247 std::string pulseDeviceRingtone_;
248
249 // portaudio preference
250 std::string portaudioDevicePlayback_;
251 std::string portaudioDeviceRecord_;
252 std::string portaudioDeviceRingtone_;
253
254 // general preference
255 std::string recordpath_;
256 bool alwaysRecording_;
257 double volumemic_;
258 double volumespkr_;
259
260 // audio processor preferences
261 std::string audioProcessor_;
262 std::string denoise_;
263 bool agcEnabled_;
264 bool vadEnabled_;
265 std::string echoCanceller_;
266
267 bool captureMuted_;
268 bool playbackMuted_;
269 constexpr static const char* const CONFIG_LABEL = "audio";
270};
271
272#ifdef ENABLE_VIDEO
273class VideoPreferences : public Serializable
274{
275public:
277
278 void serialize(YAML::Emitter& out) const override;
279 void unserialize(const YAML::Node& in) override;
280
281 bool getDecodingAccelerated() const { return decodingAccelerated_; }
282
284 {
288 return true;
289 }
290 return false;
291 }
292
293 bool getEncodingAccelerated() const { return encodingAccelerated_; }
294
296 {
300 return true;
301 }
302 return false;
303 }
304
305 bool getRecordPreview() const { return recordPreview_; }
306
307 void setRecordPreview(bool rec) { recordPreview_ = rec; }
308
309 int getRecordQuality() const { return recordQuality_; }
310
311 void setRecordQuality(int rec) { recordQuality_ = rec; }
312
313 const std::string& getConferenceResolution() const { return conferenceResolution_; }
314
315 void setConferenceResolution(const std::string& res) { conferenceResolution_ = res; }
316
317private:
320 bool recordPreview_;
321 int recordQuality_;
322 std::string conferenceResolution_;
323 constexpr static const char* const CONFIG_LABEL = "video";
324};
325#endif // ENABLE_VIDEO
326
327#ifdef ENABLE_PLUGIN
328class PluginPreferences : public Serializable
329{
330public:
332
333 void serialize(YAML::Emitter& out) const override;
334 void unserialize(const YAML::Node& in) override;
335
336 bool getPluginsEnabled() const { return pluginsEnabled_; }
337
339
340 std::vector<std::string> getLoadedPlugins() const
341 {
342 std::vector<std::string> v(loadedPlugins_.begin(), loadedPlugins_.end());
343 return v;
344 }
345
346 std::vector<std::string> getInstalledPlugins() const
347 {
348 return std::vector<std::string>(installedPlugins_.begin(), installedPlugins_.end());
349 }
350
351 void saveStateLoadedPlugins(std::string plugin, bool loaded)
352 {
353 if (loaded) {
354 if (loadedPlugins_.find(plugin) != loadedPlugins_.end())
355 return;
356 loadedPlugins_.emplace(plugin);
357 } else {
358 auto it = loadedPlugins_.find(plugin);
359 if (it != loadedPlugins_.end())
360 loadedPlugins_.erase(it);
361 }
362 }
363
364private:
365 bool pluginsEnabled_;
366 std::set<std::string> installedPlugins_;
367 std::set<std::string> loadedPlugins_;
368 constexpr static const char* const CONFIG_LABEL = "plugins";
369};
370#endif // ENABLE_PLUGIN
371
372} // namespace jami
373
374#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
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
void setEchoCancel(std::string &canceller)
const std::string & getRecordPath() const
void setVolumemic(double m)
void setHistoryMaxCalls(int max)
Definition preferences.h:72
void setAccountOrder(const std::string &ord)
Definition preferences.h:60
void verifyAccountOrder(const std::vector< std::string > &accounts)
int getPortNum() const
Definition preferences.h:78
void setRingingTimeout(int timeout)
Definition preferences.h:68
void setHistoryLimit(int lim)
Definition preferences.h:64
static const char *const DFT_ZONE
Definition preferences.h:44
void removeAccount(const std::string &acc)
void setPortNum(int port)
Definition preferences.h:80
bool getMd5Hash() const
Definition preferences.h:86
void unserialize(const YAML::Node &in) override
void serialize(YAML::Emitter &out) const override
int getHistoryLimit() const
Definition preferences.h:62
int getRingingTimeout() 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:87
int getHistoryMaxCalls() const
Definition preferences.h:70
void setSearchBarDisplay(bool search)
Definition preferences.h:84
bool getSearchBarDisplay() const
Definition preferences.h:82
const std::string & getAccountOrder() const
Definition preferences.h:52
void setZoneToneChoice(const std::string &str)
Definition preferences.h:76
void addAccount(const std::string &acc)
std::string getZoneToneChoice() const
Definition preferences.h:74
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 ring_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()