Standort Teilen auf QT-Kunden

Wie soll ich es benutzen?

Kleine Verwendung

Wenn Location Services auf dem Gerät aktiviert ist, wird die Position des Benutzers auf der Karte angezeigt, zusammen mit den Standorten aller anderen Mitglieder, die ihren Standort teilen (von allen Gesprächen des ausgewählten Kontos). Der Benutzer kann den Standort-Teilen ein- und ausschalten, indem er auf die Standort-Teilungs-Taste klickt. Standardmäßig wird der Standort des Benutzers für 15 Minuten geteilt, aber diese Einstellung kann in den Einstellungen der App geändert werden.

Wenn ein Benutzer seinen Standort in einer Konversation teilt, erscheint ein rotes Standort-Icon auf dem Konversations-Icon. Wenn der Benutzer einen Standort von einem anderen Mitglied erhält, wird auf allen Gesprächen, in denen das Mitglied anwesend ist, ein orangefarbener Standort-Icon angezeigt.

Der Benutzer kann mit der Karte interagieren, indem er sie neuerdings, zoomend, bewegt und schließt. Die Karte kann auch festgeschnallt oder unpinned werden. Wenn die Karte unpinned ist, kann sie wieder geschnallt werden, wenn der Benutzer sich im richtigen Konto befindet. Diese Funktion ermöglicht es dem Benutzer, die Karte sichtbar zu halten, während er Jami weiterhin verwendet.

Fortgeschrittene Verwendung

Mehrfachverteilung

Szenario

Der Benutzer teilt bereits den Standort mit Gespräch A und Gespräch B.

Eigenschaft

Wenn der Benutzer auf Konversation C wechselt, ist die Karte immer noch sichtbar und der Benutzer hat zwei Optionen

  1. Klicken Sie auf die Ort-Teil-Taste, um auch den Ort mit den Mitgliedern des Gesprächs C zu teilen.

  2. Klicken Sie auf die Endknopf für die Ortteilungsfunktion. Hierbei wird ein Popup angezeigt, mit dem der Benutzer entweder die Standortteilungsfunktion ausschalten oder nur die Standortteilungsfunktion mit den Mitgliedern des Gesprächs C einstellen kann.

Verpflanztes Fenster

Wenn das Fenster nicht eingeschaltet ist, kann der Benutzer nicht auf den Standort-Teilknopf klicken, da das Fenster nicht mehr mit einer Konversation verbunden ist. Um mit neuen Personen zu beginnen, muss der Benutzer das Fenster erneut anschalten. Beachten Sie, dass das Entfernen des Fensters keinen laufenden Standort-Teil beeinflusst. Zusätzlich klicken Sie auf den Standort-Teilknopf, während das Fenster nicht eingeschaltet ist, wird alle aktuelle Standort-Teilungen gestoppt und kein Popup erscheinen, mit dem der Benutzer eine bestimmte Konversation auswählen kann, um das Teilen zu beenden.

Mehrfachkonten

Jedes Konto hat seine eigene einzigartige Karte. Wenn der Benutzer die Karte während des Konto A entzieht, dann auf Konto B wechselt und die Karte entzieht, werden zwei Karten sichtbar sein. Die Karten für Konten A und B zeigen die Positionen, die mit diesen Konten geteilt werden, bzw. sind völlig voneinander getrennt

Wie funktioniert das?

Einführung

Diese Eigenschaft ist in drei Teile unterteilt:

  1. Senden Sie Ihre Position

  2. Ein Positionsantrag

  3. Anzeige einer Position

Zur Bestimmung des Standorts wird [Qt Positioning] (https://doc.qt.io/qt-6/qtpositioning-index.html) API verwendet. Sobald die Position bestimmt ist, wird sie als Nachricht auf der DHT gesendet und an den Client übertragen. Die empfangene Position wird dann mit der JavaScript-Bibliothek [OpenLayers] (https://openlayers.org/) angezeigt.

Eine Position zu senden

Sobald eine Karte geöffnet ist, kümmert sich die Positioning-Klasse um die Abrufung der aktuellen Position mit der QGeoPositionInfoSource-Klasse des QtPositioning-Moduls. Die Position wird dann in JSON-Format umgewandelt und an den positionManager übertragen. Diese Klasse koordiniert den gesamten Positionsteilprozess. Die Position wird dann über die sendPosition() -Funktion geteilt.

  • Lokal über das localPositionReceived-Signal, damit der Benutzer seine eigene Position sehen kann

  • Auf der DHT zu allen Gesprächen in der positionShareConvIds_ Liste. Diese Liste enthält die Schlüssel für alle Gespräche, mit denen der Benutzer seine Position teilen möchte. Von dieser Schlüssel werden die URIs aller Teilnehmer ermittelt und eine Positionnachricht an jeden Teilnehmer gesendet.

Das JSON-Format einer Position ist wie folgt:

  • Typ (Positions- oder Stoppnachricht)

  • Breite

  • Längsgrenze

  • Zeit (nicht vom QtClient verwendet)

Ein Beispiel für Daten: {\"lat\":45.51616583988481,\"long\":-73.620693,\"Time\":1671658862000,\"type\":\"Position\"}

Bei der Übermittlung der Position an den Daemon wird auch die URI des Autors übertragen.

Wenn der Benutzer seine Position mit einer Konversation nicht weitergibt, wird die Konversations-ID einfach aus der positionShareConvIds_ Liste entfernt.

Ein Positionsantrag

Wenn eine Position empfangen wird, wird der Slot „onPositionReceived() “ ausgelöst. Ob es sich um eine lokale Position aus dem QtPositioning Modul oder eine Position aus einem anderen Kontakt handelt. Auf der Ebene positionManager speichert die objectListSharingUris_ Liste alle Positionen des Kunden.

  • Hinzugefügt (die URI ist nicht in der Liste enthalten)

  • Aktualisiert (die URI ist bereits in der Liste enthalten)

  • Löscht (Typ = „Stop“)

Die Position wird in der Liste in Form eines Objekts des Typs positionObject gespeichert. Dieser Typ ermöglicht eine Überwachung für jede Position.

Anzeige einer Position

Wenn eine Position empfangen wird (Slot onPositionReceived() ausgelöst), wird die Position an Qml übertragen, die wiederum die Informationen an die [OpenLayers] (https://openlayers.org/) JavaScript-Bibliothek sendet. Das Qt WebEngine Modul ermöglicht die Verbindung zwischen der Webtechnologie der Bibliothek und Qml. Jede Position wird durch eine Schicht auf der Karte hinzugefügt. Die newPosition() Funktion fügt eine neue Schicht hinzu, die updatePosition() Funktion aktualisiert die Koordinaten der Schicht und die removePosition() Funktion entfernt die Schicht.