linphone-desktop 项目源代码里,如何给账号增加一个参数
linphone-desktop 项目源代码很庞大,文件的关系也比较多,新手一般很难切入做二次开发:
这里我们以一个简单的例子,如何给账号增加一个属性的步骤让我们一起看看他是怎么串起来的
:
比如我们准备给账号加一个自动后台接听属性开关(这个虽有全局开关,但毕竟linphone支持多账号)
这里就涉及到 account-params:
1、首先,在核心C++类中添加新参数。修改文件 `linphone-sdk/liblinphone/src/account/account-params.h`:
class AccountParams : public bellesip::HybridObject<LinphoneAccountParams, AccountParams> {
public:// ... 现有代码 ...bool getAutoAnswerEnabled() const;void setAutoAnswerEnabled(bool enable);private:// ... 现有代码 ...bool mAutoAnswerEnabled = false;
};
2. 在对应的.cpp文件中实现getter和setter方法。修改 `linphone-sdk/liblinphone/src/account/account-params.cpp`:
bool AccountParams::getAutoAnswerEnabled() const {return mAutoAnswerEnabled;
}void AccountParams::setAutoAnswerEnabled(bool enable) {mAutoAnswerEnabled = enable;
}
3、更新C语言封装。在 `linphone-sdk/liblinphone/include/linphone/api/c-account-params.h` 中添加:
LINPHONE_PUBLIC bool_t linphone_account_params_get_auto_answer_enabled(const LinphoneAccountParams *params);
LINPHONE_PUBLIC void linphone_account_params_set_auto_answer_enabled(LinphoneAccountParams *params, bool_t enable);
4、在 `linphone-sdk/liblinphone/src/c-wrapper/api/c-account-params.cpp` 中实现这些函数:
bool_t linphone_account_params_get_auto_answer_enabled(const LinphoneAccountParams *params) {return params->getAutoAnswerEnabled();
}void linphone_account_params_set_auto_answer_enabled(LinphoneAccountParams *params, bool_t enable) {params->setAutoAnswerEnabled(!!enable);
}
5、如果我们要配置它,由于它使用QML,需要在AccountSettingsModel中暴露这个属性。修改 `src/components/settings/AccountSettingsModel.hpp`:
class AccountSettingsModel : public QObject {Q_OBJECT// ... 现有代码 ...Q_PROPERTY(bool autoAnswerEnabled READ getAutoAnswerEnabled WRITE setAutoAnswerEnabled NOTIFY autoAnswerEnabledChanged)public:// ... 现有代码 ...bool getAutoAnswerEnabled() const;void setAutoAnswerEnabled(bool enable);signals:void autoAnswerEnabledChanged(bool enabled);private:// ... 现有代码 ...
};
6、在 `src/components/settings/AccountSettingsModel.cpp` 中实现这些方法:
bool AccountSettingsModel::getAutoAnswerEnabled() const {return mAccountParams->getAutoAnswerEnabled();
}void AccountSettingsModel::setAutoAnswerEnabled(bool enable) {if (enable != getAutoAnswerEnabled()) {mAccountParams->setAutoAnswerEnabled(enable);emit autoAnswerEnabledChanged(enable);}
}
7、最后,更新UI需要修改QML文件,比如 `ui/views/App/Settings/SettingsAccount.qml`:
import QtQuick 2.7
import QtQuick.Layouts 1.3import Common 1.0
import Linphone 1.0ColumnLayout {// ... 现有代码 ...Switch {text: qsTr("settingsAccountAutoAnswerEnabled")checked: AccountSettingsModel.autoAnswerEnabledonCheckedChanged: AccountSettingsModel.autoAnswerEnabled = checked}// ... 现有代码 ...
}
以上只是做一个属性配置,真正的自动接听的逻辑这里就不加了,代码已经有现成的全局的了