Platsdelning på QT-klient

Hur ska vi använda den?

Trivial användning

I en konversation kan användaren klicka på platsikonen för att visa en karta. Om Location Services är aktiverad på enheten visas användarens position på kartan, tillsammans med platserna för alla andra medlemmar som delar sin plats (från alla samtal i det valda kontot). Användaren kan växla platsdelning på och av genom att klicka på platsdelning knapparna. Som standard delas användarens plats i 15 minuter, men denna inställning kan ändras i appens inställningar.

När en användare delar sin plats i ett samtal visas en röd platsikona på konversationsikonen. Om användaren får en plats från en annan medlem visas en orange platsikona på alla samtal där medlemmen är närvarande.

Användaren kan interagera med kartan genom att nyskärpa, zooma in och ut, flytta den och stänga den. Kartan kan också vara fäst eller avstängd. När kartan är avstängd, kan den återstängas om användaren är i rätt konto. Denna funktion gör det möjligt för användaren att hålla kartan synlig medan han fortsätter att använda Jami.

Avancerad användning

Mängddelning

Scenario

Användaren delar redan plats med samtal A och samtal B.

Funktion

Om användaren byter till konversation C är kartan fortfarande synlig och användaren har två alternativ

  1. Klicka på länken ”Deliga plats” för att dela plats med medlemmarna i samtalet C.

  2. Klicka på slutknappen för platsdelning. Detta kommer att ge upp en popup som gör det möjligt för användaren att antingen stänga av platsdelning helt eller bara sluta dela sin plats med medlemmarna i samtalet C.

Fönster med pin

Om fönstret är avstängt kommer användaren inte att kunna klicka på platsdelningsknappen eftersom fönstret inte längre är anslutet till ett samtal. För att börja dela plats med nya personer måste användaren återstängas fönstret. Observera att avstängning av fönstret inte påverkar något pågående platsdelning. Dessutom kommer att klicka på platsdelning slutknappen medan fönstret är avstängd stoppa alla aktuella platsdelning och ingen pop-up kommer att visas för att tillåta användaren att välja en specifik samtal att sluta dela med.

Över flera konton

Varje konto har sin egen unika karta. Om användaren avspinar kartan medan han är på konto A, sedan byter han till konto B och avspinar kartan, kommer två kartor att visas.

Hur fungerar det?

Inledning

Denna funktion är indelad i tre delar:

  1. Sändande av en position

  2. Att få en tjänst

  3. Att visa en position

För att bestämma platsen används [Qt Positioning]https://doc.qt.io/qt-6/qtpositioning-index.html) API. När positionen bestäms skickas den som ett meddelande på DHT och skickas till klienten. Den mottagna positionen visas sedan med hjälp av JavaScript-biblioteket [OpenLayers]https://openlayers.org/).

Skicka en position

Så snart en karta öppnas tar Positioning klassen hand om att hämta den nuvarande positionen med hjälp av QGeoPositionInfoSource klassen i QtPositioning modulen. Positionen konverteras sedan till JSON-format och överförs till positionManager. Denna klass samordnar hela positiondelningsprocessen. Positionen delas sedan genom sendPosition() funktionen.

  • Lokalt genom den localPositionReceived-signalen så att användaren kan se sin egen position

  • På DHT till alla samtal i positionShareConvIds_ listan. Denna lista innehåller nycklarna till alla samtal som användaren vill dela sin position med.

Den här typen av positioner är:

  • Typ (position eller stopp meddelande)

  • Breddgraden

  • Längd

  • Tid (som inte används av QtClient)

Ett exempel på data: {\"lat\":45.51616583988481,\"lång\":-73.620693,\"tid\":1671658862000,\"typ\":\"Position\"}

När positionen skickas till demonen, skickas också författarens URI.

När användaren slutar dela sin position med ett samtal tas samtalens ID helt enkelt bort från listan positionShareConvIds_. Ett ”stop” meddelande skickas också till varje deltagare.

Att få en tjänst

När en position mottas utlöser den ”onPositionReceived() ”-flatformen. Oavsett om det är en lokal position från QtPositioning-modulen eller en position från en annan kontakt.

  • Läggs till (URI finns inte i förteckningen)

  • Uppdaterad (URI finns redan i listan)

  • Avslutad (typ = ”Stop”)

Positionen lagras i listan i form av ett objekt av typen positionObject. Denna typ tillåter en vakthund för varje position. Om positionen inte uppdateras inom en viss tidsperiod, tas den bort från listan.

Att visa en position

När en position mottas (slot onPositionReceived() utlösas), överförs positionen till Qml som i sin tur skickar informationen till [OpenLayers]https://openlayers.org/) JavaScript-biblioteket.