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

  1. Klaku sur la butonon “Deliri lokon” por dividi lokon ankaŭ kun la membroj de konversacio C.

  2. 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:

  1. Sendante sian pozicion

  2. Ricevi postenon

  3. 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 pozicion

  • En 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.