Koha jagamine QT kliendil

Kuidas seda kasutada?

Väikesed kasutused

Kõneluses saab kasutaja panna paika asukoha ikonile, et näidata kaarti. Kui Location Services on seadmes aktiivne, näitab kasutaja asukoht kaardi, koos kõigi teiste liikmete asukohaga, kes jagavad oma asukoha (kõigist valitud kontotest). Kasutaja saab asukoha jagamist sisse ja välja lülitada, klippides asukoha jagamise nuppe.

Kui kasutaja jagab oma asukoha vestluses, ilmub vestlusikonil punane asukoha ikona. Kui kasutaja saab asukoha teise liikme poolt, ilmub kõikidel vestlustel, kus liikme on kohal, oranžne asukoha ikona.

Kasutaja saab kaardiga suhtleda, tehes uusimist, suurendades sisse ja välja, liigutades ja sulgedes. Kaardi saab ka kinnitada või lahti kinnitada. Kui kaardi on lahti kinnitatud, saab seda uuesti kinnitada, kui kasutaja on õiges kontos. See funktsioon võimaldab kasutajal hoida kaarti nähtavaks, jätkama Jami kasutamist.

Arenenud kasutamine

Mitme jagamine

Scenario

Kasutaja jagab juba asukohta vestlus A ja vestlus B.

Eesmärk

Kui kasutaja läheb vestlus C, kaart on endiselt nähtav ja kasutajal on kaks valikut

  1. Pange paari, et jagada ka asukohta C vestlusliikmetega.

  2. Pange paari nuppu paari, mis võimaldab kasutajal kas täielikult kustutada asukoha jagamist või lõpetada vaid oma asukoha jagamine vestlus C liikmetega.

Pinnitud aken

Kui akend on lahti kinnitatud, ei saa kasutaja klõpsata asukoha jagamise nuppu, sest akend ei ole enam ühendatud vestlusele. Selleks et alustada asukoha jagamist uute inimestega, peab kasutaja akend uuesti kinnitama.

Mitmed kontod

Iga konto on oma unikaalne kaart. Kui kasutaja eemaldab kaardi A konto ajal, siis vahetab konto B ja eemaldab kaardi, on kaks kaarti nähtav.

Kuidas see toimib?

Sisend

See funktsioon on jagatud kolmele osale:

  1. Saada oma asukoht

  2. Töökoha saamine

  3. Positsiooni näitus

Asukohta kindlaksmääramiseks kasutatakse [Qt Positsioon]https://doc.qt.io/qt-6/qtpositioning-index.html) API. Kui asukoht on kindlaks määratud, saadetakse see DHT-i sõnumiina ja edastatakse kliendile.

Positsiooni saatmine

Kui kaard avatakse, hoolitseb Positioning klass praeguse positsiooni taastamisest, kasutades QGeoPositionInfoSource klassi QtPositioning mooduli. Positsioon muundatakse JSON-formaadile ja edastatakse positionManagerle. See klass koordineerib kogu positsiooni jagamise protsessi. Positsioon jagatakse siis sendPosition() funktsiooni kaudu.

  • Kohalik localPositionReceived signaali kaudu, et kasutaja saaks näha oma positsiooni

  • DHT-i all on kõik vestlused positionShareConvIds_ nimekirjas. See nimekiri sisaldab kõigi vestluste võtmeid, millega kasutaja soovib oma positsiooni jagada.

Positsiooni JSON-formaat on järgmine:

  • Tüüp (positsiooni või peatamise sõnum)

  • Laius

  • Pikkus

  • Aeg (QtClient ei kasuta)

Näiteks: {\"lat\":45.516583988481,\"lõnge\":-73.620693,\"ajal\":1671658862000,\"tiip\":\"Positsioon\"}

Kui saadetakse positsioon deemonile, edastatakse autori URI.

Kui kasutaja lõpetab oma positsiooni jagamise vestluse käigus, eemaldatakse vestluse ID lihtsalt positionShareConvIds_ nimekirjast.

Töökoha saamine

Kui positsioon saab, aktiveeritakse „onPositionReceived() “ ruudus. Kas see on kohalik positsioon QtPositioning moodulis või positsioon teisest kontaktis.

  • Lisatud (URI ei ole loetelus)

  • Päevastik (URI on juba nimekirjas)

  • Võtmine (type = „Stop“)

Seaduses säilitatakse positsioon positionObject tüüpi objekti kujul.

Positsiooni näitus

Kui positsioon saab (slot onPositionReceived() aktiveeritud), edastatakse positsioon Qml’le, mis omakorda saadab teabe [OpenLayers]https://openlayers.org/) JavaScript- raamatukogule. Qt WebEngine moodul võimaldab sildida raamatukogu veebitehnoloogia ja Qml vahel. Iga positsiooni esindab kaardile lisatud kihts. newPosition() funktsioon lisab uut kihts, updatePosition() funktsioon uuendab kihts koordinaate ja removePosition() funktsioon eemaldab kihts.