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.