Lokigo Komuna en QT Kliento
Kiel uzi ĝin?
Trivial uzo
En konversacio, la uzanto povas alklaki la lokon ikono por montri mapon. Se Location Services
estas aktivigita sur la aparato, la pozicio de la uzanto estos montrita sur la mapo, kune kun la lokoj de ĉiuj aliaj membroj kiuj dividas sian lokon (de ĉiuj konversacioj de la elektita konto). La uzanto povas ŝanĝi lokon dividado en kaj eksteren alklaki la lokon dividado butonoj. Defaŭlte, la loko de la uzanto estas dividita dum 15 minutoj, sed ĉi tiu agordo povas esti modifita en la agordoj de la programo.
Kiam uzanto dividas sian lokon en konversacio, ruĝa loko ikono aperos sur la konversacio ikono. Se la uzanto ricevas lokon de alia membro, oranĝa loko ikono estos montrita sur ĉiuj konversacioj en kiuj la membro estas ĉeestanta.
La uzanto povas interagi kun la mapo per la aktualigo, plilarĝigo, moviĝo kaj fermo. La mapo ankaŭ povas esti fiksita aŭ malpligita. Kiam la mapo estas malpligita, ĝi povas esti re-pligita se la uzanto estas en la ĝusta konto. Tiu trajto permesas al la uzanto konservi la mapon videbla dum daŭre uzi Jami.
Avancita uzo
Multo-dividado
scenaro
La uzanto jam dividas lokon kun konversacio A kaj konversacio B.
Funkcio
Se la uzanto ŝanĝas al konversacio C, la mapo estas ankoraŭ videbla kaj la uzanto havas du eblojn
Klaku sur la butonon “Deliri lokon” por dividi lokon ankaŭ kun la membroj de konversacio C.
Alklaku la loka partumado fine butono. Tio prezentos pop-up kiu permesas al la uzanto aŭ malŝalti lokon partumado tute aŭ nur ĉesi dividi sian lokon kun la membroj de konversacio C.
Finkita fenestro
Se la fenestro estas malŝaltita, la uzanto ne povos alklaki la lokan partumadon ĉar la fenestro ne plu estas ligita al konversacio. Por komenci partumadon de loko kun novaj homoj, la uzanto devas reŝalti la fenestron. Rememoru, ke malŝalti la fenestron ne influas ajnan daŭran partumadon de loko. Krome, alklaki la lokan partumadon finbutonon dum la fenestro estas malŝaltita ĉesos ĉiujn aktualajn lokan partumadon kaj neniu ŝaltilo aperos por permesi al la uzanto elekti specifan konversacion por ĉesi dividon kun.
Multaj kontoj
Ĉiu konto havas sian propran unikan mapon. Se la uzanto malŝaltas la mapon dum sur konto A, tiam ŝanĝas al konto B kaj malŝaltas la mapon, du mapoj estos videblaj. La mapoj por kontoj A kaj B montras poziciojn dividitajn kun tiuj kontoj, respektive, kaj estas tute apartaj unu de la alia
Kiel ĝi funkcias?
Enkonduko
Tiu trajto estas dividita en tri partojn:
Sendante sian pozicion
Ricevi postenon
Montrado de pozicio
Por determini la lokon, [Qt Positioning] (https://doc.qt.io/qt-6/qtpositioning-index.html) API estas uzita. Post kiam la pozicio estas determinita, ĝi estas sendita kiel mesaĝo sur la DHT kaj estas sendita al la kliento. La ricevita pozicio tiam estas montrita uzante la [OpenLayers] (https://openlayers.org/) JavaScript-biblioteko.
Sendo de pozicio
Tuj kiam mapo estas malfermita, la Positioning
klaso zorgas pri la reakiro de la nuna pozicio uzante la QGeoPositionInfoSource
klaso de la QtPositioning
modulo. La pozicio tiam estas konvertita al JSON-formato kaj estas transdonita al la positionManager
. Tiu klaso kunordigas la tutan pozician partumadon procezo. La pozicio tiam estas dividita tra la sendPosition()
funkcio. Ĝi estas dividita:
Loka tra la
localPositionReceived
signalo tiel ke la uzanto povas vidi sian propran pozicionEn la DHT al ĉiuj konversacioj en la
positionShareConvIds_
listo. Tiu listo enhavas la ŝlosilojn de ĉiuj konversacioj, kun kiuj la uzanto volas dividi sian pozicion. De tiu ŝlosilo, la URIoj de ĉiuj partoprenantoj estas akiritaj kaj pozicio mesaĝo estas sendita al ĉiu partoprenanto.
La JSON-formato de pozicio estas kiel sekvas:
Tipo (pozicio aŭ halto mesaĝo)
Latitudo
Longitudo
Tempo (ne uzita de la kliento)
Ekzemplo de datumoj: {\"lat\":45.51616583988481,\"long\":-73.620693,\"tempo\":1671658862000,\"tipo\":\"Pozition\"}
Kiam oni sendas la pozicion al la demono, ankaŭ la URI de la aŭtoro estas sendita.
Kiam la uzanto ĉesas dividi sian pozicion kun konversacio, la ID de la konversacio estas simple forigita de la positionShareConvIds_
listo. “haltu” mesaĝo ankaŭ estas sendita al ĉiu partoprenanto.
Ricevi postenon
Kiam pozicio estas ricevita, ĝi ekfunkciigas la “onPositionReceived() ” fendon. Ĉu ĝi estas loka pozicio de la QtPositioning
modulo aŭ pozicio de alia kontakto. Ĉe la positionManager
nivelo, la objectListSharingUris_
listo stokas ĉiujn poziciojn de la kliento. La pozicio estas aŭ:
Aldone (la URI ne estas en la listo)
Ĝisdatigita (la URI jam estas en la listo)
Forigita (tipo = “Stop”)
La pozicio estas stokita en la listo en la formo de objekto de la tipo positionObject
. Tiu tipo permesas gardadon por ĉiu pozicio. Se la pozicio ne estas ĝisdatigita ene de certa tempoframo, ĝi estas forigita de la listo.
Montrado de pozicio
Kiam pozicio estas ricevita (sloto onPositionReceived()
ekigita), la pozicio estas transdonita al Qml kiu en victurno sendas la informojn al la [OpenLayers] [https://openlayers.org/) JavaScript-biblioteko. La modulo Qt WebEngine
permesas la ponto inter la retejo de la biblioteko kaj Qml. Ĉiu pozicio estas reprezentita per tavolo aldonita al la mapo. La newPosition()
funkcio aldonas novan tavolon, la updatePosition()
funkcio ĝisdatigas la koordinatojn de la tavolo, kaj la removePosition() funkcio
distiras la tavolon.