refactor: replace `nodeDBbyID` with `getUser()` function

pull/1243/head
andrekir 2024-09-11 20:01:16 -03:00
rodzic a6cfbcbfa7
commit 84939a74d2
5 zmienionych plików z 19 dodań i 29 usunięć

Wyświetl plik

@ -26,9 +26,6 @@ interface NodeInfoDao {
@Query("SELECT * FROM NodeInfo ORDER BY CASE WHEN num = (SELECT myNodeNum FROM MyNodeInfo LIMIT 1) THEN 0 ELSE 1 END, lastHeard DESC")
fun nodeDBbyNum(): Flow<Map<@MapColumn(columnName = "num") Int, NodeInfo>>
@Query("SELECT * FROM NodeInfo")
fun nodeDBbyID(): Flow<Map<@MapColumn(columnName = "user_id") String, NodeInfo>>
@Query(
"""
WITH OurNode AS (

Wyświetl plik

@ -36,12 +36,10 @@ class NodeDB @Inject constructor(
// A map from nodeNum to NodeInfo
private val _nodeDBbyNum = MutableStateFlow<Map<Int, NodeInfo>>(mapOf())
val nodeDBbyNum: StateFlow<Map<Int, NodeInfo>> get() = _nodeDBbyNum
val nodesByNum get() = nodeDBbyNum.value
// A map from userId to NodeInfo
private val _nodeDBbyID = MutableStateFlow<Map<String, NodeInfo>>(mapOf())
val nodeDBbyID: StateFlow<Map<String, NodeInfo>> get() = _nodeDBbyID
val nodes get() = nodeDBbyID
fun getUser(userId: String?) = userId?.let { id ->
nodeDBbyNum.value.values.find { it.user?.id == id }?.user
}
init {
nodeInfoDao.getMyNodeInfo().onEach { _myNodeInfo.value = it }
@ -53,11 +51,6 @@ class NodeDB @Inject constructor(
_ourNodeInfo.value = ourNodeInfo
_myId.value = ourNodeInfo?.user?.id
}.launchIn(processLifecycle.coroutineScope)
nodeInfoDao.nodeDBbyID().onEach {
_nodeDBbyID.value = it
}
.launchIn(processLifecycle.coroutineScope)
}
fun getNodes(

Wyświetl plik

@ -150,10 +150,11 @@ internal fun getShortDateTime(time: Long): String? {
}
}
@Suppress("LongParameterList")
@HiltViewModel
class UIViewModel @Inject constructor(
private val app: Application,
val nodeDB: NodeDB,
private val nodeDB: NodeDB,
private val radioConfigRepository: RadioConfigRepository,
private val radioInterfaceService: RadioInterfaceService,
private val meshLogRepository: MeshLogRepository,
@ -238,6 +239,14 @@ class UIViewModel @Inject constructor(
// hardware info about our local device (can be null)
val myNodeInfo: StateFlow<MyNodeInfo?> get() = nodeDB.myNodeInfo
val ourNodeInfo: StateFlow<NodeInfo?> get() = nodeDB.ourNodeInfo
val nodesByNum get() = nodeDB.nodeDBbyNum.value // FIXME only used in MapFragment
fun getUser(userId: String?) = nodeDB.getUser(userId) ?: MeshUser(
userId ?: DataPacket.ID_LOCAL,
app.getString(R.string.unknown_username),
app.getString(R.string.unknown_node_short_name),
MeshProtos.HardwareModel.UNSET,
)
private val _snackbarText = MutableLiveData<Any?>(null)
val snackbarText: LiveData<Any?> get() = _snackbarText
@ -289,13 +298,13 @@ class UIViewModel @Inject constructor(
val toBroadcast = data.to == DataPacket.ID_BROADCAST
// grab usernames from NodeInfo
val node = nodeDB.nodes.value[if (fromLocal) data.to else data.from]
val user = getUser(if (fromLocal) data.to else data.from)
val shortName = node?.user?.shortName ?: app.getString(R.string.unknown_node_short_name)
val shortName = user.shortName
val longName = if (toBroadcast) {
channelSet.getChannel(data.channel)?.name ?: app.getString(R.string.channel_name)
} else {
node?.user?.longName ?: app.getString(R.string.unknown_username)
user.longName
}
Contact(
@ -318,16 +327,10 @@ class UIViewModel @Inject constructor(
@OptIn(ExperimentalCoroutinesApi::class)
fun getMessagesFrom(contactKey: String) = packetRepository.getMessagesFrom(contactKey).mapLatest { list ->
list.map {
val defaultUser = MeshUser(
it.data.from ?: DataPacket.ID_LOCAL,
app.getString(R.string.unknown_username),
app.getString(R.string.unknown_node_short_name),
MeshProtos.HardwareModel.UNSET,
)
Message(
uuid = it.uuid,
receivedTime = it.received_time,
user = nodeDB.nodes.value[it.data.from]?.user ?: defaultUser,
user = getUser(it.data.from),
text = it.data.text.orEmpty(),
time = it.data.time,
read = it.read,

Wyświetl plik

@ -53,10 +53,7 @@ class RadioConfigRepository @Inject constructor(
fun myNodeInfoFlow(): Flow<MyNodeInfo?> = nodeDB.myNodeInfoFlow()
suspend fun getMyNodeInfo(): MyNodeInfo? = myNodeInfoFlow().firstOrNull()
val myNodeInfo: StateFlow<MyNodeInfo?> get() = nodeDB.myNodeInfo
val ourNodeInfo: StateFlow<NodeInfo?> get() = nodeDB.ourNodeInfo
val nodeDBbyNum: StateFlow<Map<Int, NodeInfo>> get() = nodeDB.nodeDBbyNum
val nodeDBbyID: StateFlow<Map<String, NodeInfo>> get() = nodeDB.nodeDBbyID
/**
* Flow representing the [NodeInfo] database.

Wyświetl plik

@ -383,7 +383,7 @@ fun MapView(
fun getUsername(id: String?) = if (id == DataPacket.ID_LOCAL) {
context.getString(R.string.you)
} else {
model.nodeDB.nodes.value[id]?.user?.longName ?: context.getString(R.string.unknown_username)
model.getUser(id).longName
}
fun MapView.onWaypointChanged(waypoints: Collection<Packet>): List<MarkerWithLabel> {
@ -467,7 +467,7 @@ fun MapView(
}
fun MapView.zoomToNodes() {
val nodeMarkers = onNodesChanged(model.nodeDB.nodesByNum.values)
val nodeMarkers = onNodesChanged(model.nodesByNum.values)
if (nodeMarkers.isNotEmpty()) {
val box = BoundingBox.fromGeoPoints(nodeMarkers.map { it.position })
val center = GeoPoint(box.centerLatitude, box.centerLongitude)