File indexing completed on 2024-04-28 16:42:52

0001 // SPDX-FileCopyrightText: 2021 Alexey Andreyev <aa13q@ya.ru>
0002 //
0003 // SPDX-License-Identifier: LicenseRef-KDE-Accepted-GPL
0004 
0005 #pragma once
0006 
0007 #include "call-model.h"
0008 #include "callutilsinterface.h"
0009 #include <QTimer>
0010 
0011 class ActiveCallModel : public CallModel
0012 {
0013     Q_OBJECT
0014     Q_PROPERTY(bool incoming READ incoming NOTIFY incomingChanged)
0015     Q_PROPERTY(bool active READ active NOTIFY activeChanged)
0016     Q_PROPERTY(QString communicationWith READ communicationWith NOTIFY communicationWithChanged)
0017     Q_PROPERTY(qulonglong duration READ duration NOTIFY durationChanged)
0018 
0019 public:
0020     ActiveCallModel(QObject *parent = nullptr);
0021 
0022     bool active() const;
0023     void setActive(bool newActive);
0024 
0025     bool incoming() const;
0026     void setIncoming(bool newIncoming);
0027 
0028     QString communicationWith() const;
0029     void setCommunicationWith(const QString communicationWith);
0030 
0031     qulonglong duration() const;
0032     void setDuration(qulonglong duration);
0033 
0034     void setCallUtils(org::kde::telephony::CallUtils *callUtils);
0035 
0036 public Q_SLOTS:
0037     Q_INVOKABLE void sendDtmf(const QString &tones);
0038     Q_INVOKABLE void dial(const QString &deviceUni, const QString &number);
0039     Q_INVOKABLE QString activeCallUni();
0040 
0041     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
0042     int rowCount(const QModelIndex &parent = QModelIndex()) const override;
0043 
0044 Q_SIGNALS:
0045     void activeChanged();
0046     void incomingChanged();
0047     void communicationWithChanged();
0048     void durationChanged();
0049 
0050 private Q_SLOTS:
0051     void onUtilsCallAdded(const QString &deviceUni,
0052                           const QString &callUni,
0053                           const DialerTypes::CallDirection &callDirection,
0054                           const DialerTypes::CallState &callState,
0055                           const DialerTypes::CallStateReason &callStateReason,
0056                           const QString communicationWith);
0057     void onUtilsCallDeleted(const QString &deviceUni, const QString &callUni);
0058     void onUtilsCallStateChanged(const DialerTypes::CallData &callData);
0059     void onUtilsCallsChanged(const DialerTypes::CallDataVector &fetchedCalls);
0060 
0061 private:
0062     org::kde::telephony::CallUtils *_callUtils;
0063     DialerTypes::CallDataVector _calls;
0064     QTimer _callsTimer;
0065     bool _active = false;
0066     bool _incoming = false;
0067     QString _communicationWith;
0068     qulonglong _duration;
0069 
0070     void _updateTimers();
0071 };