Sincronização do perfil
Existem dois tipos de perfis. O da conta atual e o dos contactos. Como este vCard contém informações, como o avatar e o nome de apresentação, deve ser sincronizado o mais rapidamente possível. No entanto, deve ser enviado apenas quando necessário, para evitar transmissões de dados desnecessárias. O formato utilizado para armazenar os perfis é um vCard (https://datatracker.ietf.org/doc/html/rfc6350)
Onde estão armazenados os perfis?
Do próprio
Está em ${idPath_}/profile.vcf
por exemplo: .local/share/jami/xxxxxx/profile.vcf
em GNU/Linux.
Contactos
Uma vez que esta lógica continua a ser gerida por cliente, depende do cliente. No entanto, no Desktop, isto é unificado e armazenado em: ${idPath_}/profiles/${base64(uri)}.vcf
Quando um perfil é enviado
Chamadas
No início de uma chamada, geralmente o cliente envia o vCard. No entanto, este método deve ser removido em favor de outro localizado no daemon.
Enviar para os dispositivos do contacto
Quando se conecta a um novo dispositivo, é criado um canal SIP ou um canal de sincronização. Quando este canal está pronto, verificamos se é necessário enviar o perfil. Para isso, o hash do perfil é comparado com o que está na cache (${cacheDir}/${accId}/vcard/sha3
como ~/.cache/jami/xxxxx/vcard/sha3
no GNU/Linux), e o ficheiro ${cacheDir}/${accId}/vcard/deviceId
é verificado). cf. JamiAccount::needToSendProfile()
. Se não estiver presente, o perfil da conta é enviado. Normalmente, o nome do canal será «vcard://xxx» onde o emissor é quem envia o perfil.
Vários dispositivos
Se o perfil for enviado e o dispositivo for da mesma conta, as conversas são verificadas e enviamos perfis de todos os membros. O nome do canal será «\({conversationId}/profile/\){memberUri}.vcf». Comportamento testado em daemon/test/unitTest/syncHistory/syncHistory.cpp