mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-01-17 19:38:09 +00:00
231 lines
7.2 KiB
C++
231 lines
7.2 KiB
C++
/*
|
|
* CallModel.hpp
|
|
* Copyright (C) 2017-2018 Belledonne Communications, Grenoble, France
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* Created on: February 2, 2017
|
|
* Author: Ronan Abhamon
|
|
*/
|
|
|
|
#ifndef CALL_MODEL_H_
|
|
#define CALL_MODEL_H_
|
|
|
|
#include <QObject>
|
|
#include <linphone++/linphone.hh>
|
|
|
|
|
|
// =============================================================================
|
|
|
|
class CallModel : public QObject {
|
|
Q_OBJECT;
|
|
|
|
Q_PROPERTY(QString peerAddress READ getPeerAddress CONSTANT);
|
|
Q_PROPERTY(QString localAddress READ getLocalAddress CONSTANT);
|
|
|
|
Q_PROPERTY(CallStatus status READ getStatus NOTIFY statusChanged);
|
|
Q_PROPERTY(QString callError READ getCallError NOTIFY callErrorChanged);
|
|
|
|
Q_PROPERTY(bool isOutgoing READ isOutgoing CONSTANT);
|
|
|
|
Q_PROPERTY(bool isInConference READ isInConference NOTIFY isInConferenceChanged);
|
|
|
|
Q_PROPERTY(int duration READ getDuration CONSTANT); // Constants but called with a timer in qml.
|
|
Q_PROPERTY(float quality READ getQuality CONSTANT);
|
|
Q_PROPERTY(float speakerVu READ getSpeakerVu CONSTANT);
|
|
Q_PROPERTY(float microVu READ getMicroVu CONSTANT);
|
|
|
|
Q_PROPERTY(bool speakerMuted READ getSpeakerMuted WRITE setSpeakerMuted NOTIFY speakerMutedChanged);
|
|
Q_PROPERTY(bool microMuted READ getMicroMuted WRITE setMicroMuted NOTIFY microMutedChanged);
|
|
|
|
Q_PROPERTY(bool pausedByUser READ getPausedByUser WRITE setPausedByUser NOTIFY statusChanged);
|
|
Q_PROPERTY(bool videoEnabled READ getVideoEnabled WRITE setVideoEnabled NOTIFY statusChanged);
|
|
Q_PROPERTY(bool updating READ getUpdating NOTIFY statusChanged)
|
|
|
|
Q_PROPERTY(bool recording READ getRecording NOTIFY recordingChanged);
|
|
|
|
Q_PROPERTY(QVariantList audioStats READ getAudioStats NOTIFY statsUpdated);
|
|
Q_PROPERTY(QVariantList videoStats READ getVideoStats NOTIFY statsUpdated);
|
|
|
|
Q_PROPERTY(CallEncryption encryption READ getEncryption NOTIFY securityUpdated);
|
|
Q_PROPERTY(bool isSecured READ isSecured NOTIFY securityUpdated);
|
|
Q_PROPERTY(QString localSas READ getLocalSas NOTIFY securityUpdated);
|
|
Q_PROPERTY(QString remoteSas READ getRemoteSas NOTIFY securityUpdated);
|
|
Q_PROPERTY(QString securedString READ getSecuredString NOTIFY securityUpdated);
|
|
|
|
Q_PROPERTY(float speakerVolumeGain READ getSpeakerVolumeGain WRITE setSpeakerVolumeGain NOTIFY speakerVolumeGainChanged);
|
|
Q_PROPERTY(float microVolumeGain READ getMicroVolumeGain WRITE setMicroVolumeGain NOTIFY microVolumeGainChanged);
|
|
|
|
public:
|
|
enum CallStatus {
|
|
CallStatusConnected,
|
|
CallStatusEnded,
|
|
CallStatusIdle,
|
|
CallStatusIncoming,
|
|
CallStatusOutgoing,
|
|
CallStatusPaused
|
|
};
|
|
Q_ENUM(CallStatus);
|
|
|
|
enum CallEncryption {
|
|
CallEncryptionNone = int(linphone::MediaEncryption::None),
|
|
CallEncryptionDtls = int(linphone::MediaEncryption::DTLS),
|
|
CallEncryptionSrtp = int(linphone::MediaEncryption::SRTP),
|
|
CallEncryptionZrtp = int(linphone::MediaEncryption::ZRTP)
|
|
};
|
|
Q_ENUM(CallEncryption);
|
|
|
|
CallModel (std::shared_ptr<linphone::Call> call);
|
|
~CallModel ();
|
|
|
|
std::shared_ptr<linphone::Call> getCall () const {
|
|
return mCall;
|
|
}
|
|
|
|
QString getPeerAddress () const;
|
|
QString getLocalAddress () const;
|
|
|
|
bool isInConference () const {
|
|
return mIsInConference;
|
|
}
|
|
|
|
void setRecordFile (const std::shared_ptr<linphone::CallParams> &callParams);
|
|
static void setRecordFile (const std::shared_ptr<linphone::CallParams> &callParams, const QString &to);
|
|
|
|
void updateStats (const std::shared_ptr<const linphone::CallStats> &callStats);
|
|
|
|
void notifyCameraFirstFrameReceived (unsigned int width, unsigned int height);
|
|
|
|
Q_INVOKABLE void accept ();
|
|
Q_INVOKABLE void acceptWithVideo ();
|
|
Q_INVOKABLE void terminate ();
|
|
|
|
Q_INVOKABLE void askForTransfer ();
|
|
Q_INVOKABLE bool transferTo (const QString &sipAddress);
|
|
|
|
Q_INVOKABLE void acceptVideoRequest ();
|
|
Q_INVOKABLE void rejectVideoRequest ();
|
|
|
|
Q_INVOKABLE void takeSnapshot ();
|
|
|
|
Q_INVOKABLE void startRecording ();
|
|
Q_INVOKABLE void stopRecording ();
|
|
|
|
Q_INVOKABLE void sendDtmf (const QString &dtmf);
|
|
|
|
Q_INVOKABLE void verifyAuthenticationToken (bool verify);
|
|
|
|
Q_INVOKABLE void updateStreams ();
|
|
|
|
signals:
|
|
void callErrorChanged (const QString &callError);
|
|
void isInConferenceChanged (bool status);
|
|
void speakerMutedChanged (bool status);
|
|
void microMutedChanged (bool status);
|
|
void recordingChanged (bool status);
|
|
void statsUpdated ();
|
|
void statusChanged (CallStatus status);
|
|
void videoRequested ();
|
|
void securityUpdated ();
|
|
void speakerVolumeGainChanged (float volume);
|
|
void microVolumeGainChanged (float volume);
|
|
|
|
void cameraFirstFrameReceived (unsigned int width, unsigned int height);
|
|
|
|
private:
|
|
void handleCallEncryptionChanged (const std::shared_ptr<linphone::Call> &call);
|
|
void handleCallStateChanged (const std::shared_ptr<linphone::Call> &call, linphone::Call::State state);
|
|
|
|
void accept (bool withVideo);
|
|
|
|
void stopAutoAnswerTimer () const;
|
|
|
|
CallStatus getStatus () const;
|
|
|
|
bool isOutgoing () const {
|
|
return mCall->getDir() == linphone::Call::Dir::Outgoing;
|
|
}
|
|
|
|
void updateIsInConference ();
|
|
|
|
void acceptWithAutoAnswerDelay ();
|
|
|
|
QString getCallError () const;
|
|
void setCallErrorFromReason (linphone::Reason reason);
|
|
|
|
int getDuration () const;
|
|
float getQuality () const;
|
|
float getMicroVu () const;
|
|
float getSpeakerVu () const;
|
|
|
|
bool getSpeakerMuted () const;
|
|
void setSpeakerMuted (bool status);
|
|
|
|
bool getMicroMuted () const;
|
|
void setMicroMuted (bool status);
|
|
|
|
bool getPausedByUser () const;
|
|
void setPausedByUser (bool status);
|
|
|
|
bool getVideoEnabled () const;
|
|
void setVideoEnabled (bool status);
|
|
|
|
bool getUpdating () const;
|
|
|
|
bool getRecording () const;
|
|
|
|
CallEncryption getEncryption () const;
|
|
bool isSecured () const;
|
|
|
|
QString getLocalSas () const;
|
|
QString getRemoteSas () const;
|
|
|
|
QString getSecuredString () const;
|
|
|
|
QVariantList getAudioStats () const;
|
|
QVariantList getVideoStats () const;
|
|
void updateStats (const std::shared_ptr<const linphone::CallStats> &callStats, QVariantList &statsList);
|
|
|
|
QString iceStateToString (linphone::IceState state) const;
|
|
|
|
float getSpeakerVolumeGain () const;
|
|
void setSpeakerVolumeGain (float volume);
|
|
|
|
float getMicroVolumeGain () const;
|
|
void setMicroVolumeGain (float volume);
|
|
|
|
QString generateSavedFilename () const;
|
|
|
|
static QString generateSavedFilename (const QString &from, const QString &to);
|
|
|
|
bool mIsInConference = false;
|
|
|
|
bool mPausedByRemote = false;
|
|
bool mPausedByUser = false;
|
|
bool mRecording = false;
|
|
|
|
bool mWasConnected = false;
|
|
|
|
bool mNotifyCameraFirstFrameReceived = true;
|
|
|
|
QString mCallError;
|
|
|
|
QVariantList mAudioStats;
|
|
QVariantList mVideoStats;
|
|
|
|
std::shared_ptr<linphone::Call> mCall;
|
|
};
|
|
|
|
#endif // CALL_MODEL_H_
|