Synchronize ICS from actions like deletion/cancellation.

This commit is contained in:
Julien Wadel 2022-11-17 12:17:56 +01:00
parent 3677770de2
commit f924a17055
4 changed files with 47 additions and 11 deletions

View file

@ -104,6 +104,7 @@ ConferenceInfoModel::ConferenceInfoModel (QObject * parent) : QObject(parent){
connect(this, &ConferenceInfoModel::conferenceInfoChanged, this, &ConferenceInfoModel::isScheduledChanged);
connect(this, &ConferenceInfoModel::conferenceInfoChanged, this, &ConferenceInfoModel::inviteModeChanged);
connect(this, &ConferenceInfoModel::conferenceInfoChanged, this, &ConferenceInfoModel::conferenceInfoStateChanged);
connect(this, &ConferenceInfoModel::conferenceInfoChanged, this, &ConferenceInfoModel::conferenceSchedulerStateChanged);
}
// Callable from C++
@ -124,6 +125,7 @@ ConferenceInfoModel::ConferenceInfoModel (std::shared_ptr<linphone::ConferenceIn
connect(this, &ConferenceInfoModel::conferenceInfoChanged, this, &ConferenceInfoModel::isScheduledChanged);
connect(this, &ConferenceInfoModel::conferenceInfoChanged, this, &ConferenceInfoModel::inviteModeChanged);
connect(this, &ConferenceInfoModel::conferenceInfoChanged, this, &ConferenceInfoModel::conferenceInfoStateChanged);
connect(this, &ConferenceInfoModel::conferenceInfoChanged, this, &ConferenceInfoModel::conferenceSchedulerStateChanged);
}
ConferenceInfoModel::~ConferenceInfoModel () {
@ -223,6 +225,10 @@ LinphoneEnums::ConferenceInfoState ConferenceInfoModel::getConferenceInfoState()
return LinphoneEnums::fromLinphone(mConferenceInfo->getState());
}
LinphoneEnums::ConferenceSchedulerState ConferenceInfoModel::getConferenceSchedulerState() const{
return LinphoneEnums::fromLinphone(mLastConferenceSchedulerState);
}
//------------------------------------------------------------------------------------------------
// Convert into UTC with TimeZone and pass system timezone to conference info
void ConferenceInfoModel::setDateTime(const QDateTime& dateTime){
@ -323,14 +329,14 @@ void ConferenceInfoModel::createConference(const int& securityLevel) {
mConferenceScheduler = ConferenceScheduler::create();
mConferenceScheduler->mSendInvite = mInviteMode;
connect(mConferenceScheduler.get(), &ConferenceScheduler::invitationsSent, this, &ConferenceInfoModel::onInvitationsSent);
connect(mConferenceScheduler.get(), &ConferenceScheduler::stateChanged, this, &ConferenceInfoModel::onStateChanged);
connect(mConferenceScheduler.get(), &ConferenceScheduler::stateChanged, this, &ConferenceInfoModel::onConferenceSchedulerStateChanged);
mConferenceScheduler->getConferenceScheduler()->setInfo(mConferenceInfo);
}
void ConferenceInfoModel::cancelConference(){
mConferenceScheduler = ConferenceScheduler::create();
connect(mConferenceScheduler.get(), &ConferenceScheduler::invitationsSent, this, &ConferenceInfoModel::onInvitationsSent);
connect(mConferenceScheduler.get(), &ConferenceScheduler::stateChanged, this, &ConferenceInfoModel::onStateChanged);
connect(mConferenceScheduler.get(), &ConferenceScheduler::stateChanged, this, &ConferenceInfoModel::onConferenceSchedulerStateChanged);
mConferenceScheduler->getConferenceScheduler()->cancelConference(mConferenceInfo);
}
@ -343,12 +349,14 @@ void ConferenceInfoModel::deleteConferenceInfo(){
//-------------------------------------------------------------------------------------------------
void ConferenceInfoModel::onStateChanged(linphone::ConferenceScheduler::State state){
qDebug() << "ConferenceInfoModel::onStateChanged: " << (int) state;
void ConferenceInfoModel::onConferenceSchedulerStateChanged(linphone::ConferenceScheduler::State state){
qDebug() << "ConferenceInfoModel::onConferenceSchedulerStateChanged: " << (int) state;
mLastConferenceSchedulerState = state;
if( state == linphone::ConferenceScheduler::State::Ready)
emit conferenceCreated();
else if( state == linphone::ConferenceScheduler::State::Error)
emit conferenceCreationFailed();
emit conferenceInfoChanged();
}
void ConferenceInfoModel::onInvitationsSent(const std::list<std::shared_ptr<linphone::Address>> & failedInvitations) {
qDebug() << "ConferenceInfoModel::onInvitationsSent";

View file

@ -50,6 +50,7 @@ public:
Q_PROPERTY(bool isScheduled READ isScheduled WRITE setIsScheduled NOTIFY isScheduledChanged)
Q_PROPERTY(int inviteMode READ getInviteMode WRITE setInviteMode NOTIFY inviteModeChanged)
Q_PROPERTY(LinphoneEnums::ConferenceInfoState state READ getConferenceInfoState NOTIFY conferenceInfoStateChanged)
Q_PROPERTY(LinphoneEnums::ConferenceSchedulerState conferenceSchedulerState READ getConferenceSchedulerState NOTIFY conferenceSchedulerStateChanged)
static QSharedPointer<ConferenceInfoModel> create(std::shared_ptr<linphone::ConferenceInfo> conferenceInfo);
ConferenceInfoModel (QObject * parent = nullptr);
@ -76,6 +77,7 @@ public:
Q_INVOKABLE TimeZoneModel* getTimeZoneModel() const;
Q_INVOKABLE QString getIcalendarString() const;
LinphoneEnums::ConferenceInfoState getConferenceInfoState() const;
LinphoneEnums::ConferenceSchedulerState getConferenceSchedulerState() const;
void setDateTime(const QDateTime& dateTime);
void setDuration(const int& duration);
@ -97,7 +99,7 @@ public:
// SCHEDULER
virtual void onStateChanged(linphone::ConferenceScheduler::State state);
virtual void onConferenceSchedulerStateChanged(linphone::ConferenceScheduler::State state);
virtual void onInvitationsSent(const std::list<std::shared_ptr<linphone::Address>> & failedInvitations);
signals:
@ -112,6 +114,7 @@ signals:
void isScheduledChanged();
void inviteModeChanged();
void conferenceInfoStateChanged();
void conferenceSchedulerStateChanged();
void conferenceCreated();
void conferenceCreationFailed();
@ -127,6 +130,7 @@ private:
bool mIsScheduled = true;
int mInviteMode = 0;
bool mRemoveRequested = false;// true if user has request its deletion from DB
linphone::ConferenceScheduler::State mLastConferenceSchedulerState = linphone::ConferenceScheduler::State::Idle;// Workaround for missing getter in scheduler.
};
Q_DECLARE_METATYPE(QSharedPointer<ConferenceInfoModel>)

View file

@ -25,14 +25,18 @@
// =============================================================================
void LinphoneEnums::registerMetaTypes(){
qRegisterMetaType<LinphoneEnums::MediaEncryption>();
qRegisterMetaType<LinphoneEnums::FriendCapability>();
qRegisterMetaType<LinphoneEnums::EventLogType>();
qRegisterMetaType<LinphoneEnums::ChatMessageState>();
qRegisterMetaType<LinphoneEnums::CallStatus>();
qRegisterMetaType<LinphoneEnums::ChatMessageState>();
qRegisterMetaType<LinphoneEnums::ConferenceLayout>();
qRegisterMetaType<LinphoneEnums::TunnelMode>();
qRegisterMetaType<LinphoneEnums::ConferenceInfoState>();
qRegisterMetaType<LinphoneEnums::ConferenceSchedulerState>();
qRegisterMetaType<LinphoneEnums::EventLogType>();
qRegisterMetaType<LinphoneEnums::FriendCapability>();
qRegisterMetaType<LinphoneEnums::MediaEncryption>();
qRegisterMetaType<LinphoneEnums::ParticipantDeviceState>();
qRegisterMetaType<LinphoneEnums::RecorderState>();
qRegisterMetaType<LinphoneEnums::TunnelMode>();
qRegisterMetaType<LinphoneEnums::TransportType>();
}
linphone::MediaEncryption LinphoneEnums::toLinphone(const LinphoneEnums::MediaEncryption& data){
@ -89,6 +93,14 @@ LinphoneEnums::ConferenceInfoState LinphoneEnums::fromLinphone(const linphone::C
return static_cast<LinphoneEnums::ConferenceInfoState>(state);
}
linphone::ConferenceScheduler::State LinphoneEnums::toLinphone(const LinphoneEnums::ConferenceSchedulerState& state){
return static_cast<linphone::ConferenceScheduler::State>(state);
}
LinphoneEnums::ConferenceSchedulerState LinphoneEnums::fromLinphone(const linphone::ConferenceScheduler::State& state){
return static_cast<LinphoneEnums::ConferenceSchedulerState>(state);
}
linphone::ParticipantDeviceState LinphoneEnums::toLinphone(const LinphoneEnums::ParticipantDeviceState& state){
return static_cast<linphone::ParticipantDeviceState>(state);
}

View file

@ -133,6 +133,18 @@ Q_ENUM_NS(ConferenceInfoState)
linphone::ConferenceInfo::State toLinphone(const LinphoneEnums::ConferenceInfoState& state);
LinphoneEnums::ConferenceInfoState fromLinphone(const linphone::ConferenceInfo::State& state);
enum ConferenceSchedulerState {
ConferenceSchedulerStateAllocationPending = int(linphone::ConferenceScheduler::State::AllocationPending),
ConferenceSchedulerStateError = int(linphone::ConferenceScheduler::State::Error),
ConferenceSchedulerStateIdle = int(linphone::ConferenceScheduler::State::Idle),
ConferenceSchedulerStateReady = int(linphone::ConferenceScheduler::State::Ready),
ConferenceSchedulerStateUpdating = int(linphone::ConferenceScheduler::State::Updating)
};
Q_ENUM_NS(ConferenceSchedulerState)
linphone::ConferenceScheduler::State toLinphone(const LinphoneEnums::ConferenceSchedulerState& state);
LinphoneEnums::ConferenceSchedulerState fromLinphone(const linphone::ConferenceScheduler::State& state);
enum ParticipantDeviceState {
ParticipantDeviceStateJoining = int(linphone::ParticipantDeviceState::Joining),
@ -189,10 +201,10 @@ void fromString(const QString& transportType, LinphoneEnums::TransportType *tran
Q_DECLARE_METATYPE(LinphoneEnums::CallStatus)
Q_DECLARE_METATYPE(LinphoneEnums::ChatMessageState)
Q_DECLARE_METATYPE(LinphoneEnums::ConferenceLayout)
Q_DECLARE_METATYPE(LinphoneEnums::ConferenceInfoState)
Q_DECLARE_METATYPE(LinphoneEnums::ConferenceSchedulerState)
Q_DECLARE_METATYPE(LinphoneEnums::EventLogType)
Q_DECLARE_METATYPE(LinphoneEnums::FriendCapability)
Q_DECLARE_METATYPE(LinphoneEnums::MediaEncryption)