From 95f0d4008a12842fc2651f56575c782b12f51806 Mon Sep 17 00:00:00 2001 From: blue Date: Sun, 5 Apr 2020 16:25:27 +0300 Subject: [PATCH] minor fix about updating muc avatars --- core/account.cpp | 6 +++--- core/conference.cpp | 50 +++++++++++++++++++++++++++++++++------------ core/rosteritem.cpp | 1 - 3 files changed, 40 insertions(+), 17 deletions(-) diff --git a/core/account.cpp b/core/account.cpp index ec92e96..2f8238a 100644 --- a/core/account.cpp +++ b/core/account.cpp @@ -1374,13 +1374,13 @@ void Core::Account::addNewRoom(const QString& jid, const QString& nick, const QS bool hasAvatar = conf->readAvatarInfo(info); if (hasAvatar) { if (info.autogenerated) { - cData.insert("avatarState", static_cast(Shared::Avatar::valid)); + cData.insert("avatarState", QVariant::fromValue(Shared::Avatar::autocreated)); } else { - cData.insert("avatarState", static_cast(Shared::Avatar::autocreated)); + cData.insert("avatarState", QVariant::fromValue(Shared::Avatar::valid)); } cData.insert("avatarPath", conf->avatarPath() + "." + info.type); } else { - cData.insert("avatarState", static_cast(Shared::Avatar::empty)); + cData.insert("avatarState", QVariant::fromValue(Shared::Avatar::empty)); cData.insert("avatarPath", ""); requestVCard(jid); } diff --git a/core/conference.cpp b/core/conference.cpp index f0b3b7d..d745227 100644 --- a/core/conference.cpp +++ b/core/conference.cpp @@ -134,17 +134,20 @@ void Core::Conference::onRoomParticipantAdded(const QString& p_name) { QStringList comps = p_name.split("/"); QString resource = comps.back(); + QXmppPresence pres = room->participantPresence(p_name); + QXmppMucItem mi = pres.mucItem(); if (resource == jid) { - qDebug() << "Room" << jid << "is reporting of adding itself to the list participants. Not sure what to do with that yet, skipping"; - } else { - QXmppPresence pres = room->participantPresence(p_name); + resource = ""; + } + + Archive::AvatarInfo info; + bool hasAvatar = readAvatarInfo(info, resource); + + if (resource.size() > 0) { QDateTime lastInteraction = pres.lastUserInteraction(); if (!lastInteraction.isValid()) { lastInteraction = QDateTime::currentDateTimeUtc(); } - QXmppMucItem mi = pres.mucItem(); - Archive::AvatarInfo info; - bool hasAvatar = readAvatarInfo(info, resource); QMap cData = { {"lastActivity", lastInteraction}, @@ -169,22 +172,43 @@ void Core::Conference::onRoomParticipantAdded(const QString& p_name) emit addParticipant(resource, cData); } + + switch (pres.vCardUpdateType()) { + case QXmppPresence::VCardUpdateNone: //this presence has nothing to do with photo + break; + case QXmppPresence::VCardUpdateNotReady: //let's say the photo didn't change here + break; + case QXmppPresence::VCardUpdateNoPhoto: { //there is no photo, need to drop if any + if (!hasAvatar || !info.autogenerated) { + setAutoGeneratedAvatar(resource); + } + } + break; + case QXmppPresence::VCardUpdateValidPhoto:{ //there is a photo, need to load + if (hasAvatar) { + if (info.autogenerated || info.hash != pres.photoHash()) { + emit requestVCard(p_name); + } + } else { + emit requestVCard(p_name); + } + break; + } + } } void Core::Conference::onRoomParticipantChanged(const QString& p_name) { QStringList comps = p_name.split("/"); QString resource = comps.back(); - if (resource == jid) { - qDebug() << "Room" << jid << "is reporting of changing his own presence. Not sure what to do with that yet, skipping"; - } else { - QXmppPresence pres = room->participantPresence(p_name); + QXmppPresence pres = room->participantPresence(p_name); + QXmppMucItem mi = pres.mucItem(); + handlePresence(pres); + if (resource != jid) { QDateTime lastInteraction = pres.lastUserInteraction(); if (!lastInteraction.isValid()) { lastInteraction = QDateTime::currentDateTimeUtc(); } - QXmppMucItem mi = pres.mucItem(); - handlePresence(pres); emit changeParticipant(resource, { {"lastActivity", lastInteraction}, @@ -265,7 +289,7 @@ bool Core::Conference::setAutoGeneratedAvatar(const QString& resource) if (result && resource.size() != 0) { emit changeParticipant(resource, { {"avatarState", static_cast(Shared::Avatar::autocreated)}, - {"availability", avatarPath(resource) + ".png"} + {"avatarPath", avatarPath(resource) + ".png"} }); } diff --git a/core/rosteritem.cpp b/core/rosteritem.cpp index 59aa4a7..59b84f8 100644 --- a/core/rosteritem.cpp +++ b/core/rosteritem.cpp @@ -501,7 +501,6 @@ Shared::VCard Core::RosterItem::handleResponseVCard(const QXmppVCardIq& card, co path = avatarPath(resource) + ".png"; } - vCard.setAvatarType(type); vCard.setAvatarPath(path);