/*
* Copyright (c) 2022 Belledonne Communications SARL.
*
* This file is part of linphone-desktop
* (see https://www.linphone.org).
*
* 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 3 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, see .
*/
#ifndef CONFERENCE_INFO_CORE_H_
#define CONFERENCE_INFO_CORE_H_
#include "core/timezone/TimeZone.hpp"
#include "model/conference/ConferenceInfoModel.hpp"
#include "tool/LinphoneEnums.hpp"
#include "tool/thread/SafeConnection.hpp"
#include
#include
#include
#include
#include
#include
class ParticipantListModel;
// class TimeZoneModel;
class ConferenceInfoCore : public QObject, public AbstractObject {
Q_OBJECT
public:
Q_PROPERTY(TimeZoneModel *timeZoneModel READ getTimeZoneModel WRITE setTimeZoneModel NOTIFY timeZoneModelChanged)
Q_PROPERTY(QDateTime dateTime READ getDateTimeSystem WRITE setDateTime NOTIFY dateTimeChanged)
Q_PROPERTY(QDateTime endDateTime READ getEndDateTime WRITE setEndDateTime NOTIFY endDateTimeChanged)
Q_PROPERTY(QDateTime dateTimeUtc READ getDateTimeUtc NOTIFY dateTimeChanged)
Q_PROPERTY(QString startEndDateString READ getStartEndDateString NOTIFY dateTimeChanged)
Q_PROPERTY(int duration READ getDuration WRITE setDuration NOTIFY durationChanged)
Q_PROPERTY(
QString organizerAddress READ getOrganizerAddress WRITE setOrganizerAddress NOTIFY organizerAddressChanged)
Q_PROPERTY(QString organizerName READ getOrganizerName WRITE setOrganizerName NOTIFY organizerNameChanged)
Q_PROPERTY(QString subject READ getSubject WRITE setSubject NOTIFY subjectChanged)
Q_PROPERTY(QString description READ getDescription WRITE setDescription NOTIFY descriptionChanged)
Q_PROPERTY(QString uri READ getUri NOTIFY uriChanged)
Q_PROPERTY(bool haveModel READ getHaveModel NOTIFY haveModelChanged)
Q_PROPERTY(bool isScheduled READ isScheduled WRITE setIsScheduled NOTIFY isScheduledChanged)
Q_PROPERTY(bool isEnded READ isEnded WRITE setIsEnded NOTIFY isEndedChanged)
Q_PROPERTY(bool inviteEnabled READ inviteEnabled WRITE enableInvite NOTIFY inviteEnabledChanged)
Q_PROPERTY(int participantCount READ getParticipantCount NOTIFY participantsChanged)
Q_PROPERTY(QVariantList participants READ getParticipants NOTIFY participantsChanged)
Q_PROPERTY(LinphoneEnums::ConferenceInfoState state READ getConferenceInfoState NOTIFY conferenceInfoStateChanged)
Q_PROPERTY(LinphoneEnums::ConferenceSchedulerState schedulerState READ getConferenceSchedulerState NOTIFY
conferenceSchedulerStateChanged)
static QSharedPointer create(std::shared_ptr conferenceInfo);
ConferenceInfoCore(std::shared_ptr conferenceInfo, QObject *parent = nullptr);
ConferenceInfoCore(const ConferenceInfoCore &conferenceInfoCore);
~ConferenceInfoCore();
void reset(const ConferenceInfoCore &contact);
void setSelf(SafeSharedPointer me);
void setSelf(QSharedPointer me);
QDateTime getDateTimeUtc() const;
QDateTime getDateTimeSystem() const;
int getDuration() const;
QDateTime getEndDateTime() const;
QDateTime getEndDateTimeUtc() const;
QString getOrganizerName() const;
QString getOrganizerAddress() const;
QString getSubject() const;
QString getDescription() const;
QString getUri() const;
bool getHaveModel() const;
void setHaveModel(const bool &haveModel);
bool isScheduled() const;
void setIsScheduled(const bool &on);
bool computeIsEnded() const;
bool isEnded() const;
void setIsEnded(bool ended);
bool inviteEnabled() const;
QVariantList getParticipants() const;
int getParticipantCount() const;
TimeZoneModel *getTimeZoneModel() const;
// QString getIcalendarString() const;
LinphoneEnums::ConferenceInfoState getConferenceInfoState() const;
LinphoneEnums::ConferenceSchedulerState getConferenceSchedulerState() const;
QString toStartEndDateString();
void setDateTime(const QDateTime &date);
void setEndDateTime(const QDateTime &date);
void setDuration(int duration);
void setSubject(const QString &subject);
void setOrganizerName(const QString &organizer);
void setOrganizerAddress(const QString &organizer);
void setUri(const QString &uri);
void setTimeZoneModel(TimeZoneModel *model);
void setDescription(const QString &description);
void enableInvite(const bool &enable);
void setConferenceInfoState(LinphoneEnums::ConferenceInfoState state);
void setConferenceSchedulerState(LinphoneEnums::ConferenceSchedulerState state);
Q_INVOKABLE void addParticipant(const QString &address);
Q_INVOKABLE void addParticipants(const QStringList &addresses);
Q_INVOKABLE void removeParticipant(const QString &address);
Q_INVOKABLE void removeParticipant(const int &index);
Q_INVOKABLE QString getParticipantAddressAt(const int &index);
Q_INVOKABLE void clearParticipants();
void resetParticipants(QVariantList participants);
Q_INVOKABLE void resetParticipants(const QStringList &adresses);
Q_INVOKABLE int getParticipantIndex(const QString &address);
Q_INVOKABLE QString getStartEndDateString();
void writeFromModel(const std::shared_ptr &model);
void writeIntoModel(std::shared_ptr model);
Q_INVOKABLE void save();
Q_INVOKABLE void undo();
virtual void onInvitationsSent(const std::list> &failedInvitations);
Q_INVOKABLE bool isAllDayConf() const;
signals:
void dateTimeChanged();
void endDateTimeChanged();
void durationChanged();
void organizerAddressChanged();
void organizerNameChanged();
void subjectChanged();
void descriptionChanged();
void participantsChanged();
void uriChanged();
void haveModelChanged();
void isScheduledChanged();
void isEndedChanged();
void inviteEnabledChanged();
void conferenceInfoStateChanged();
void conferenceSchedulerStateChanged();
void timeZoneModelChanged();
void saveFailed();
void invitationsSent();
void removed();
void lCancelConferenceInfo();
void lDeleteConferenceInfo(); // Remove completly this conference info from DB
private:
std::shared_ptr mConferenceInfoModel = nullptr;
QSharedPointer> mConfInfoModelConnection;
QSharedPointer> mConfSchedulerModelConnection;
QSharedPointer> mCoreModelConnection;
QDateTime mDateTime;
QDateTime mEndDateTime;
int mDuration;
QString mOrganizerAddress;
QString mOrganizerName;
QString mSubject;
QString mDescription;
QString mUri;
QVariantList mParticipants;
QSharedPointer mTimeZoneModel;
LinphoneEnums::ConferenceSchedulerState mConferenceSchedulerState;
LinphoneEnums::ConferenceInfoState mConferenceInfoState =
LinphoneEnums::ConferenceInfoState::ConferenceInfoStateNew;
bool mHaveModel = false;
bool mIsScheduled;
bool mIsEnded = false;
bool mInviteEnabled = true;
DECLARE_ABSTRACT_OBJECT
};
Q_DECLARE_METATYPE(ConferenceInfoCore *)
#endif