当前位置: 首页 > news >正文

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}// ... 现有代码 ...
}

以上只是做一个属性配置,真正的自动接听的逻辑这里就不加了,代码已经有现成的全局的了
 


http://www.mrgr.cn/news/55866.html

相关文章:

  • 保研推荐信模板
  • 【详解】下载MySql安装教程(帮助数据库下载)
  • AI大模型是否有助于攻克重大疾病?
  • 【分布式微服务云原生】《微服务架构大揭秘:关键组件全览与实战指南》
  • 关于OpenRASP的功能二次开发
  • 51系列--人体身高体重BMI指数检测健康秤
  • 北斗卡有哪些便民服务?北斗定位手持机|北斗短报文终端
  • [含文档+PPT+源码等]精品基于PHP实现的微信小程序耳机商城系统
  • 画图小计 - 千问 豆包
  • 推荐一款功能强大的数据备份工具:Iperius Backup Full
  • C++基础教程
  • CZX前端秘籍2
  • 前端工具类大全--【成果版】
  • 酒店智能轻触开关的工作原理
  • Vue+TypeScript+SpringBoot的WebSocket基础教学
  • 一篇文章系统看懂大模型
  • jmeter之控制tps压测
  • 综述:超构表面赋能多维度光学成像研究
  • Mermaid流程图完全指南
  • 字符设备、块设备和网络设备
  • 端到端自动驾驶模型SparseDrive部署过程
  • 2024年华为OD机试真题-高矮个子排队-Python-OD统一考试(E卷)
  • 鼠标移入图片实现遮住层效果2种方法
  • 01 Druid未授权错误及解决方案
  • MySQL创建库,设计表
  • Python酷库之旅-第三方库Pandas(159)