Sincronização de perfil
Há dois tipos de perfis. O da conta atual e o dos contatos. Como esse vCard contém informações, como o avatar e o nome de exibição, ele deve ser sincronizado o mais rápido possível. Porém, ele deve ser enviado somente quando necessário, para evitar transmissões desnecessárias de dados. O formato usado para armazenar os perfis é um vCard (https://datatracker.ietf.org/doc/html/rfc6350)
Onde estão armazenados os perfis?
Próprio
Está em ${idPath_}/profile.vcf
por exemplo: .local/share/jami/xxxxxx/profile.vcf
em GNU/Linux.
Contatos
Como essa lógica ainda é gerenciada por cliente, ela depende do cliente. Entretanto, no Desktop, isso é 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, esse método deve ser removido em favor do outro localizado no daemon.
Enviar para os dispositivos do contato
Ao se conectar a um novo dispositivo, é criado um canal SIP ou de sincronização. Quando esse canal está pronto, verificamos se é necessário enviar o perfil. Para fazer isso, o hash do perfil é comparado com o que está no cache (${cacheDir}/${accId}/vcard/sha3
como ~/.cache/jami/xxxxx/vcard/sha3
no GNU/Linux) e o arquivo ${cacheDir}/${accId}/vcard/deviceId
é verificado). cf. JamiAccount::needToSendProfile()
. Se não estiver presente, o perfil da conta será enviado. Normalmente, o nome do canal será “vcard://xxx”, em que o emissor é quem está enviando o perfil.
Vários dispositivos
Se o perfil for enviado e o dispositivo for da mesma conta, as conversas serão verificadas e enviaremos perfis de todos os membros. O nome do canal será “${conversationId}/profile/${memberUri}.vcf”. Comportamento testado em daemon/test/unitTest/syncHistory/syncHistory.cpp