40#include <TargetConditionals.h>
57#pragma GCC diagnostic push
58#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
59#include <yaml-cpp/yaml.h>
60#pragma GCC diagnostic pop
72constexpr const char*
const Preferences::CONFIG_LABEL;
90constexpr const char*
const VoipPreference::CONFIG_LABEL;
96constexpr const char*
const AudioPreference::CONFIG_LABEL;
114static constexpr const char*
AGC_KEY {
"automaticGainControl"};
117static constexpr const char*
VAD_KEY {
"voiceActivityDetection"};
122constexpr const char*
const VideoPreferences::CONFIG_LABEL;
132constexpr const char*
const PluginPreferences::CONFIG_LABEL;
148 , historyMaxCalls_(20)
149 , ringingTimeout_(30)
150 , zoneToneChoice_(DFT_ZONE)
151 , portNum_(sip_utils::DEFAULT_SIP_PORT)
152 , searchBarDisplay_(
true)
159 std::vector<std::string>
tokens;
163 for (
const auto c : accountOrder_) {
170 JAMI_DBG(
"Dropping nonexistent account %s", token.c_str());
178 accountOrder_.clear();
179 for (
const auto& t :
tokens)
180 accountOrder_ += t +
'/';
188 if (
not accountOrder_.empty())
198 const size_t start = accountOrder_.find(
oldAccountID +
"/");
199 if (start != std::string::npos)
206 return pendingAccountIds_.count(accountId) > 0;
212 if (accountId.empty())
214 return pendingAccountIds_.insert(accountId).second;
220 if (accountId.empty())
222 return pendingAccountIds_.erase(accountId) > 0;
228 out << YAML::Key << CONFIG_LABEL << YAML::Value << YAML::BeginMap;
234 out << YAML::Key <<
ORDER_KEY << YAML::Value << accountOrder_;
239 for (
const auto& accountId : pendingAccountIds_)
248 const auto& node =
in[CONFIG_LABEL];
250 parseValue(node,
ORDER_KEY, accountOrder_);
259 pendingAccountIds_.clear();
261 for (
const auto&
entry : pending) {
263 pendingAccountIds_.insert(
entry.as<std::string>());
264 }
catch (
const YAML::Exception&
e) {
265 JAMI_WARN(
"[config] Unable to read pending account id: %s",
e.what());
280 out << YAML::Key << CONFIG_LABEL << YAML::Value << YAML::BeginMap;
290 const auto& node =
in[CONFIG_LABEL];
301 , alsaPlugin_(
"default")
302 , alsaSmplrate_(44100)
303 , pulseDevicePlayback_(
"")
304 , pulseDeviceRecord_(
"")
305 , pulseDeviceRingtone_(
"")
307 , alwaysRecording_(
false)
310 , audioProcessor_(
"webrtc")
314 , echoCanceller_(
"auto")
315 , captureMuted_(
false)
316 , playbackMuted_(
false)
327 JAMI_WARN(
" Card with index %d doesn't exist or is unusable.",
card);
343 if (
auto ret =
system(
"jack_lsp > /dev/null"))
344 throw std::runtime_error(
"Error running jack_lsp: " + std::to_string(
ret));
346 }
catch (
const std::runtime_error&
e) {
368 }
catch (
const std::runtime_error&
e) {
369 JAMI_WARN(
"Unable to create pulseaudio layer, falling back to ALSA");
389 }
catch (
const std::runtime_error&
e) {
390 JAMI_WARN(
"Unable to create coreaudio layer. There will be no sound.");
399 }
catch (
const std::runtime_error&
e) {
400 JAMI_WARN(
"Unable to create PortAudio layer. There will be no sound.");
410std::vector<std::string>
438 out << YAML::Key << CONFIG_LABEL << YAML::Value << YAML::BeginMap;
441 out << YAML::Key <<
CARDIN_KEY << YAML::Value << alsaCardin_;
444 out << YAML::Key <<
PLUGIN_KEY << YAML::Value << alsaPlugin_;
475 out << YAML::Key <<
AGC_KEY << YAML::Value << agcEnabled_;
476 out << YAML::Key <<
VAD_KEY << YAML::Value << vadEnabled_;
490 JAMI_ERR(
"%s is not writable, unable to be the recording path", path.c_str());
498 const auto& node =
in[CONFIG_LABEL];
512 parseValue(node,
AGC_KEY, agcEnabled_);
534 parseValue(node,
VAD_KEY, vadEnabled_);
539VideoPreferences::VideoPreferences()
548VideoPreferences::serialize(YAML::Emitter&
out)
const
550 out << YAML::Key << CONFIG_LABEL << YAML::Value << YAML::BeginMap;
564VideoPreferences::unserialize(
const YAML::Node&
in)
567 const auto& node =
in[CONFIG_LABEL];
595PluginPreferences::PluginPreferences()
600PluginPreferences::serialize(YAML::Emitter&
out)
const
602 out << YAML::Key << CONFIG_LABEL << YAML::Value << YAML::BeginMap;
610PluginPreferences::unserialize(
const YAML::Node&
in)
613 const auto& node =
in[CONFIG_LABEL];
623 }
catch (
const std::exception&
e) {
624 JAMI_WARNING(
"Couldn't parse vector of installed plugins: {}",
e.what());
630 }
catch (
const std::exception&
e) {
631 JAMI_WARNING(
"Couldn't parse vector of loaded plugins: {}",
e.what());
#define PULSEAUDIO_API_STR
#define PORTAUDIO_API_STR
#define COREAUDIO_API_STR
static bool soundCardIndexExists(int card, AudioDeviceType stream)
Check if the given index corresponds to an existing sound card and supports the specified streaming m...
AudioLayer * createAudioLayer()
bool setRecordPath(const std::string &r)
void unserialize(const YAML::Node &in) override
static std::vector< std::string > getSupportedAudioManagers()
void serialize(YAML::Emitter &out) const override
void verifyAccountOrder(const std::vector< std::string > &accounts)
bool removePendingAccountId(const std::string &accountId)
static const char *const DFT_ZONE
void removeAccount(const std::string &acc)
void unserialize(const YAML::Node &in) override
bool addPendingAccountId(const std::string &accountId)
void serialize(YAML::Emitter &out) const override
Preferences()
Default sound card index.
static const char *const REGISTRATION_EXPIRE_KEY
void addAccount(const std::string &acc)
bool isAccountPending(const std::string &accountId) const
void serialize(YAML::Emitter &out) const override
void unserialize(const YAML::Node &in) override
#define JAMI_WARNING(formatstr,...)
bool isDirectoryWritable(const std::string &directory)
std::string expand_path(const std::string &path)
Expand the given path.
void parseValue(const YAML::Node &node, const char *key, T &value)
std::set< std::string > parseVector(const YAML::Node &node)
static constexpr const char * CARDIN_KEY
static constexpr const char * RECORDPATH_KEY
static constexpr const char * VOLUMEMIC_KEY
static constexpr const char * CARLIBJAMI_KEY
static constexpr const char * NOISE_REDUCE_KEY
static constexpr const char * AGC_KEY
void emitSignal(Args... args)
static constexpr const char * AUDIO_API_KEY
static constexpr const char * CAPTURE_MUTED_KEY
static constexpr const char * PLAY_DTMF_KEY
static constexpr const char * RINGING_TIMEOUT
static constexpr const char * DEVICE_RECORD_KEY
constexpr std::string_view DEFAULT_CONFERENCE_RESOLUTION
static constexpr const char * ECHO_CANCEL_KEY
static constexpr const char * HISTORY_MAX_CALLS_KEY
static constexpr const char * SMPLRATE_KEY
static constexpr const char * PLAYBACK_MUTED_KEY
static constexpr const char * CARDOUT_KEY
static constexpr const char * PENDING_ACCOUNTS_KEY
static constexpr const char * MD5_HASH_KEY
static constexpr const char * ALWAYS_RECORDING_KEY
static constexpr const char * HISTORY_LIMIT_KEY
static constexpr const char * DEVICE_RINGTONE_KEY
static constexpr const char * ALSAMAP_KEY
static constexpr const char * PLAY_TONES_KEY
static constexpr const char * ORDER_KEY
static constexpr int PULSE_LENGTH_DEFAULT
static constexpr const char * VAD_KEY
static constexpr const char * SEARCH_BAR_DISPLAY_KEY
static constexpr const char * VOLUMESPKR_KEY
static constexpr const char * PLUGIN_KEY
static constexpr const char * DEVICE_PLAYBACK_KEY
static constexpr const char * PORTAUDIO_KEY
static constexpr const char * ALSA_DFT_CARD
Default DTMF length.
static constexpr const char * AUDIO_PROCESSOR_KEY
static constexpr const char * PULSEMAP_KEY
static constexpr const char * PULSE_LENGTH_KEY
static constexpr const char * PORT_NUM_KEY
static constexpr const char * ZONE_TONE_CHOICE_KEY