Roster Management
=================
Il Roster dovrà essere suddiviso in due gruppi OTHERS(“others”) e VERIFIED(“verified”) e ogni elemento del Roster dovrà necessariamente contenere l’attributo **name** e il **jid** di riferimento.
Esempio:
.. code-block:: xml
-
verified
* Il gruppo OTHERS rappresenta tutti i membri che non sono ancora registrati nella chat.
* Il gruppo VERIFIED rappresenta tutti i membri registrati nella chat e visibili nella rubrica dell’applicazione.
Per prima cosa il client richiede il Roster e carica la rubrica del telefono per effettuare una diff tra Roster e Rubrica; il client invierà un messaggio XMPP al buddy xmpp_service dopo l’esito della diff.
Il messaggio :ref:`add-to-roster` avrà nel payload la lista dei membri:
* Senza un gruppo
* Senza name
* Con un name diverso da quello presente nel Roster
* Presenti in Rubrica ma non presenti nel Roster
* Con gruppo OTHERS sul Roster ma subscription diversa da none
.. code-block:: xml
cmd_add_to_roster
{
"channelUsers": [
{
"name": "Mario Rossi",
"address": "00393471111111"
},
{
"name": "Luca Rossi",
"address": "00393472222222"
}
]
}
Add Roster
----------
Alla ricezione del messaggio :ref:`add-to-roster` il buddy farà queste operazioni per ogni membro ricevuto:
* Se non esiste nel Roster lo aggiunge e lo assegna al gruppo VERIFIED se è registrato alla chat oppure al gruppo OTHERS impostando come name il nome ricevuto
* Se esiste già nel Roster verifica se ha un gruppo o meno, in entrambi i casi lo assegna al gruppo VERIFIED se è registrato alla chat oppure al gruppo OTHERS
* Se esiste già nel Roster verifica se il nome ricevuto è diverso da quello presente nel Roster, se dovesse essere diverso aggiorna il name
Subscription
------------
Il client per tutti i membri del Roster presenti nel gruppo VERIFIED con subscription diversa da both e da remove e con nessuna subscription in pending (**ask='subscribe'**) manda una presence subscribe.