الموقع المشترك على عميل QT
كيف تستخدمها؟
الاستخدام البسيط
في محادثة، يمكن للمستخدم النقر على رمز الموقع لعرض خريطة. إذا تم تمكين خدمات الموقع
على الجهاز، سيتم عرض موقع المستخدم على الخريطة، جنبا إلى جنب مع مواقع جميع الأعضاء الآخرين الذين يشاركون موقعهم (من جميع المحادثات من الحساب المختار). يمكن للمستخدم تغيير مشاركة الموقع وإيقافها عن طريق النقر على أزرار مشاركة الموقع. من الناحية الافتراضية، يتم مشاركة موقع المستخدم لمدة 15 دقيقة، ولكن يمكن تعديل هذا الإعداد في إعدادات التطبيق.
عندما يشارك مستخدم موقعه في محادثة، ستظهر رمز الموقع الأحمر على رمز المحادثة. إذا تلقى المستخدم موقعًا من عضو آخر، سيتم عرض رمز الموقع البرتقالي على جميع المحادثات التي يشارك فيها عضو.
يمكن للمستخدم التفاعل مع الخريطة عن طريق إعادة التأجيل والزوم وإخراجها والتحريك منها وإغلاقها. يمكن أيضًا إضافة الخريطة أو إزالة الخريطة. عندما يتم إزالة الخريطة، يمكن إضافة الخريطة مرة أخرى إذا كان المستخدم في الحساب الصحيح. هذه الميزة تسمح للمستخدم للحفاظ على الخريطة مرئية أثناء استمرار استخدام Jami.
الاستخدام المتقدم
التشارك المتعدد
سيناريو
المستخدم يشارك بالفعل الموقع مع المحادثة A والمحادثة B.
الميزة
إذا قام المستخدم بتحويل المحادثة إلى C، فإن الخريطة لا تزال مرئية، ويكون لدى المستخدم خيارين
انقر على زر مشاركة الموقع لتشارك الموقع مع أعضاء المحادثة C
انقر على زر نهاية مشاركة الموقع. هذا سيظهر في نافذة تظهر تسمح للمستخدم إما بإيقاف مشاركة الموقع بالكامل أو فقط وقف مشاركة موقعهم مع أعضاء المحادثة C.
نافذة مدمجة
إذا تم إلغاء إرسال النوافذ، لن يتمكن المستخدم من النقر على زر مشاركة الموقع لأن النافذة لم تعد متصلة بمحادثة. لبدء مشاركة الموقع مع أشخاص جدد، يجب على المستخدم إعادة إرسال النوافذ. لاحظ أن إلغاء إرسال النوافذ لا يؤثر على أي مشاركة الموقع المستمرة. بالإضافة إلى ذلك، فإن النقر على زر نهاية مشاركة الموقع أثناء إرسال النوافذ سيتوقف عن جميع مشاركة الموقع الحالية ولا يظهر أي تشجيع يسمح للمستخدم باختيار محادثة محددة لوقف مشاركة الموقع.
حسابات متعددة
كل حساب له خريطة فريدة من نوعها. إذا قام المستخدم بفتح الخريطة أثناء وجوده في الحساب A ، ثم تحول إلى الحساب B وفتح الخريطة ، ستظهر خريطتان. ستظهر خريطات الحسابات A و B المواقع المشتركة مع تلك الحسابات ، على التوالي ، و منفصلة تمامًا عن بعضها البعض
كيف يعمل؟
مقدمة
هذه الميزة مقسمة إلى ثلاثة أجزاء:
إرسال موقف واحد
الحصول على وظيفة
إظهار موقف
لتحديد الموقع، يستخدم [Qt Positioning]https://doc.qt.io/qt-6/qtpositioning-index.html) API. بمجرد تحديد الموقع، يتم إرساله كرسالة على DHT ونُقل إلى العميل. يتم بعد ذلك عرض الموقع المُتلقى باستخدام مكتبة JavaScript [OpenLayers]https://openlayers.org/).
إرسال موقف
بمجرد فتح خريطة ، يقوم فئة Positioning
بالتحديد من الموقف الحالي باستخدام فئة QGeoPositionInfoSource
من وحدة QtPositioning
. يتم تحويل الموقف إلى شكل JSON ثم يتم نقله إلى positionManager
. تقوم هذه الفئة بتنسيق عملية مشاركة المواقع بأكملها. يتم مشاركة الموقف بعد ذلك من خلال وظيفة sendPosition()
. يتم مشاركته:
محلياً من خلال إشارة
localPositionReceived
بحيث يمكن للمستخدم رؤية موقعهم الخاصعلى DHT إلى جميع المحادثات في قائمة
positionShareConvIds_
. تحتوي هذه القائمة على مفاتيح جميع المحادثات التي يرغب المستخدم في مشاركة موقفهم بها. من هذه المفاتيح، يتم الحصول على URI لجميع المشاركين وترسل رسالة موقف لكل مشارك.
تنسيق JSON للموقف هو كما يلي:
النوع (رسالة وضع أو توقف)
العرض
الطول
الوقت (غير مستخدم من قبل QtClient)
مثال على البيانات: {\"لات\":45.51616583988481\"طويل\":-73.620693\"وقت\":1671658862000,\"نوع\":\"موقف\"}
عند إرسال الموقف إلى الديمون، يتم إرسال URI من المؤلف أيضا.
عندما يتوقف المستخدم عن مشاركة موقعه مع محادثة، يتم إزالة هوية المحادثة ببساطة من قائمة positionShareConvIds_
. يتم إرسال رسالة "وقف" أيضًا لكل مشارك.
الحصول على وظيفة
عندما يتم تلقي موقف، فإنه يؤدي إلى فتحة "onPositionReceived() " سواء كان ذلك موقف محلي من وحدة QtPositioning
أو موقف من جهة اتصال أخرى. على مستوى positionManager
، تخزين قائمة objectListSharingUris_
جميع موقف العميل. الموقف إما:
إضافة (المركز الدولي لم يظهر في القائمة)
تحديث (تظهر بالفعل URI في القائمة)
تم حذف (نوع = "وقف")
يتم تخزين الموقف في القائمة على شكل كائن من نوع positionObject
. يسمح هذا النوع بتحديد كلب مراقب لكل موقف. إذا لم يتم تحديث الموقف في إطار زمني معين، يتم إزالته من القائمة.
إظهار موقف
عندما يتم تلقي موقع (حفرة onPositionReceived()
) ، يتم نقل الموقف إلى Qml والذي يرسل المعلومات بدوره إلى مكتبة [OpenLayers]https://openlayers.org/) JavaScript. يتيح وحدات Qt WebEngine
بناء الجسر بين تكنولوجيا الويب للمكتبة و Qml. يتم تمثيل كل موقع بواسطة طبقة إضافية إلى الخريطة. يضيف وظيفة newPosition()
طبقة جديدة، ويقوم وظيفة updatePosition()
بتحديث إحداثيات الطبقة، ويقومة removePosition()
إزالة الطبقة.