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
Klicka på länken ”Deliga plats” för att dela plats med medlemmarna i samtalet C.
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:
Sändande av en position
Att få en tjänst
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 positionPå 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.