Helymegosztás a QT-ügyfélen

Hogy használjuk?

A kis felhasználás

A beszélgetés során a felhasználó a helyszíntárgyaló ikonra kattintva megjeleníti a térképet. Ha a készülékben a Location Services engedélyezett, a felhasználó helyzetét a térképen megmutatják, valamint a helyüket megosztó összes többi tag helyét (a kiválasztott fiók összes beszélgetéséből). A felhasználó a helyszínmegosztás bekapcsolásával és kikapcsolásával kapcsolhatja a helyszínmegosztás gombokat.

Ha egy felhasználó megosztja a helyét egy beszélgetésben, a beszélgetés ikonjára egy piros hely ikonja jelenik meg. Ha a felhasználó egy másik tagtól egy helyet kap, egy narancssárga hely ikonja megjelenik minden olyan beszélgetésben, amelyben a tag jelen van.

A felhasználó a térképen kapcsolatba léphet a frissítés, a zoom, a mozgás és a bezárás révén. A térképet rögzíteni vagy lecsapni is lehet. Amikor a térképet lecsapják, akkor újra rögzíteni lehet, ha a felhasználó a megfelelő fiókban van. Ez a funkció lehetővé teszi a felhasználó számára, hogy a térképet láthatónak tartsa, miközben továbbra is Jami-t használja.

Fejlesztett felhasználás

Több részesedés

Szénárium

A felhasználó már megosztja a helyszínt az A és a B beszélgetésekkel.

Figyelem

Ha a felhasználó C-re vált, a térkép még mindig látható, és a felhasználónak két lehetőség van.

  1. Kattintson a helyszínmegosztási gombra, hogy megosztsa a C beszélgetés tagjai is a helyszínt.

  2. Kattintson a helymegosztási vég gombra. Ez egy felbukkanó megjelenik, amely lehetővé teszi a felhasználó számára, hogy vagy teljesen letiltsa a helymegosztást, vagy csak abbahagyná a C beszélgetés tagjaihoz való helymegosztást.

A csuklót

Ha a névlap nem áll, a felhasználó nem képes kattintani a helymegosztó gombot, mert a névlap már nem kapcsolódik a beszélgetéshez. Az új emberekkel való megosztás megkezdéséhez a felhasználónak újra kell állítania a névlapot.

Több számla

Minden számlának saját egyedi térképe van. Ha a felhasználó a A számlán lévőken kinyitom a térképet, majd átáll a B számlára és kinyitom a térképet, két térképet láthatunk. A A és a B számlákat tartalmazó térképe a számlákkal megosztott pozíciókat mutatja, és teljesen elkülönül egymástól

Hogyan működik (műszaki)

Bevezetés

Ezt a jellemzőt három részre osztjuk:

  1. Küldöm a pozíciómat.

  2. A pozíció megszerzése

  3. A pozíció megjelenítése

A helyszín meghatározásához [Qt Positioning] (https://doc.qt.io/qt-6/qtpositioning-index.html) API-t használnak.

Posíció küldése

Amint megnyitják a térképet, a Positioning osztály gondoskodik a jelenlegi pozíció felhozataláról a QGeoPositionInfoSource osztály segítségével a QtPositioning modul. A pozíciót majd JSON formátumra alakítják és továbbítják a positionManagerhez. Ez a osztály koordinálja az egész pozíciómegosztási folyamatot.

  • A helyi lokálisPositionReceived jeleteken keresztül, hogy a felhasználó lássa saját helyzetét

  • A DHT-en az positionShareConvIds_ listában található összes beszélgetéshez. Ez a lista tartalmazza a felhasználó által megosztott helyzethez kapcsolódó összes beszélgetés kulcsait. Ebből a kulcsból minden résztvevő URI-jét kapják meg, és egy pozíció üzenetet küld minden résztvevőnek.

A pozíció JSON formája a következő:

  • Tipp (állási vagy állási üzenet)

  • Szélesség

  • Hossza

  • Idő (a QtClient által nem használt)

Az adatok példája: {\"lat\":45.51616583988481,\"hosszú\":-73.620693,\"idő\":1671658862000,\"típus\":\"Pozíció\"}

A helyzet elküldése a rendszerfolyamatnak az szerző URI-jét is továbbítja.

Amikor a felhasználó nem osztja meg álláspontját egy beszélgetés során, a beszélgetés azonosítóját egyszerűen eltávolítják a positionShareConvIds_ listáról.

A pozíció megszerzése

Ha egy pozíció érkezik, a „onPositionReceived() ” szállat indult. Akár a QtPositioning modulból származó helyi pozíció, akár egy másik kapcsolatból származó pozíció.

  • Beadott (az URI nem szerepel a listában)

  • Frissített (a URI már jelen van a listán)

  • Törölt (típus = „Stop”)

A pozíció az positionObject típusú objektum formájában tárolódik a listán. Ez a típus lehetővé teszi, hogy minden pozícióra vigyázzanak.

A pozíció megjelenítése

Amikor egy pozíciót kapunk (slot onPositionReceived() ) indított), a pozíciót továbbítjuk a Qml-hez, amely a [OpenLayers] (https://openlayers.org/) JavaScript könyvtárába küld az információkat. A Qt WebEngine modul lehetővé teszi a könyvtár webtechnológiája és a Qml közötti híd létrehozását. Minden pozíciót egy réteg adja a térképen.