Miranda NG Official Community Forum

Miranda NG русскоязычный форум => Разработка => Topic started by: Davis on 07 06 2016, 12:41:58

Title: Jabber, удаленные аватары остаются
Post by: Davis on 07 06 2016, 12:41:58
Привет

openfire+LDAP+miranda
Если я у контакта удаляю аватар(в AD), то в миранде он остается. Сама про себя миранда говорит, что все ок, аватар есть. Другим рассылает presence с хешем. При обновлении своего или другого(такого же, с удаленным аватаром) с сервера показывает старый аватар.
При этом в логе видно, что в пришедшем с сервера VCARD аватар пустой:
Code: [Select]
  <PHOTO>
    <TYPE>image/jpeg</TYPE>
    <BINVAL></BINVAL>
  </PHOTO>

Если у контакта никогда не было аватара, то все ок - у него его и нет.

Долго я трассировал это дело и нашел подходящее место.
trunk/protocols/JabberG/src/jabber_iqid.cpp:
В методе CJabberProto::OnIqResultGetVcard заводим локальный флаг hasPhoto = false - вот (http://trac.miranda-ng.org/browser/trunk/protocols/JabberG/src/jabber_iqid.cpp?rev=+16873#L717)
потом вызываем  (http://trac.miranda-ng.org/browser/trunk/protocols/JabberG/src/jabber_iqid.cpp?rev=+16873#L1009) метод OnIqResultGetVcardPhoto и передаем ему ссылку на hasPhoto, если метод находит фотку в VCard, то hasPhoto он устанавливает в TRUE, в противном случае - не меняет.
И... все, этот флаг больше не обрабатывается в теле функции.
При этом я смотрю все остальные hasXXXX обрабатываются - если FALSE, то соответсвующие значения удаляются из базы.
Есть мнение, что тут недоработка.

Поэтому я вот в это место (http://trac.miranda-ng.org/browser/trunk/protocols/JabberG/src/jabber_iqid.cpp?rev=+16873#L1124) вставил такой код:
Code: [Select]
if (!hasPhoto) {
debugLogA("Has no avatar");
delSetting(hContact, "AvatarHash");

if (ptrT(getTStringA(hContact, "AvatarSaved")) != NULL) {
delSetting(hContact, "AvatarSaved");
ProtoBroadcastAck(hContact, ACKTYPE_AVATAR, ACKRESULT_SUCCESS, NULL, NULL);
}
}

В моих тестах после этого удаление аватаров на сервере стало приводить к их удалению в мирандах.
Вполне может быть, что я не то нашел и неправильно исправил, требуется помощь знатоков.
Но явно где-то есть упущение.
ghazan, загляни! ;)
Title: Re: Jabber, удаленные аватары остаются
Post by: Davis on 08 06 2016, 08:31:02
Я подумал, может быть тут имелось в виду, что клиент главнее? Типа даже если сервер не поддерживает аватары, то сам клиент может от своего имени действовать?

Хотя сам аватар вместе VCard собеседники все равно грузят с сервера, а там аватара нет. Так что, думаю, мой патч - правильный
Title: Re: Jabber, удаленные аватары остаются
Post by: ghazan on 13 06 2016, 11:53:17
упущение, однозначно

патч хороший, сейчас залью
спасибо :)