Localizzazione condivisione sul cliente QT

Come usarlo?

Uso banale

In una conversazione, l’utente può fare clic sull’icona della posizione per visualizzare una mappa. Se Location Services è abilitato sul dispositivo, la posizione dell’utente verrà mostrata sulla mappa, insieme alle località di tutti gli altri membri che condividono la loro posizione (da tutte le conversazioni dell’account selezionato). L’utente può attivare e spegnere la condivisione della posizione facendo clic sui pulsanti di condivisione della posizione.

Quando un utente condivide la propria posizione in una conversazione, sull’icona della conversazione appare un’icona di posizione rossa. Se l’utente riceve una posizione da un altro membro, viene visualizzata un’icona di posizione arancione su tutte le conversazioni in cui il membro è presente.

L’utente può interagire con la mappa recernendo, avvicinando e avvicinando, spostando e chiudendola. La mappa può anche essere pinnata o dispinata. Quando la mappa è dispinata, può essere ripinnata se l’utente è nel giusto account. Questa funzione consente all’utente di mantenere la mappa visibile mentre continua a usare Jami.

Uso avanzato

Multicoparticipazione

scenario

L’utente sta già condividendo la posizione con la conversazione A e la conversazione B.

Caratteristica

Se l’utente passa alla conversazione C, la mappa è ancora visibile e l’utente ha due opzioni

  1. Fai clic sul pulsante condivisione della posizione per condividere anche la posizione con i membri della conversazione C.

  2. Clicca sul pulsante di fine condivisione della posizione. Questo farà emergere una finestra che consente all’utente di disattivare completamente la condivisione della posizione o di smettere di condividere la propria posizione con i membri della conversazione C.

Finestra con pin

Se la finestra è disattaccata, l’utente non potrà fare clic sul pulsante condivisione della posizione perché la finestra non è più connessa a una conversazione. Per iniziare a condividere la posizione con nuove persone, l’utente deve rinfonzare la finestra.

Conti multipli

Ogni account ha una propria mappa unica. Se l’utente dischiude la mappa mentre è in account A, quindi passa al account B e dischiude la mappa, saranno visibili due mappe. Le mappe per gli account A e B visualizzano le posizioni condivise con questi account, rispettivamente, e sono completamente separate l’una dall’altra

Come funziona?

Introduzione

Questa caratteristica è suddivisa in tre parti:

  1. Inviando la propria posizione

  2. Ricevere una posizione

  3. Mostra una posizione

Per determinare la posizione, viene utilizzata l’API [Qt Positioning]https://doc.qt.io/qt-6/qtpositioning-index.html). Una volta determinata la posizione, viene inviata come messaggio sul DHT e trasmessa al cliente. La posizione ricevuta viene quindi visualizzata utilizzando la libreria JavaScript [OpenLayers]https://openlayers.org/).

Invio di una posizione

Appena aperta una mappa, la classe Positioning si occupa di recuperare la posizione corrente utilizzando la classe QGeoPositionInfoSource del modulo QtPositioning. La posizione viene quindi convertita in formato JSON e trasmessa al positionManager. Questa classe coordina l’intero processo di condivisione della posizione. La posizione viene poi condivisa attraverso la funzione sendPosition(). È condivisa:

  • Locali attraverso il segnale localPositionReceived in modo che l’utente possa vedere la propria posizione

  • Il DHT è disponibile su positionShareConvIds_ lista. Questa lista contiene le chiavi di tutte le conversazioni con cui l’utente vuole condividere la propria posizione. Da questa chiave, vengono ottenuti gli URI di tutti i partecipanti e un messaggio di posizione viene inviato a ciascun partecipante.

Il formato JSON di una posizione è il seguente:

  • Tipo (messaggio di posizione o di fermo)

  • Latitudine

  • Lungo-titudine

  • Tempo (non utilizzato dal QtClient)

Un esempio di dati: {\"lat\":45.51616583988481,\"long\":-73.620693,\"time\":1671658862000,\"type\":\"Position\"}

Quando si invia la posizione al demone, viene trasmesso anche l’URI dell’autore.

Quando l’utente smette di condividere la propria posizione con una conversazione, l’ID della conversazione viene semplicemente rimosso dalla lista positionShareConvIds_. Un messaggio di «stop» viene inviato anche a ogni partecipante.

Ricevere una posizione

Quando una posizione viene ricevuta, viene attivato il slot «onPositionReceived() » Che si tratti di una posizione locale dal modulo QtPositioning o di una posizione da un altro contatto.

  • Aggiunto (l’URI non è presente nell’elenco)

  • Aggiornato (l’URI è già presente nell’elenco)

  • Deletto (tipo = «Stop»)

La posizione è memorizzata nell’elenco sotto forma di oggetto di tipo positionObject. Questo tipo consente di avere un cane da guardia per ogni posizione.

Mostra una posizione

Quando viene ricevuta una posizione (slot onPositionReceived() attivata), la posizione viene trasmessa a Qml che a sua volta invia le informazioni alla libreria JavaScript [https://openlayers.org/]. Il modulo Qt WebEngine consente di creare il ponte tra la tecnologia web della biblioteca e Qml. Ogni posizione è rappresentata da uno strato aggiunto alla mappa.