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