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

0001 // SPDX-FileCopyrightText: 2021 Alexey Andreyev <aa13q@ya.ru>
0002 //
0003 // SPDX-License-Identifier: LicenseRef-KDE-Accepted-GPL
0004 
0005 #include "call-object.h"
0006 #include <QDebug>
0007 
0008 constexpr int CALL_DURATION_UPDATE_DELAY = 1000;
0009 
0010 CallObject::CallObject(QObject *parent)
0011     : QObject(parent)
0012 {
0013     _callAttemptTimer.setInterval(CALL_DURATION_UPDATE_DELAY);
0014     _callTimer.setInterval(CALL_DURATION_UPDATE_DELAY);
0015     connect(&_callAttemptTimer, &QTimer::timeout, this, [this]() {
0016         _callData.callAttemptDuration++;
0017     });
0018     connect(&_callTimer, &QTimer::timeout, this, [this]() {
0019         _callData.duration++;
0020     });
0021 }
0022 
0023 QString CallObject::id()
0024 {
0025     return _callData.id;
0026 }
0027 
0028 QString CallObject::protocol()
0029 {
0030     return _callData.protocol;
0031 }
0032 
0033 QString CallObject::provider()
0034 {
0035     return _callData.provider;
0036 }
0037 
0038 QString CallObject::account()
0039 {
0040     return _callData.account;
0041 }
0042 
0043 QString CallObject::communicationWith()
0044 {
0045     return _callData.communicationWith;
0046 }
0047 
0048 DialerTypes::CallDirection CallObject::direction()
0049 {
0050     return _callData.direction;
0051 }
0052 
0053 DialerTypes::CallState CallObject::state()
0054 {
0055     return _callData.state;
0056 }
0057 
0058 DialerTypes::CallStateReason CallObject::stateReason()
0059 {
0060     return _callData.stateReason;
0061 }
0062 
0063 int CallObject::callAttemptDuration()
0064 {
0065     return _callData.callAttemptDuration;
0066 }
0067 
0068 QDateTime CallObject::startedAt()
0069 {
0070     return _callData.startedAt;
0071 }
0072 
0073 int CallObject::duration()
0074 {
0075     return _callData.duration;
0076 }
0077 
0078 DialerTypes::CallData CallObject::callData()
0079 {
0080     return _callData;
0081 }
0082 
0083 void CallObject::setId(const QString &id)
0084 {
0085     _callData.id = id;
0086 }
0087 
0088 void CallObject::setProtocol(const QString &protocol)
0089 {
0090     _callData.protocol = protocol;
0091 }
0092 
0093 void CallObject::setProvider(const QString &provider)
0094 {
0095     _callData.provider = provider;
0096 }
0097 
0098 void CallObject::setAccount(const QString &account)
0099 {
0100     _callData.account = account;
0101 }
0102 
0103 void CallObject::setCommunicationWith(const QString &communicationWith)
0104 {
0105     _callData.communicationWith = communicationWith;
0106 }
0107 
0108 void CallObject::setDirection(const DialerTypes::CallDirection &direction)
0109 {
0110     _callData.direction = direction;
0111 }
0112 
0113 void CallObject::setState(const DialerTypes::CallState &state)
0114 {
0115     _callData.state = state;
0116 }
0117 
0118 void CallObject::setStateReason(const DialerTypes::CallStateReason &stateReason)
0119 {
0120     _callData.stateReason = stateReason;
0121 }
0122 
0123 void CallObject::setCallAttemptDuration(const int &callAttemptDuration)
0124 {
0125     _callData.callAttemptDuration = callAttemptDuration;
0126 }
0127 
0128 void CallObject::setStartedAt(const QDateTime &startedAt)
0129 {
0130     _callData.startedAt = startedAt;
0131 }
0132 
0133 void CallObject::setDuration(const int &duration)
0134 {
0135     _callData.duration = duration;
0136 }
0137 
0138 void CallObject::onCallStateChanged(const QString &deviceUni,
0139                                     const QString &callUni,
0140                                     const DialerTypes::CallDirection &callDirection,
0141                                     const DialerTypes::CallState &callState,
0142                                     const DialerTypes::CallStateReason &callStateReason)
0143 {
0144     qDebug() << "new call state:" << deviceUni << callUni << callDirection << callState << callStateReason;
0145     _callData.state = callState;
0146     _callData.stateReason = callStateReason;
0147     if (callState == DialerTypes::CallState::RingingIn) {
0148         qDebug() << "incoming call";
0149         _callAttemptTimer.start();
0150     }
0151     if (callState == DialerTypes::CallState::Active) {
0152         qDebug() << "call started";
0153         _callTimer.start();
0154     }
0155     if (callState == DialerTypes::CallState::Terminated) {
0156         qDebug() << "call terminated";
0157         if ((callDirection == DialerTypes::CallDirection::Incoming) && !_callTimer.isActive()) {
0158             qDebug() << "missed a call";
0159         }
0160         _callAttemptTimer.stop();
0161         _callTimer.stop();
0162     }
0163 }