Author Topic: Jabber, удаленные аватары остаются  (Read 5941 times)

0 Members and 3 Guests are viewing this topic.

Offline Davis

Привет

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 - вот
потом вызываем метод OnIqResultGetVcardPhoto и передаем ему ссылку на hasPhoto, если метод находит фотку в VCard, то hasPhoto он устанавливает в TRUE, в противном случае - не меняет.
И... все, этот флаг больше не обрабатывается в теле функции.
При этом я смотрю все остальные hasXXXX обрабатываются - если FALSE, то соответсвующие значения удаляются из базы.
Есть мнение, что тут недоработка.

Поэтому я вот в это место вставил такой код:
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, загляни! ;)
 
The following users thanked this post: Apollo2k4

Offline Davis

Re: Jabber, удаленные аватары остаются
« Reply #1 on: 08 06 2016, 08:31:02 »
Я подумал, может быть тут имелось в виду, что клиент главнее? Типа даже если сервер не поддерживает аватары, то сам клиент может от своего имени действовать?

Хотя сам аватар вместе VCard собеседники все равно грузят с сервера, а там аватара нет. Так что, думаю, мой патч - правильный
 

Offline ghazan

Re: Jabber, удаленные аватары остаются
« Reply #2 on: 13 06 2016, 11:53:17 »
упущение, однозначно

патч хороший, сейчас залью
спасибо :)
 
The following users thanked this post: Apollo2k4