Lokasi Berbagi pada QT Client

Bagaimana cara menggunakannya?

Penggunaan yang tidak penting

Dalam percakapan, pengguna dapat mengklik ikon lokasi untuk menampilkan peta. Jika Location Services diaktifkan pada perangkat, posisi pengguna akan ditampilkan di peta, bersama dengan lokasi semua anggota lain yang berbagi lokasi mereka (dari semua percakapan akun yang dipilih). Pengguna dapat mengaktifkan dan mematikan berbagi lokasi dengan mengklik tombol berbagi lokasi. Secara default, lokasi pengguna dibagikan selama 15 menit, tetapi pengaturan ini dapat dimodifikasi dalam pengaturan aplikasi.

Ketika pengguna berbagi lokasi mereka dalam percakapan, ikon lokasi merah akan muncul pada ikon percakapan. Jika pengguna menerima lokasi dari anggota lain, ikon lokasi oranye akan ditampilkan pada semua percakapan di mana anggota hadir.

Pengguna dapat berinteraksi dengan peta dengan menganyarkan, memperbesar dan keluar, memindahkannya, dan menutupnya. Peta juga dapat ditempel atau tidak ditempel. Ketika peta tidak ditempel, dapat ditempel kembali jika pengguna berada di akun yang tepat. Fitur ini memungkinkan pengguna untuk menjaga peta terlihat sambil terus menggunakan Jami.

Penggunaan lanjutan

Berbagi-bagi

skenario

Pengguna sudah berbagi lokasi dengan percakapan A dan percakapan B.

Fitur

Jika pengguna beralih ke percakapan C, peta masih terlihat dan pengguna memiliki dua pilihan

  1. Klik tombol berbagi lokasi untuk berbagi lokasi dengan anggota percakapan C.

  2. Klik tombol akhir berbagi lokasi. Ini akan menampilkan pop-up yang memungkinkan pengguna untuk mematikan berbagi lokasi sepenuhnya atau hanya berhenti berbagi lokasi mereka dengan anggota percakapan C.

Jendela yang ditempel

Jika jendela tidak dipin, pengguna tidak akan dapat mengklik tombol berbagi lokasi karena jendela tidak lagi terhubung ke percakapan. Untuk mulai berbagi lokasi dengan orang baru, pengguna harus mempin jendela kembali. Perhatikan bahwa membuka jendela tidak mempengaruhi berbagi lokasi yang sedang berlangsung. Selain itu, mengklik tombol akhir berbagi lokasi saat jendela tidak dipin akan menghentikan semua berbagi lokasi saat ini dan tidak akan muncul pop-up yang memungkinkan pengguna untuk memilih percakapan tertentu untuk berhenti berbagi dengan.

Berbagai rekening

Setiap akun memiliki peta uniknya sendiri. Jika pengguna membuka peta saat berada di akun A, kemudian beralih ke akun B dan membuka peta, dua peta akan terlihat. Peta untuk akun A dan B menampilkan posisi yang dibagi dengan akun tersebut, masing-masing, dan sepenuhnya terpisah satu sama lain

Bagaimana cara kerjanya?

Pambuka

Fitur ini dibagi menjadi tiga bagian:

  1. Mengirim posisi seseorang

  2. Menerima posisi

  3. Menampilkan posisi

Untuk menentukan lokasi, [Qt Positioning] (https://doc.qt.io/qt-6/qtpositioning-index.html) API digunakan. Setelah posisi ditentukan, itu dikirim sebagai pesan di DHT dan dikirim ke klien. Posisi yang diterima kemudian ditampilkan menggunakan perpustakaan JavaScript [OpenLayers] (https://openlayers.org/).

Mengirim posisi

Setelah sebuah peta dibuka, kelas Positioning mengurus pengambilan posisi saat ini menggunakan kelas QGeoPositionInfoSource dari modul QtPositioning. Posisi tersebut kemudian dikonversi menjadi format JSON dan dikirim ke positionManager. Kelas ini mengkoordinasikan seluruh proses berbagi posisi. Posisi tersebut kemudian dibagi melalui fungsi sendPosition() .

  • Lokal melalui sinyal localPositionReceived sehingga pengguna dapat melihat posisi mereka sendiri

  • Pada DHT untuk semua percakapan dalam daftar positionShareConvIds_. Daftar ini berisi kunci dari semua percakapan yang ingin dibagikan pengguna dengan posisi mereka. Dari kunci ini, URI semua peserta diperoleh dan pesan posisi dikirim ke setiap peserta.

Format JSON dari posisi adalah sebagai berikut:

  • Jenis (pesan posisi atau berhenti)

  • Latitud

  • Langka

  • Waktu (tidak digunakan oleh QtClient)

Contoh data: {\"lat\":45.51616583988481,\"panjang\":-73.620693,\"waktu\":1671658862000,\"tipe\":\"Posisi\"}

Saat mengirim posisi ke daemon, URI penulis juga dikirim.

Ketika pengguna berhenti berbagi posisi mereka dengan percakapan, ID percakapan hanya dihapus dari daftar positionShareConvIds_. Sebuah pesan "stop" juga dikirim ke setiap peserta.

Menerima posisi

Ketika posisi diterima, itu memicu slot 'onPositionReceived() '. Apakah itu posisi lokal dari modul QtPositioning atau posisi dari kontak lain. Pada tingkat positionManager, daftar objectListSharingUris_ menyimpan semua posisi klien. Posisi adalah:

  • Ditambahkan (URI tidak ada dalam daftar)

  • Updated (URI sudah ada dalam daftar)

  • Dihapus (tipe = "Hentikan")

Posisi disimpan dalam daftar dalam bentuk objek tipe positionObject. Jenis ini memungkinkan untuk penjaga untuk setiap posisi. Jika posisi tidak diperbarui dalam jangka waktu tertentu, itu akan dihapus dari daftar.

Menampilkan posisi

Ketika posisi diterima (slot onPositionReceived() diaktifkan), posisi dikirim ke Qml yang pada gilirannya mengirimkan informasi ke perpustakaan JavaScript [OpenLayers]https://openlayers.org/).