Местоположение Споделяне на QT клиент
Как да го използваме?
Традиционно използване
В разговор потребителят може да кликне върху икона за местоположение, за да покаже карта. Ако Локационни услуги  е включена на устройството, позицията на потребителя ще бъде показана на картата, заедно с местоположението на всички други членове, които споделят местоположението си (от всички разговори на избраната сметка). Потребителят може да включи и изключи споделянето на местоположение, като кликне върху бутоните за споделяне на местоположение. По подразбиране местоположението на потребителя се споделя в продължение на 15 минути, но тази настройка може да бъде променена в настройките на приложението.
Когато потребител споделя местоположението си в разговор, на икона за разговор ще се появи червена икона за местоположение. Ако потребителят получи местоположение от друг член, на всички разговори, в които е присъстващ членът, ще се покаже оранжева икона за местоположение.
Потребителят може да взаимодейства с картата чрез прескорене, увеличаване, преместване и затваряне. Картата може да бъде прикована или отпинена. Когато карта е отписана, тя може да бъде повторина, ако потребителят е в правилната сметка. Тази функция позволява на потребителя да запази картата видима, докато продължава да използва Jami.
Продължително използване
Многоподеляне
сценарий
Потребителят вече споделя местоположението с разговор А и разговор Б.
Оригинално
Ако потребителят премине към разговор C, картата е все още видима и потребителят има две опции
- Кликнете върху бутона за споделяне на местоположението, за да споделите местоположението с членовете на разговор C. 
- Натиснете върху крайното бутон за споделяне на местоположение. Това ще покаже поп-ап, който позволява на потребителя да изключи споделянето на местоположение напълно или само да спре да споделя местоположението си с членовете на разговор C. 
С въжена прозорка
Ако прозореца е отключена, потребителят няма да може да кликне върху бутона за споделяне на местоположение, защото прозореца вече не е свързана с разговор. За да започне да споделя местоположение с нови хора, потребителят трябва да повтори кликване на прозореца.
Многобройни сметки
Ако потребителят разпини картата, докато е на сметка А, след това премине към сметка Б и разпини картата, ще бъдат видими две карти. Картите за сметки А и Б показват позициите, съответно споделени с тези сметки и са напълно отделни един от друг
Как работи?
Введение
Тази характеристика е разделена на три части:
- Изпращаме позицията си. 
- Приемане на позиция 
- Изказване на позиция 
За да се определи местоположението, се използва API [Qt Positioning]https://doc.qt.io/qt-6/qtpositioning-index.html). След като се определи позицията, тя се изпраща като съобщение на DHT и се предава на клиента. Получената позиция се показва с помощта на библиотеката JavaScript [OpenLayers]https://openlayers.org/).
Изпращане на позиция
Веднага след като се отвори карта, класът Positioning се грижи за извличането на текущата позиция с помощта на QGeoPositionInfoSource класа на модула QtPositioning. Позицията след това се преобразува в JSON формат и се предава на positionManager. Този клас координира целия процес на споделяне на позиции. Позицията след това се споделя чрез функцията sendPosition().
- Локално чрез сигнала - localPositionReceived, така че потребителят да може да види собствената си позиция
- В DHT се съдържат ключовете на всички разговори, с които потребителят иска да споделя позицията си. От този ключ се получават URI на всички участници и се изпраща съобщение за позицията на всеки участник. 
Форматът JSON на позиция е следният:
- Тип (позиция или съобщение за спиране) 
- Широта 
- Дължина 
- Времето (не използвано от КТКлиента) 
Пример от данни: {\"лат\":45.51616583988481,\"дълъг\":-73.620693,\"време\":1671658862000,\"тип\":\"Позиция\"}
Когато изпращате позицията на демона, се предава и URI на автора.
Когато потребителят спре да споделя позицията си с разговор, идентификаторът на разговора просто се премахва от списъка positionShareConvIds_.
Приемане на позиция
Когато позиция е получена, тя задейства слота „onPositionReceived() „. Независимо дали става дума за локална позиция от модула QtPositioning или позиция от друг контакт. На ниво positionManager списъкът objectListSharingUris_ съхранява всички позиции на клиента.
- Добавен (УРИ не е в списъка) 
- Актуализиран (УРИ вече е в списъка) 
- Изтрити (тип = „Стоп“) 
Позицията се съхранява в списъка под формата на обект от типа positionObject. Този тип позволява да се създаде наблюдател за всяка позиция.
Изказване на позиция
Когато позиция е получена (slot onPositionReceived()  активирана), позицията се предава на Qml, който от своя страна изпраща информацията до библиотеката [OpenLayers]https://openlayers.org/) JavaScript. Модулът Qt WebEngine позволява мост между уеб технологията на библиотеката и Qml. Всяка позиция се представя с слой, добавен към картата. Функцията newPosition()  добави нов слой, функцията updatePosition()  актуализира координатите на слоя, а функцията removePosition()  премахва слоя.