feat: Adds Request user info (#1279)

* Request user info

* safe calls

* Fix: Ensure NodeInfo is sent when requesting user info

The `requestUserInfo` function now correctly sends `NodeInfo` when requesting user info by using the `
toNodeInfo()` method on `ourNodeInfo`. This ensures the recipient receives the necessary information.

* fix: remove unused parameters, use service's node db for our node entity

---------

Co-authored-by: musznik <bymucha@gmail.com>
This commit is contained in:
James Rich 2024-10-03 03:02:13 -05:00 committed by GitHub
parent 83c3b484ad
commit f944a236ac
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 37 additions and 5 deletions

View file

@ -58,10 +58,10 @@ import java.util.concurrent.TimeUnit
import javax.inject.Inject
import kotlin.math.roundToInt
/// Given a human name, strip out the first letter of the first three words and return that as the initials for
/// that user. If the original name is only one word, strip vowels from the original name and if the result is
/// 3 or more characters, use the first three characters. If not, just take the first 3 characters of the
/// original name.
// / Given a human name, strip out the first letter of the first three words and return that as the initials for
// / that user. If the original name is only one word, strip vowels from the original name and if the result is
// / 3 or more characters, use the first three characters. If not, just take the first 3 characters of the
// / original name.
fun getInitials(nameIn: String): String {
val nchars = 4
val minchars = 2
@ -411,6 +411,15 @@ class UIViewModel @Inject constructor(
}
}
fun requestUserInfo(destNum: Int) {
info("Requesting UserInfo for '$destNum'")
try {
meshService?.requestUserInfo( destNum )
} catch (ex: RemoteException) {
errormsg("Request NodeInfo error: ${ex.message}")
}
}
fun requestPosition(destNum: Int, position: Position = Position(0.0, 0.0, 0)) {
info("Requesting position for '$destNum'")
try {

View file

@ -1928,7 +1928,18 @@ class MeshService : Service(), Logging {
removeByNodenum = nodeNum
})
}
override fun requestUserInfo( destNum: Int ) = toRemoteExceptions {
if (destNum != myNodeNum) {
sendToRadio(newMeshPacketTo(destNum
).buildMeshPacket(
channel = nodeDBbyNodeNum[destNum]?.channel ?: 0
) {
portnumValue = Portnums.PortNum.NODEINFO_APP_VALUE
wantResponse = true
payload = nodeDBbyNodeNum[myNodeNum]!!.user.toByteString()
})
}
}
override fun requestPosition(destNum: Int, position: Position) = toRemoteExceptions {
sendToRadio(newMeshPacketTo(destNum).buildMeshPacket(
channel = nodeDBbyNodeNum[destNum]?.channel ?: 0,

View file

@ -85,6 +85,10 @@ class UsersFragment : ScreenFragment("Users"), Logging {
R.id.metrics -> {
navigateToMetrics(node.num)
}
R.id.request_userinfo -> {
model.requestUserInfo(node.num)
}
}
}
}