diff --git a/src/manager.cpp b/src/manager.cpp index e710f3cd644b9772fe8714e201a952cfc0be2907..d7c1a3ca3c1f14c2908a83df6447d93ad89f086b 100644 --- a/src/manager.cpp +++ b/src/manager.cpp @@ -1675,6 +1675,22 @@ void Manager::pollEvents() } //THREAD=Main + +void +Manager::saveConfig(const std::shared_ptr<RingAccount>& account) +{ + try { + YAML::Emitter accountOut; + account->serialize(accountOut); + auto accountConfig = account->getPath() + DIR_SEPARATOR_STR + "config.yml"; + std::ofstream fout(accountConfig); + fout << accountOut.c_str(); + RING_DBG("Exported Ring account to %s", accountConfig.c_str()); + } catch (const std::exception& e) { + RING_ERR("Error exporting Ring account: %s", e.what()); + } +} + void Manager::saveConfig() { @@ -1696,16 +1712,7 @@ Manager::saveConfig() for (const auto& account : accountFactory.getAllAccounts()) { if (auto ringAccount = std::dynamic_pointer_cast<RingAccount>(account)) { - try { - YAML::Emitter accountOut; - ringAccount->serialize(accountOut); - auto accountConfig = ringAccount->getPath() + DIR_SEPARATOR_STR + "config.yml"; - std::ofstream fout(accountConfig); - fout << accountOut.c_str(); - RING_DBG("Exported Ring account to %s", accountConfig.c_str()); - } catch (const std::exception& e) { - RING_ERR("Error exporting Ring account: %s", e.what()); - } + saveConfig(ringAccount); } else { account->serialize(out); } @@ -2589,7 +2596,11 @@ Manager::setAccountDetails(const std::string& accountID, account->doUnregister([&](bool /* transport_free */) { account->setAccountDetails(details); // Serialize configuration to disk once it is done - saveConfig(); + if (auto ringAccount = std::dynamic_pointer_cast<RingAccount>(account)) { + saveConfig(ringAccount); + } else { + saveConfig(); + } if (account->isUsable()) account->doRegister(); @@ -2905,7 +2916,7 @@ Manager::sendRegister(const std::string& accountID, bool enable) acc->setEnabled(enable); acc->loadConfig(); - Manager::instance().saveConfig(); + saveConfig(); if (acc->isEnabled()) { acc->doRegister(); diff --git a/src/manager.h b/src/manager.h index dead57c28efedb7af494c23b044a7c910743d5a3..ade66c90e78c3528698c9294a81c7da97062ebc6 100644 --- a/src/manager.h +++ b/src/manager.h @@ -55,6 +55,7 @@ class Conference; class AudioLoop; class IceTransportFactory; class DataTransferFacade; +class RingAccount; /** Manager (controller) of Ring daemon */ class Manager { @@ -305,6 +306,7 @@ class Manager { * Save config to file */ void saveConfig(); + void saveConfig(const std::shared_ptr<RingAccount>&); /** * Play a ringtone