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

  1. Konaklama C üyeleriyle de konumu paylaşmak için konum paylaşma düğmesine tıklayın.

  2. 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:

  1. Birinin konumunu göndermek

  2. Receiving a position

  3. 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 olarak

  • DHT’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.