Документация
ОС Аврора 5.1.0

Call.Call1

Ниже приведены фрагменты кода или же цельные файлы, которые реализуют интерфейс ru.auroraos.Call.Call1.

Содержание:

Объявление интерфейса

  1. 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
    
  2. 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);
    }
    

Регистрация интерфейса

  1. 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()]);
    }
    

Удаление интерфейса

  1. 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();
        }
        ...
    }
    

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.