/* * Copyright (c) 2010-2024 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 CORE_MODEL_H_ #define CORE_MODEL_H_ #include #include #include #include #include #include #include #include #include "model/account/AccountManager.hpp" #include "model/auth/OIDCModel.hpp" #include "model/cli/CliModel.hpp" #include "model/listener/Listener.hpp" #include "model/logger/LoggerModel.hpp" #include "model/search/MagicSearchModel.hpp" #include "tool/AbstractObject.hpp" // ============================================================================= class AbstractEventCountNotifier; class EventCountNotifier; class CoreModel : public ::Listener, public linphone::CoreListener, public AbstractObject { Q_OBJECT public: CoreModel(const QString &configPath, QThread *parent); ~CoreModel(); static std::shared_ptr create(const QString &configPath, QThread *parent); static std::shared_ptr getInstance(); std::shared_ptr getCore(); std::shared_ptr getLogger(); bool isInitialized() const; void start(); void setConfigPath(QString path); void refreshOidcRemainingTime(); QString getFetchConfig(QString filePath, bool *error); void useFetchConfig(QString filePath); bool setFetchConfig(QString filePath); void migrate(); void searchInMagicSearch(QString filter, int sourceFlags, LinphoneEnums::MagicSearchAggregation aggregation, int maxResults); void checkForUpdate(const std::string &applicationVersion, bool requestedByUser = false); bool isCheckVersionRequestedByUser() const; bool mEnd = false; linphone::ConfiguringState mConfigStatus; QString mConfigMessage; std::shared_ptr mCore; std::shared_ptr mLogger; signals: void loggerInitialized(); void friendCreated(const std::shared_ptr &f); void friendRemoved(const std::shared_ptr &f); void friendUpdated(const std::shared_ptr &f); void bearerAccountAdded(); void unreadNotificationsChanged(); void requestFetchConfig(QString path); void requestRestart(); void enabledLdapAddressBookSaved(); void magicSearchResultReceived(QString filter); void messageReadInChatRoom(std::shared_ptr chatRoom); void oidcRemainingTimeBeforeTimeoutChanged(int remainingTime); void forceOidcTimeout(); void timeoutTimerStarted(); void timeoutTimerStopped(); private: QString mConfigPath; QTimer *mIterateTimer = nullptr; QMap mOpenIdConnections; std::shared_ptr mMagicSearch; bool mStarted = false; bool mCheckVersionRequestedByUser = false; void setPathBeforeCreation(); void setPathsAfterCreation(); void setPathAfterStart(); static std::shared_ptr gCoreModel; DECLARE_ABSTRACT_OBJECT //-------------------------------------------------------------------------------- // LINPHONE //-------------------------------------------------------------------------------- virtual void onAccountAdded(const std::shared_ptr &core, const std::shared_ptr &account) override; virtual void onAccountRemoved(const std::shared_ptr &core, const std::shared_ptr &account) override; virtual void onAccountRegistrationStateChanged(const std::shared_ptr &core, const std::shared_ptr &account, linphone::RegistrationState state, const std::string &message) override; virtual void onAuthenticationRequested(const std::shared_ptr &core, const std::shared_ptr &authInfo, linphone::AuthMethod method) override; virtual void onCallEncryptionChanged(const std::shared_ptr &core, const std::shared_ptr &call, bool on, const std::string &authenticationToken) override; virtual void onCallLogUpdated(const std::shared_ptr &core, const std::shared_ptr &callLog) override; virtual void onCallStateChanged(const std::shared_ptr &core, const std::shared_ptr &call, linphone::Call::State state, const std::string &message) override; virtual void onCallStatsUpdated(const std::shared_ptr &core, const std::shared_ptr &call, const std::shared_ptr &stats) override; virtual void onCallCreated(const std::shared_ptr &lc, const std::shared_ptr &call) override; virtual void onChatRoomRead(const std::shared_ptr &core, const std::shared_ptr &chatRoom) override; virtual void onChatRoomStateChanged(const std::shared_ptr &core, const std::shared_ptr &chatRoom, linphone::ChatRoom::State state) override; virtual void onConferenceInfoReceived(const std::shared_ptr &core, const std::shared_ptr &conferenceInfo) override; virtual void onConferenceStateChanged(const std::shared_ptr &core, const std::shared_ptr &conference, linphone::Conference::State state) override; virtual void onConfiguringStatus(const std::shared_ptr &core, linphone::ConfiguringState status, const std::string &message) override; virtual void onDefaultAccountChanged(const std::shared_ptr &core, const std::shared_ptr &account) override; virtual void onDtmfReceived(const std::shared_ptr &lc, const std::shared_ptr &call, int dtmf) override; virtual void onEcCalibrationResult(const std::shared_ptr &core, linphone::EcCalibratorStatus status, int delayMs) override; virtual void onFirstCallStarted(const std::shared_ptr &core) override; virtual void onGlobalStateChanged(const std::shared_ptr &core, linphone::GlobalState gstate, const std::string &message) override; virtual void onIsComposingReceived(const std::shared_ptr &core, const std::shared_ptr &room) override; virtual void onLastCallEnded(const std::shared_ptr &core) override; virtual void onLogCollectionUploadStateChanged(const std::shared_ptr &core, linphone::Core::LogCollectionUploadState state, const std::string &info) override; virtual void onLogCollectionUploadProgressIndication(const std::shared_ptr &lc, size_t offset, size_t total) override; virtual void onMessageReceived(const std::shared_ptr &core, const std::shared_ptr &room, const std::shared_ptr &message) override; virtual void onMessagesReceived(const std::shared_ptr &core, const std::shared_ptr &room, const std::list> &messages) override; virtual void onNewMessageReaction(const std::shared_ptr &core, const std::shared_ptr &chatRoom, const std::shared_ptr &message, const std::shared_ptr &reaction) override; virtual void onNotifyPresenceReceivedForUriOrTel(const std::shared_ptr &core, const std::shared_ptr &linphoneFriend, const std::string &uriOrTel, const std::shared_ptr &presenceModel) override; virtual void onNotifyPresenceReceived(const std::shared_ptr &core, const std::shared_ptr &linphoneFriend) override; virtual void onQrcodeFound(const std::shared_ptr &core, const std::string &result) override; virtual void onReactionRemoved(const std::shared_ptr &core, const std::shared_ptr &chatRoom, const std::shared_ptr &message, const std::shared_ptr &address) override; virtual void onTransferStateChanged(const std::shared_ptr &core, const std::shared_ptr &call, linphone::Call::State state) override; virtual void onVersionUpdateCheckResultReceived(const std::shared_ptr &core, linphone::VersionUpdateCheckResult result, const std::string &version, const std::string &url) override; virtual void onFriendListRemoved(const std::shared_ptr &core, const std::shared_ptr &friendList) override; virtual void onAudioDevicesListUpdated(const std::shared_ptr &core) override; virtual void onAudioDeviceChanged(const std::shared_ptr &core, const std::shared_ptr &device) override; signals: void accountAdded(const std::shared_ptr &core, const std::shared_ptr &account); void accountRemoved(const std::shared_ptr &core, const std::shared_ptr &account); void accountRegistrationStateChanged(const std::shared_ptr &core, const std::shared_ptr &account, linphone::RegistrationState state, const std::string &message); void authenticationRequested(const std::shared_ptr &core, const std::shared_ptr &authInfo, linphone::AuthMethod method); void callEncryptionChanged(const std::shared_ptr &core, const std::shared_ptr &call, bool on, const std::string &authenticationToken); void callLogUpdated(const std::shared_ptr &core, const std::shared_ptr &callLog); void callStateChanged(const std::shared_ptr &core, const std::shared_ptr &call, linphone::Call::State state, const std::string &message); void callStatsUpdated(const std::shared_ptr &core, const std::shared_ptr &call, const std::shared_ptr &stats); void callCreated(const std::shared_ptr &call); void chatRoomRead(const std::shared_ptr &core, const std::shared_ptr &chatRoom); void chatRoomStateChanged(const std::shared_ptr &core, const std::shared_ptr &chatRoom, linphone::ChatRoom::State state); void conferenceInfoReceived(const std::shared_ptr &core, const std::shared_ptr &conferenceInfo); void conferenceStateChanged(const std::shared_ptr &core, const std::shared_ptr &conference, linphone::Conference::State state); void configuringStatus(const std::shared_ptr &core, linphone::ConfiguringState status, const std::string &message); void defaultAccountChanged(const std::shared_ptr &core, const std::shared_ptr &account); void dtmfReceived(const std::shared_ptr &lc, const std::shared_ptr &call, int dtmf); void ecCalibrationResult(const std::shared_ptr &core, linphone::EcCalibratorStatus status, int delayMs); void firstCallStarted(); void globalStateChanged(const std::shared_ptr &core, linphone::GlobalState gstate, const std::string &message); void isComposingReceived(const std::shared_ptr &core, const std::shared_ptr &room); void lastCallEnded(); void logCollectionUploadStateChanged(const std::shared_ptr &core, linphone::Core::LogCollectionUploadState state, const std::string &info); void logCollectionUploadProgressIndication(const std::shared_ptr &lc, size_t offset, size_t total); void messageReceived(const std::shared_ptr &core, const std::shared_ptr &room, const std::shared_ptr &message); void messagesReceived(const std::shared_ptr &core, const std::shared_ptr &room, const std::list> &messages); void newMessageReaction(const std::shared_ptr &core, const std::shared_ptr &chatRoom, const std::shared_ptr &message, const std::shared_ptr &reaction); void notifyPresenceReceivedForUriOrTel(const std::shared_ptr &core, const std::shared_ptr &linphoneFriend, const std::string &uriOrTel, const std::shared_ptr &presenceModel); void notifyPresenceReceived(const std::shared_ptr &core, const std::shared_ptr &linphoneFriend); void qrcodeFound(const std::shared_ptr &core, const std::string &result); void reactionRemoved(const std::shared_ptr &core, const std::shared_ptr &chatRoom, const std::shared_ptr &message, const std::shared_ptr &address); void transferStateChanged(const std::shared_ptr &core, const std::shared_ptr &call, linphone::Call::State state); void versionUpdateCheckResultReceived(const std::shared_ptr &core, linphone::VersionUpdateCheckResult result, const std::string &version, const std::string &url, bool checkRequestedByUser); void friendListRemoved(const std::shared_ptr &core, const std::shared_ptr &friendList); void audioDevicesListUpdated(const std::shared_ptr &core); void audioDeviceChanged(const std::shared_ptr &core, const std::shared_ptr &device); }; #endif