Местоположение Споделяне на 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() премахва слоя.