Локација Сподељање на КТ клијенту

Како га користити?

Традиционална употреба

U razgovoru, korisnik može da klikne na ikonu lokacije da bi prikazao mapu. Ako su na uređaju omogućene Usluge lokacije, pozicija korisnika će biti prikazana na mapi, zajedno sa lokacijama svih ostalih članova koji dele svoju lokaciju (iz svih razgovora izabranog naloga). Korisnik može uključiti i isključiti deljenje lokacije klikom na dugmad za deljenje lokacije. Podrazumevano, lokacija korisnika se deli 15 minuta, ali ovo podešavanje može da se promeni u podešavanjima aplikacije.

Када корисник дели своју локацију у разговору, на икони разговора ће се појавити црвена икона локације. Ако корисник прими локацију од другог члана, на свим разговорима у којима је члан присутан ће се појавити оранџелна икона локације.

Корисник може да сарађује са мапом тако што је недавњива, свежи и излази, креће га и затвара га. Мапа се такође може припинити или одпинити. Када се мапа одпини, она се може поново припинити ако је корисник у праву рачуну. Ова функција омогућава кориснику да тражи визуелну мапу док настави да користи Џами.

Напредна употреба

Многоподеливање

сценарио

Корисник већ дели локацију са разговором А и разговором Б.

Особа

Ако корисник пређе на разговор Ц, мапа је још увијек видљива и корисник има две опције

  1. Кликните на дугме за дељење локације да бисте такође делили локацију са члановима разговора Ц.

  2. Кликните на крајну дугму за дељење локације. Ово ће изазвати поп-ап који омогућава кориснику да потпуно искључи дељење локације или само престане да дели своју локацију са члановима разговора Ц.

Уплетени прозор

Ако је окно искључено, корисник неће моћи да кликне на дугме за дељење локације јер окно више није повезано са разговором. Да би почео да дели локацију са новим људима, корисник мора поново да пепине окно.

Многе рачуне

Сваки рачун има своју јединствену мапу. Ако корисник одпине мапу док је на рачун А, затим се прелази на рачун Б и одпине мапу, две мапе ће бити видљиве.

Како то ради?

Увод

Ова карактеристика је подељена на три дела:

  1. Slanje svoje pozicije

  2. Пријем положаја

  3. Показање позиције

Да би се утврдила локација, користи се [Qt позиционирање]https://doc.qt.io/qt-6/qtpositioning-index.html) API. Када се одреди позиција, она се šalје као порука на DHT и преноси се клијенту. Прихваћена позиција се затим приказује користећи библиотеку JavaScript-а [OpenLayers]https://openlayers.org/).

Slanje pozicije

Када се карта отвори, класа Позиционирање се брине о повлачењу терену позицију користећи QGeoPositionInfoSource класу модула QtPositioning. Позиција се затим претвара у JSON формат и преноси се на позиционира Менеџер. Ова класа координише цео процес дељења позиције. Позиција се затим дели кроз функцију sendPosition().

  • Локално преко локалногПозицијаПостигнутог сигнала тако да корисник може да види своју позицију

  • На DHT-у на свим разговорима у листи позицијаShareConvIds_. Ова листа садржи кључеве свих разговора са којима корисник жели да подели своју позицију.

Формат JSON позиције је следећи:

  • Тип (позиција или прекид поруке)

  • Ширина

  • Дужина

  • Време (не користи КТКлиент)

Пример података: {\"лат\":45.51616583988481,\"дужина\":-73.620693,\"времена\":1671658862000,\"тип\":\"Позиција\"}

Када се позиција испрати демону, преноси се и УРИ аутора.

Када корисник престане да дели своју позицију са разговором, идентификатор разговора је једноставно уклоњен са листе positionShareConvIds_.

Пријем положаја

Када се позиција прими, покреће слот „onPositionReceived() „. Било да је локална позиција из модула QtPositioning или позиција из другог контакта. На нивоу positionManager, objectListSharingUris_ листа чува све позиције клијента.

  • Додато (УРИ није присутан у списку)

  • Обнађена (УРИ је већ присутан у списку)

  • Izbrisano (tip = „Stop”)

Позиција се чува у списку у облику објекта типа позицијаObject. Овај тип омогућава чување за сваку позицију.

Показање позиције

Када се позиција прими (слот onPositionReceived() активира), позиција се преноси на Qml који у свој ред šalје информације у библиотеку JavaScript-а. Qt WebEngine модул омогућава мост између библиотечке веб технологије и Qml. Свака позиција представља слој додат на мапу.