Документация
ОС Аврора 5.1.5
Call.Call1
Ниже приведены фрагменты кода или же цельные файлы, которые реализуют интерфейс ru.auroraos.Call.Call1.
Содержание:
Объявление интерфейса
-
src/callapidbus/call1dbusadaptor.h:#include <QtDBus/QDBusAbstractAdaptor> #include <QtDBus/QDBusObjectPath> class Call1DBusObject; /*! * Класс Call1DBusAdaptor является DBus-адаптором для DBus-объекта Call1 */ class Call1DBusAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "ru.auroraos.Call.Call1") public: explicit Call1DBusAdaptor(QObject *parent = nullptr); public slots: // Методы интерфейса ru.auroraos.Call.Call1 void Accept(); void Reject(const uint32_t reason); void SetHold(const bool hold); private: Call1DBusObject *m_call1DBusObject; signals: // Сигналы интерфейса ru.auroraos.Call.Call1 void StatusChanged(const uint32_t status); }; #endif // CALL1DBUSADAPTOR_H -
src/callapidbus/call1dbusadaptor.cpp:#include <QDebug> #include "call1dbusobject.h" #include "call1dbusadaptor.h" /*! * Конструктор по умолчанию. * parent — родительский экземпляр QObject. */ Call1DBusAdaptor::Call1DBusAdaptor(QObject *parent) : QDBusAbstractAdaptor(parent), m_call1DBusObject(qobject_cast<Call1DBusObject *>(parent)) { } /*! * Принимает входящий вызов с помощью DBus-объекта Call1. */ void Call1DBusAdaptor::Accept() { qInfo() << QStringLiteral("Call1DBusAdaptor::%1() вызван").arg(__func__); m_call1DBusObject->Accept(); } /*! * Отклоняет текущий вызов по указанной причине с помощью DBus-объекта Call1. * reason — причина отклонения вызова: 0 — Неизвестная, 1 — Пользователем, 2 — Системой. */ void Call1DBusAdaptor::Reject(const uint32_t reason) { qInfo() << QStringLiteral("Call1DBusAdaptor::%1(%2) вызван").arg(__func__).arg(reason); m_call1DBusObject->Reject(reason); } /*! * Изменяет статус удержания текущего вызова с помощью DBus-объекта Call1. * hold — true, если вызов должен быть поставлен на удержание, false — если должен быть снят с удержания. */ void Call1DBusAdaptor::SetHold(const bool hold) { qInfo() << QStringLiteral("Call1DBusAdaptor::%1(%2) вызван").arg(__func__).arg(hold); m_call1DBusObject->SetHold(hold); }
Регистрация интерфейса
-
src/callapidbus/calldbusmanager.cpp:/*! * Запускает регистрацию DBus-объекта '/ru/auroraos/CallApiDBus/DBus/Call1'. * В конце метод испускает сигнал InterfacesAdded(). * incoming — true, если вызов должен быть входящим, false — если исходящим. */ void CallDbusManager::registerCall1DBusObject(const bool incoming) { QVariantMap properties = { { "LocalName", "Локальное имя" }, { "LocalHandle", "Локальный дескриптор" }, { "RemoteName", "Удалённое имя" }, { "RemoteHandle", "Удалённый дескриптор" }, { "Incoming", incoming }, { "Holdable", m_holdable }, { "Status", incoming ? static_cast<uint>(Call1DBusObject::Ringing) : static_cast<uint>(Call1DBusObject::Dialing) } }; m_call1DBusObject.registerCall1DBusObject(incoming); VariantMapMap dbusManagedObjects = VariantMapMap{ { "ru.auroraos.Call.Call1", properties } }; if (m_dtmf1Enabled) { dbusManagedObjects.insert("ru.auroraos.Call.DTMF1", {}); } m_dbusManagedObjects[m_call1DBusObject.objectPath()] = dbusManagedObjects; emit InterfacesAdded(m_call1DBusObject.objectPath(), m_dbusManagedObjects[m_call1DBusObject.objectPath()]); }
Удаление интерфейса
-
src/callapidbus/calldbusmanager.cpp:void CallDbusManager::handleCallStatusChanged(const uint32_t status) { ... if (status == Call1DBusObject::Disconnected) { m_dbusManagedObjects.remove(m_call1DBusObject.objectPath()); QStringList call1Interfaces = QStringList() << "ru.auroraos.Call.Call1"; if (m_dtmf1Enabled) { call1Interfaces.append("ru.auroraos.Call.DTMF1"); } emit InterfacesRemoved(m_call1DBusObject.objectPath(), call1Interfaces); m_call1DBusObject.unregisterCall1DBusObject(); } ... }