Местоположение Споделяне на QT клиент

Как да го използваме?

Традиционно използване

В разговор потребителят може да кликне върху икона за местоположение, за да покаже карта. Ако Локационни услуги е включена на устройството, позицията на потребителя ще бъде показана на картата, заедно с местоположението на всички други членове, които споделят местоположението си (от всички разговори на избраната сметка). Потребителят може да включи и изключи споделянето на местоположение, като кликне върху бутоните за споделяне на местоположение. По подразбиране местоположението на потребителя се споделя в продължение на 15 минути, но тази настройка може да бъде променена в настройките на приложението.

Когато потребител споделя местоположението си в разговор, на икона за разговор ще се появи червена икона за местоположение. Ако потребителят получи местоположение от друг член, на всички разговори, в които е присъстващ членът, ще се покаже оранжева икона за местоположение.

Потребителят може да взаимодейства с картата чрез прескорене, увеличаване, преместване и затваряне. Картата може да бъде прикована или отпинена. Когато карта е отписана, тя може да бъде повторина, ако потребителят е в правилната сметка. Тази функция позволява на потребителя да запази картата видима, докато продължава да използва Jami.

Продължително използване

Многоподеляне

сценарий

Потребителят вече споделя местоположението с разговор А и разговор Б.

Оригинално

Ако потребителят премине към разговор C, картата е все още видима и потребителят има две опции

  1. Кликнете върху бутона за споделяне на местоположението, за да споделите местоположението с членовете на разговор C.

  2. Натиснете върху крайното бутон за споделяне на местоположение. Това ще покаже поп-ап, който позволява на потребителя да изключи споделянето на местоположение напълно или само да спре да споделя местоположението си с членовете на разговор C.

С въжена прозорка

Ако прозореца е отключена, потребителят няма да може да кликне върху бутона за споделяне на местоположение, защото прозореца вече не е свързана с разговор. За да започне да споделя местоположение с нови хора, потребителят трябва да повтори кликване на прозореца.

Многобройни сметки

Ако потребителят разпини картата, докато е на сметка А, след това премине към сметка Б и разпини картата, ще бъдат видими две карти. Картите за сметки А и Б показват позициите, съответно споделени с тези сметки и са напълно отделни един от друг

Как работи?

Введение

Тази характеристика е разделена на три части:

  1. Изпращаме позицията си.

  2. Приемане на позиция

  3. Изказване на позиция

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