fix crash when null call history

Hide presence popup button if publish is disabled
This commit is contained in:
Gaelle Braud 2026-01-14 10:18:13 +01:00
parent 4e8ded737c
commit dc4ebebc9b
8 changed files with 44 additions and 35 deletions

View file

@ -50,6 +50,7 @@ AccountCore::AccountCore(const std::shared_ptr<linphone::Account> &account) : QO
mIsDefaultAccount = CoreModel::getInstance()->getCore()->getDefaultAccount() == account; mIsDefaultAccount = CoreModel::getInstance()->getCore()->getDefaultAccount() == account;
mUnreadNotifications = account->getMissedCallsCount() + account->getUnreadChatMessageCount(); mUnreadNotifications = account->getMissedCallsCount() + account->getUnreadChatMessageCount();
mDisplayName = Utils::coreStringToAppString(identityAddress->getDisplayName()); mDisplayName = Utils::coreStringToAppString(identityAddress->getDisplayName());
mPublishEnabled = params->publishEnabled();
if (mDisplayName.isEmpty()) { if (mDisplayName.isEmpty()) {
mDisplayName = ToolModel::getDisplayName(identityAddress); mDisplayName = ToolModel::getDisplayName(identityAddress);
auto copyAddress = identityAddress->clone(); auto copyAddress = identityAddress->clone();

View file

@ -84,6 +84,7 @@ public:
Q_PROPERTY(LinphoneEnums::Presence explicitPresence MEMBER mExplicitPresence NOTIFY presenceChanged) Q_PROPERTY(LinphoneEnums::Presence explicitPresence MEMBER mExplicitPresence NOTIFY presenceChanged)
Q_PROPERTY(QString presenceNote READ getPresenceNote WRITE setPresenceNote NOTIFY presenceChanged) Q_PROPERTY(QString presenceNote READ getPresenceNote WRITE setPresenceNote NOTIFY presenceChanged)
Q_PROPERTY(int maxPresenceNoteSize MEMBER mMaxPresenceNoteSize CONSTANT) Q_PROPERTY(int maxPresenceNoteSize MEMBER mMaxPresenceNoteSize CONSTANT)
Q_PROPERTY(bool publishEnabled MEMBER mPublishEnabled CONSTANT)
DECLARE_CORE_GET(int, voicemailCount, VoicemailCount) DECLARE_CORE_GET(int, voicemailCount, VoicemailCount)
static QSharedPointer<AccountCore> create(const std::shared_ptr<linphone::Account> &account); static QSharedPointer<AccountCore> create(const std::shared_ptr<linphone::Account> &account);
@ -272,6 +273,7 @@ private:
LinphoneEnums::Presence mExplicitPresence; LinphoneEnums::Presence mExplicitPresence;
QString mPresenceNote; QString mPresenceNote;
int mMaxPresenceNoteSize; int mMaxPresenceNoteSize;
bool mPublishEnabled = false;
bool mIsSaved = true; bool mIsSaved = true;

View file

@ -70,6 +70,6 @@ bool CallHistoryProxy::SortFilterList::filterAcceptsRow(int sourceRow, const QMo
bool CallHistoryProxy::SortFilterList::lessThan(const QModelIndex &sourceLeft, const QModelIndex &sourceRight) const { bool CallHistoryProxy::SortFilterList::lessThan(const QModelIndex &sourceLeft, const QModelIndex &sourceRight) const {
auto l = getItemAtSource<CallHistoryList, CallHistoryCore>(sourceLeft.row()); auto l = getItemAtSource<CallHistoryList, CallHistoryCore>(sourceLeft.row());
auto r = getItemAtSource<CallHistoryList, CallHistoryCore>(sourceRight.row()); auto r = getItemAtSource<CallHistoryList, CallHistoryCore>(sourceRight.row());
if (l && r) return l->mDate < r->mDate;
return l->mDate < r->mDate; return false;
} }

View file

@ -39,45 +39,45 @@
<context> <context>
<name>AccountCore</name> <name>AccountCore</name>
<message> <message>
<location filename="../../core/account/AccountCore.cpp" line="446"/> <location filename="../../core/account/AccountCore.cpp" line="447"/>
<source>drawer_menu_account_connection_status_connected</source> <source>drawer_menu_account_connection_status_connected</source>
<extracomment>&quot;Connecté&quot;</extracomment> <extracomment>&quot;Connecté&quot;</extracomment>
<translation>Verbunden</translation> <translation>Verbunden</translation>
</message> </message>
<message> <message>
<location filename="../../core/account/AccountCore.cpp" line="449"/> <location filename="../../core/account/AccountCore.cpp" line="450"/>
<source>drawer_menu_account_connection_status_refreshing</source> <source>drawer_menu_account_connection_status_refreshing</source>
<translation>Aktualisiere</translation> <translation>Aktualisiere</translation>
</message> </message>
<message> <message>
<location filename="../../core/account/AccountCore.cpp" line="452"/> <location filename="../../core/account/AccountCore.cpp" line="453"/>
<source>drawer_menu_account_connection_status_progress</source> <source>drawer_menu_account_connection_status_progress</source>
<translation>Verbinde</translation> <translation>Verbinde</translation>
</message> </message>
<message> <message>
<location filename="../../core/account/AccountCore.cpp" line="455"/> <location filename="../../core/account/AccountCore.cpp" line="456"/>
<source>drawer_menu_account_connection_status_failed</source> <source>drawer_menu_account_connection_status_failed</source>
<translation>Fehler</translation> <translation>Fehler</translation>
</message> </message>
<message> <message>
<location filename="../../core/account/AccountCore.cpp" line="459"/> <location filename="../../core/account/AccountCore.cpp" line="460"/>
<source>drawer_menu_account_connection_status_cleared</source> <source>drawer_menu_account_connection_status_cleared</source>
<translation>Deaktiviert</translation> <translation>Deaktiviert</translation>
</message> </message>
<message> <message>
<location filename="../../core/account/AccountCore.cpp" line="493"/> <location filename="../../core/account/AccountCore.cpp" line="494"/>
<source>manage_account_status_connected_summary</source> <source>manage_account_status_connected_summary</source>
<extracomment>&quot;Vous êtes en ligne et joignable.&quot;</extracomment> <extracomment>&quot;Vous êtes en ligne et joignable.&quot;</extracomment>
<translation>Sie sind online und erreichbar.</translation> <translation>Sie sind online und erreichbar.</translation>
</message> </message>
<message> <message>
<location filename="../../core/account/AccountCore.cpp" line="496"/> <location filename="../../core/account/AccountCore.cpp" line="497"/>
<source>manage_account_status_failed_summary</source> <source>manage_account_status_failed_summary</source>
<extracomment>&quot;Erreur de connexion, vérifiez vos paramètres.&quot;</extracomment> <extracomment>&quot;Erreur de connexion, vérifiez vos paramètres.&quot;</extracomment>
<translation>Verbindungsfehler, überprüfen Sie Ihre Einstellungen.</translation> <translation>Verbindungsfehler, überprüfen Sie Ihre Einstellungen.</translation>
</message> </message>
<message> <message>
<location filename="../../core/account/AccountCore.cpp" line="500"/> <location filename="../../core/account/AccountCore.cpp" line="501"/>
<source>manage_account_status_cleared_summary</source> <source>manage_account_status_cleared_summary</source>
<extracomment>&quot;Compte désactivé, vous ne recevrez ni appel ni message.&quot;</extracomment> <extracomment>&quot;Compte désactivé, vous ne recevrez ni appel ni message.&quot;</extracomment>
<translation>Konto deaktiviert, Sie erhalten keine Anrufe oder Nachrichten.</translation> <translation>Konto deaktiviert, Sie erhalten keine Anrufe oder Nachrichten.</translation>
@ -2757,19 +2757,19 @@ Stellen Sie sicher, dass Sie keine sensiblen Informationen teilen!</translation>
<translation type="vanished">Fehler</translation> <translation type="vanished">Fehler</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Contact/Contact.qml" line="164"/> <location filename="../../view/Control/Display/Contact/Contact.qml" line="165"/>
<source>information_popup_error_title</source> <source>information_popup_error_title</source>
<extracomment>Erreur</extracomment> <extracomment>Erreur</extracomment>
<translation>Fehler</translation> <translation>Fehler</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Contact/Contact.qml" line="166"/> <location filename="../../view/Control/Display/Contact/Contact.qml" line="167"/>
<source>information_popup_voicemail_address_undefined_message</source> <source>information_popup_voicemail_address_undefined_message</source>
<extracomment>L&apos;URI de messagerie vocale n&apos;est pas définie.</extracomment> <extracomment>L&apos;URI de messagerie vocale n&apos;est pas définie.</extracomment>
<translation>Die Voicemail-URI ist nicht definiert.</translation> <translation>Die Voicemail-URI ist nicht definiert.</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Contact/Contact.qml" line="180"/> <location filename="../../view/Control/Display/Contact/Contact.qml" line="181"/>
<source>account_settings_name_accessible_name</source> <source>account_settings_name_accessible_name</source>
<extracomment>Account settings of %1</extracomment> <extracomment>Account settings of %1</extracomment>
<translation>Kontoeinstellungen von %1</translation> <translation>Kontoeinstellungen von %1</translation>

View file

@ -39,45 +39,45 @@
<context> <context>
<name>AccountCore</name> <name>AccountCore</name>
<message> <message>
<location filename="../../core/account/AccountCore.cpp" line="446"/> <location filename="../../core/account/AccountCore.cpp" line="447"/>
<source>drawer_menu_account_connection_status_connected</source> <source>drawer_menu_account_connection_status_connected</source>
<extracomment>&quot;Connecté&quot;</extracomment> <extracomment>&quot;Connecté&quot;</extracomment>
<translation>Connected</translation> <translation>Connected</translation>
</message> </message>
<message> <message>
<location filename="../../core/account/AccountCore.cpp" line="449"/> <location filename="../../core/account/AccountCore.cpp" line="450"/>
<source>drawer_menu_account_connection_status_refreshing</source> <source>drawer_menu_account_connection_status_refreshing</source>
<translation>Refreshing</translation> <translation>Refreshing</translation>
</message> </message>
<message> <message>
<location filename="../../core/account/AccountCore.cpp" line="452"/> <location filename="../../core/account/AccountCore.cpp" line="453"/>
<source>drawer_menu_account_connection_status_progress</source> <source>drawer_menu_account_connection_status_progress</source>
<translation>Connecting</translation> <translation>Connecting</translation>
</message> </message>
<message> <message>
<location filename="../../core/account/AccountCore.cpp" line="455"/> <location filename="../../core/account/AccountCore.cpp" line="456"/>
<source>drawer_menu_account_connection_status_failed</source> <source>drawer_menu_account_connection_status_failed</source>
<translation>Error</translation> <translation>Error</translation>
</message> </message>
<message> <message>
<location filename="../../core/account/AccountCore.cpp" line="459"/> <location filename="../../core/account/AccountCore.cpp" line="460"/>
<source>drawer_menu_account_connection_status_cleared</source> <source>drawer_menu_account_connection_status_cleared</source>
<translation>Disabled</translation> <translation>Disabled</translation>
</message> </message>
<message> <message>
<location filename="../../core/account/AccountCore.cpp" line="493"/> <location filename="../../core/account/AccountCore.cpp" line="494"/>
<source>manage_account_status_connected_summary</source> <source>manage_account_status_connected_summary</source>
<extracomment>&quot;Vous êtes en ligne et joignable.&quot;</extracomment> <extracomment>&quot;Vous êtes en ligne et joignable.&quot;</extracomment>
<translation>You are online and reachable.</translation> <translation>You are online and reachable.</translation>
</message> </message>
<message> <message>
<location filename="../../core/account/AccountCore.cpp" line="496"/> <location filename="../../core/account/AccountCore.cpp" line="497"/>
<source>manage_account_status_failed_summary</source> <source>manage_account_status_failed_summary</source>
<extracomment>&quot;Erreur de connexion, vérifiez vos paramètres.&quot;</extracomment> <extracomment>&quot;Erreur de connexion, vérifiez vos paramètres.&quot;</extracomment>
<translation>Connection error, check your settings.</translation> <translation>Connection error, check your settings.</translation>
</message> </message>
<message> <message>
<location filename="../../core/account/AccountCore.cpp" line="500"/> <location filename="../../core/account/AccountCore.cpp" line="501"/>
<source>manage_account_status_cleared_summary</source> <source>manage_account_status_cleared_summary</source>
<extracomment>&quot;Compte désactivé, vous ne recevrez ni appel ni message.&quot;</extracomment> <extracomment>&quot;Compte désactivé, vous ne recevrez ni appel ni message.&quot;</extracomment>
<translation>Account disabled, you will not receive calls or messages.</translation> <translation>Account disabled, you will not receive calls or messages.</translation>
@ -2690,19 +2690,19 @@ Only your correspondent can decrypt them.</translation>
<context> <context>
<name>Contact</name> <name>Contact</name>
<message> <message>
<location filename="../../view/Control/Display/Contact/Contact.qml" line="164"/> <location filename="../../view/Control/Display/Contact/Contact.qml" line="165"/>
<source>information_popup_error_title</source> <source>information_popup_error_title</source>
<extracomment>Erreur</extracomment> <extracomment>Erreur</extracomment>
<translation>Error</translation> <translation>Error</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Contact/Contact.qml" line="166"/> <location filename="../../view/Control/Display/Contact/Contact.qml" line="167"/>
<source>information_popup_voicemail_address_undefined_message</source> <source>information_popup_voicemail_address_undefined_message</source>
<extracomment>L&apos;URI de messagerie vocale n&apos;est pas définie.</extracomment> <extracomment>L&apos;URI de messagerie vocale n&apos;est pas définie.</extracomment>
<translation>The voicemail URI is not defined.</translation> <translation>The voicemail URI is not defined.</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Contact/Contact.qml" line="180"/> <location filename="../../view/Control/Display/Contact/Contact.qml" line="181"/>
<source>account_settings_name_accessible_name</source> <source>account_settings_name_accessible_name</source>
<extracomment>Account settings of %1</extracomment> <extracomment>Account settings of %1</extracomment>
<translation>Account settings of %1</translation> <translation>Account settings of %1</translation>

View file

@ -39,45 +39,45 @@
<context> <context>
<name>AccountCore</name> <name>AccountCore</name>
<message> <message>
<location filename="../../core/account/AccountCore.cpp" line="446"/> <location filename="../../core/account/AccountCore.cpp" line="447"/>
<source>drawer_menu_account_connection_status_connected</source> <source>drawer_menu_account_connection_status_connected</source>
<extracomment>&quot;Connecté&quot;</extracomment> <extracomment>&quot;Connecté&quot;</extracomment>
<translation>Connecté</translation> <translation>Connecté</translation>
</message> </message>
<message> <message>
<location filename="../../core/account/AccountCore.cpp" line="449"/> <location filename="../../core/account/AccountCore.cpp" line="450"/>
<source>drawer_menu_account_connection_status_refreshing</source> <source>drawer_menu_account_connection_status_refreshing</source>
<translation>En cours de rafraîchissement</translation> <translation>En cours de rafraîchissement</translation>
</message> </message>
<message> <message>
<location filename="../../core/account/AccountCore.cpp" line="452"/> <location filename="../../core/account/AccountCore.cpp" line="453"/>
<source>drawer_menu_account_connection_status_progress</source> <source>drawer_menu_account_connection_status_progress</source>
<translation>Connexion</translation> <translation>Connexion</translation>
</message> </message>
<message> <message>
<location filename="../../core/account/AccountCore.cpp" line="455"/> <location filename="../../core/account/AccountCore.cpp" line="456"/>
<source>drawer_menu_account_connection_status_failed</source> <source>drawer_menu_account_connection_status_failed</source>
<translation>Erreur</translation> <translation>Erreur</translation>
</message> </message>
<message> <message>
<location filename="../../core/account/AccountCore.cpp" line="459"/> <location filename="../../core/account/AccountCore.cpp" line="460"/>
<source>drawer_menu_account_connection_status_cleared</source> <source>drawer_menu_account_connection_status_cleared</source>
<translation>Désactivé</translation> <translation>Désactivé</translation>
</message> </message>
<message> <message>
<location filename="../../core/account/AccountCore.cpp" line="493"/> <location filename="../../core/account/AccountCore.cpp" line="494"/>
<source>manage_account_status_connected_summary</source> <source>manage_account_status_connected_summary</source>
<extracomment>&quot;Vous êtes en ligne et joignable.&quot;</extracomment> <extracomment>&quot;Vous êtes en ligne et joignable.&quot;</extracomment>
<translation>Vous êtes en ligne et joignable.</translation> <translation>Vous êtes en ligne et joignable.</translation>
</message> </message>
<message> <message>
<location filename="../../core/account/AccountCore.cpp" line="496"/> <location filename="../../core/account/AccountCore.cpp" line="497"/>
<source>manage_account_status_failed_summary</source> <source>manage_account_status_failed_summary</source>
<extracomment>&quot;Erreur de connexion, vérifiez vos paramètres.&quot;</extracomment> <extracomment>&quot;Erreur de connexion, vérifiez vos paramètres.&quot;</extracomment>
<translation>Erreur de connexion, vérifiez vos paramètres.</translation> <translation>Erreur de connexion, vérifiez vos paramètres.</translation>
</message> </message>
<message> <message>
<location filename="../../core/account/AccountCore.cpp" line="500"/> <location filename="../../core/account/AccountCore.cpp" line="501"/>
<source>manage_account_status_cleared_summary</source> <source>manage_account_status_cleared_summary</source>
<extracomment>&quot;Compte désactivé, vous ne recevrez ni appel ni message.&quot;</extracomment> <extracomment>&quot;Compte désactivé, vous ne recevrez ni appel ni message.&quot;</extracomment>
<translation>Compte désactivé, vous ne recevrez ni appel ni message.</translation> <translation>Compte désactivé, vous ne recevrez ni appel ni message.</translation>
@ -2665,19 +2665,19 @@ en bout. Seul votre correspondant peut les déchiffrer.</translation>
<context> <context>
<name>Contact</name> <name>Contact</name>
<message> <message>
<location filename="../../view/Control/Display/Contact/Contact.qml" line="164"/> <location filename="../../view/Control/Display/Contact/Contact.qml" line="165"/>
<source>information_popup_error_title</source> <source>information_popup_error_title</source>
<extracomment>Erreur</extracomment> <extracomment>Erreur</extracomment>
<translation>Erreur</translation> <translation>Erreur</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Contact/Contact.qml" line="166"/> <location filename="../../view/Control/Display/Contact/Contact.qml" line="167"/>
<source>information_popup_voicemail_address_undefined_message</source> <source>information_popup_voicemail_address_undefined_message</source>
<extracomment>L&apos;URI de messagerie vocale n&apos;est pas définie.</extracomment> <extracomment>L&apos;URI de messagerie vocale n&apos;est pas définie.</extracomment>
<translation>L&apos;URI de messagerie vocale n&apos;est pas définie.</translation> <translation>L&apos;URI de messagerie vocale n&apos;est pas définie.</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Contact/Contact.qml" line="180"/> <location filename="../../view/Control/Display/Contact/Contact.qml" line="181"/>
<source>account_settings_name_accessible_name</source> <source>account_settings_name_accessible_name</source>
<extracomment>Account settings of %1</extracomment> <extracomment>Account settings of %1</extracomment>
<translation>Paramaètres de compte de %1</translation> <translation>Paramaètres de compte de %1</translation>

View file

@ -528,6 +528,11 @@ void AccountModel::setPresence(LinphoneEnums::Presence presence,
QString presenceNote) { QString presenceNote) {
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
if (!mMonitor->getParams()->publishEnabled()) {
lDebug() << log().arg("cannot set presence as publish is disabled in account params, return");
return;
}
lDebug() << log().arg("presence set request to: " + LinphoneEnums::toString(presence) + " | user initiated? " + lDebug() << log().arg("presence set request to: " + LinphoneEnums::toString(presence) + " | user initiated? " +
(userInitiated ? "true" : "false") + " | reset to auto? " + (resetToAuto ? "true" : "false")); (userInitiated ? "true" : "false") + " | reset to auto? " + (resetToAuto ? "true" : "false"));

View file

@ -102,6 +102,7 @@ Control.Control{
height: contactStatusPopup.height height: contactStatusPopup.height
ContactStatusPopup{ ContactStatusPopup{
id: contactStatusPopup id: contactStatusPopup
visible: mainItem.account.core.publishEnabled
} }
MouseArea { MouseArea {
anchors.fill: contactStatusPopup anchors.fill: contactStatusPopup