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
Klik tombol berbagi lokasi untuk berbagi lokasi dengan anggota percakapan C.
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:
Mengirim posisi seseorang
Menerima posisi
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 sendiriPada 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/).