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