Partage de localisation sur le client QT

Comment l’utiliser?

Utilisation triviale

Dans une conversation, l’utilisateur peut cliquer sur l’icône de localisation pour afficher une carte. Si Location Services est activé sur l’appareil, la position de l’utilisateur sera affichée sur la carte, ainsi que les localisations de tous les autres membres qui partagent leur localisation (de toutes les conversations du compte sélectionné). L’utilisateur peut activer et désactiver le partage de localisation en cliquant sur les boutons de partage de localisation. Par défaut, l’emplacement de l’utilisateur est partagé pendant 15 minutes, mais ce paramètre peut être modifié dans les paramètres de l’application.

Lorsqu’un utilisateur partage son emplacement dans une conversation, une icône de localisation rouge apparaît sur l’icône de conversation. Si l’utilisateur reçoit un emplacement d’un autre membre, une icône de localisation orange apparaît sur toutes les conversations dans lesquelles le membre est présent.

L’utilisateur peut interagir avec la carte en récentrisant, en zoomant, en la déplaçant et en la fermant. La carte peut également être coincée ou dépignée. Lorsque la carte est dépignée, elle peut être repignée si l’utilisateur est dans le bon compte. Cette fonctionnalité permet à l’utilisateur de garder la carte visible tout en continuant à utiliser Jami.

Utilisation avancée

Partage multi-partition

scénario

L’utilisateur partage déjà l’emplacement avec la conversation A et la conversation B.

Caractéristiques

Si l’utilisateur passe à la conversation C, la carte est toujours visible et l’utilisateur a deux options

  1. Cliquez sur le bouton partage de localisation pour partager également l’emplacement avec les membres de la conversation C.

  2. Cliquez sur le bouton de fin partage de localisation. Cela fera apparaître une fenêtre contextuelle qui permet à l’utilisateur de désactiver complètement le partage de localisation ou de ne partager son emplacement qu’avec les membres de la conversation C.

Vitrine en pinceau

Si la fenêtre est dépinte, l’utilisateur ne pourra pas cliquer sur le bouton de partage de localisation car la fenêtre n’est plus connectée à une conversation. Pour commencer à partager l’emplacement avec de nouvelles personnes, l’utilisateur doit re-pinser la fenêtre. Notez que le dépôt de la fenêtre n’affecte pas le partage de localisation en cours. En outre, en cliquant sur le bouton de fin de partage de localisation pendant que la fenêtre est dépinte, tout partage de localisation actuel sera arrêté et aucune fenêtre contextuelle ne apparaîtra pour permettre à l’utilisateur de sélectionner une conversation spécifique avec laquelle il ne pourra plus partager.

Comptes multiples

Chaque compte a sa propre carte unique. Si l’utilisateur dépinte la carte alors qu’il est sur le compte A, puis passe au compte B et dépinte la carte, deux cartes seront visibles. Les cartes pour les comptes A et B affichent les positions partagées avec ces comptes, respectivement, et sont complètement séparées les unes des autres

Comment ça marche?

Introduction

Cette caractéristique est divisée en trois parties:

  1. Envoyer sa position

  2. Recevoir un poste

  3. Affichage d’une position

Pour déterminer l’emplacement, [Qt Positioning] (https://doc.qt.io/qt-6/qtpositioning-index.html) API est utilisé. Une fois la position déterminée, elle est envoyée comme un message sur le DHT et est transmise au client. La position reçue est ensuite affichée à l’aide de la bibliothèque JavaScript [OpenLayers] (https://openlayers.org/).

Envoi d’une position

Dès qu’une carte est ouverte, la classe Positioning prend soin de récupérer la position actuelle en utilisant la classe QGeoPositionInfoSource du module QtPositioning. La position est ensuite convertie au format JSON et est transmise au positionManager. Cette classe coordonne l’ensemble du processus de partage de position. La position est ensuite partagée via la fonction sendPosition() . Elle est partagée:

  • Localisé par le signal localPositionReceived afin que l’utilisateur puisse voir sa propre position

  • Sur le DHT, toutes les conversations dans la liste positionShareConvIds_. Cette liste contient les clés de toutes les conversations avec lesquelles l’utilisateur souhaite partager sa position.

Le format JSON d’une position est le suivant:

  • Type (message de position ou d’arrêt)

  • La latitude

  • Longitude

  • Temps (non utilisé par le QtClient)

Un exemple de données: {\"lat\":45.51616583988481,\"long\":-73.620693,\"time\":1671658862000,\"type\":\"Position\"}

Lorsque l’on envoie la position au daemon, l’URI de l’auteur est également transmis.

Lorsque l’utilisateur cesse de partager sa position avec une conversation, l’ID de la conversation est simplement supprimé de la liste positionShareConvIds_. Un message « stop » est également envoyé à chaque participant.

Recevoir un poste

Lorsqu’une position est reçue, elle déclenche la fente « onPositionReceived() « . Qu’il s’agisse d’une position locale du module QtPositioning ou d’une position d’un autre contact. Au niveau positionManager, la liste objectListSharingUris_ stocke toutes les positions du client. La position est soit:

  • Ajout (l’IRU n’est pas présent dans la liste)

  • Mise à jour (l’URI est déjà présent dans la liste)

  • Supprimé (type = « Stop »)

La position est stockée dans la liste sous la forme d’un objet de type positionObject. Ce type permet d’avoir un chien de surveillance pour chaque position. Si la position n’est pas mise à jour dans un certain laps de temps, elle est supprimée de la liste.

Affichage d’une position

Lorsqu’une position est reçue (slot onPositionReceived() déclenchée), la position est transmise à Qml qui envoie à son tour les informations à la bibliothèque JavaScript [https://openlayers.org/]. Le module Qt WebEngine permet de créer un pont entre la technologie Web de la bibliothèque et Qml. Chaque position est représentée par une couche ajoutée à la carte.