Yer Ortaklığı Paylaşımı QT Müşteri
Nasıl kullanılır?
Ufak kullanım
Bir konuşmada, kullanıcı bir haritayı görüntülemek için konum simgesine tıklayabilir. Cihazda Location Services
etkinleştirildiyse, kullanıcı konumları haritada, konumlarını paylaşan diğer tüm üyelerin yerleri ile birlikte (seçilmiş hesabın tüm sohbetlerinden) gösterilmektedir. Kullanıcı konum paylaşım düğmelerini tıklayarak konum paylaşımı açıp kapatır. Öntanımlı olarak, kullanıcı konum 15 dakika boyunca paylaşılan, ancak bu ayar uygulamanın ayarlarında değiştirilebilir.
Bir kullanıcı bir konuşmada konumunu paylaşırken, konuşma simgesinde kırmızı bir konum simgesi görünür. Kullanıcı başka bir üyeden bir konum alırsa, üye bulunduğu tüm sohbetlerde turuncu bir konum simgesi görüntülenir.
Kullanıcı haritayı yenileştirerek, büyüterek ve dışarı çıkararak, hareket ederek ve kapatarak etkileşime girebilir. Haritayı ayrıca sabitleyerek veya sabitlemeyerek de bağlayabilir. Haritayı sabitlemeyerek kullanırken, kullanıcı doğru hesabda ise tekrar tekrar tekrar tekrar tekrar tekrar tekrar tekrar yapılabilir. Bu özellik, kullanıcıya haritayı Jami kullanmaya devam ederken görünür tutmasına olanak sağlar.
Gelişmiş kullanım
Çoklu paylaşım
senaryo
Kullanıcı zaten konuşma A ve konuşma B ile konum paylaşıyor.
Özellik
Kullanıcı C sohbetine geçirse, harita hala görünür ve kullanıcı iki seçeneğe sahiptir
Konaklama C üyeleriyle de konumu paylaşmak için konum paylaşma düğmesine tıklayın.
Bu, kullanıcıya yer paylaşımını tamamen kapatma veya sadece konumu C konuşma üyeleriyle paylaşmayı durdurma olanağı sağlayan bir pop-up gösterir.
Pencere
Pencereyi kapatmak, kullanıcı konum paylaşım düğmesine tıklayamayacaktır çünkü pencere artık bir sohbet ile bağlantılı değildir. Yeni insanlarla konum paylaşımına başlamak için kullanıcı pencereyi yeniden tıklamalıdır. Pencereyi kapatmanın herhangi bir devam eden konum paylaşımını etkilemediğine dikkat edin. Ek olarak, pencere açılmadan önce konum paylaşım son düğmesine tıklamak tüm mevcut konum paylaşımını durdurur ve kullanıcıya paylaşımı durdurmak için belirli bir sohbet seçmesine izin veren bir pop-up görünmez.
Çoklu hesaplar
Her hesap kendi benzersiz haritasına sahiptir. Kullanıcı A hesabındayken haritayı çıkarırsa, sonra B hesabına geçerek haritayı çıkarırsa, iki harita görünür. A ve B hesapları için hariteler bu hesaplarla paylaşılan konumları gösterir ve birbirinden tamamen ayrıdır
Nasıl çalışıyor? (teknik)
Giriş
Bu özellik üç bölümde ayrılmıştır:
Birinin konumunu göndermek
Receiving a position
Bir pozisyon göstermek
Yerleşimi belirlemek için, [Qt Positioning] (https://doc.qt.io/qt-6/qtpositioning-index.html) API kullanılır. Konum belirlendiğinde, DHT’ye bir mesaj olarak gönderilir ve istemciye aktarılır. Alınan konum daha sonra [OpenLayers] (https://openlayers.org/) JavaScript kütüphanesi kullanarak görüntülenir.
Bir pozisyon göndermek
Harita açıldıktan sonra Positioning
sınıfı QGeoPositionInfoSource
sınıfını kullanarak mevcut pozisyonun alınmasını sağlar.
Kullanıcı kendi konumunu görebilmesi için
localPositionReceived
sinyalinden yerel olarakDHT’de
positionShareConvIds_
listesi’ndeki tüm sohbetlere. Bu liste, kullanıcıların pozisyonlarını paylaşmak istediği tüm sohbetlerin anahtarlarını içerir. Bu anahtardan tüm katılımcıların URI’leri elde edilir ve her katılımcıya bir pozisyon mesajı gönderilir.
Bir pozisyonun JSON biçimi aşağıdaki gibidir:
Tip ( pozisyon veya durdurma mesajı)
Latitür
Uzunluk
Zaman (QtClient tarafından kullanılmamış)
Verilerin bir örneği: {\"lat\":45.51616583988481,\"long\":-73.620693,\"time\":1671658862000,\"type\":\"Position\"}
Konumu daemon’a gönderirken, yazarın URI’si de aktarılır.
Kullanıcı konuyla paylaşmayı bıraktığında, sohbetin kimliği positionShareConvIds_
listesinden kaldırılır.
Receiving a position
Bir pozisyon alınırsa, “onPositionReceived() ” boşluğu tetiklenir. Bu QtPositioning
modülünden veya başka bir temastan gelen bir konum olsun. positionManager
düzeyinde, objectListSharingUris_
listesi müşterinin tüm pozisyonlarını kaydeder.
Eklenmiş (URI listede bulunmuyor)
Güncelleştirilmiş (URI zaten listede mevcuttur)
Silinmiş (tip = “Stop”)
Bu pozisyon listede positionObject
türü bir nesne olarak depolanır. Bu tip her pozisyon için bir gözcü köpeği oluşturmayı sağlar.
Bir pozisyon göstermek
Bir pozisyon alınırken (slot onPositionReceived()
tetiklenir), konum Qml’e aktarılır ve bu da bilgiyi JavaScript kütüphanesine gönderir. Qt WebEngine
modülü kütüphanenin web teknolojisi ile Qml arasındaki köprüyi sağlar. Her pozisyon haritaya bir katman eklenerek temsil edilir. newPosition()
işlevi yeni bir katman ekler, updatePosition()
işlevi katmanın koordinatlarını güncelleyir ve `removePosition() işlevi katmanı çıkarır.