feat: add ActionMenu option to mute contacts (#1003)

This commit is contained in:
Andre K 2024-04-28 16:18:16 -03:00 committed by GitHub
parent b409c17fe8
commit ecaf35d7f3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 626 additions and 25 deletions

View file

@ -12,6 +12,7 @@ import com.geeksville.mesh.database.dao.PacketDao
import com.geeksville.mesh.database.dao.MeshLogDao
import com.geeksville.mesh.database.dao.NodeInfoDao
import com.geeksville.mesh.database.dao.QuickChatActionDao
import com.geeksville.mesh.database.entity.ContactSettings
import com.geeksville.mesh.database.entity.MeshLog
import com.geeksville.mesh.database.entity.Packet
import com.geeksville.mesh.database.entity.QuickChatAction
@ -21,6 +22,7 @@ import com.geeksville.mesh.database.entity.QuickChatAction
MyNodeInfo::class,
NodeInfo::class,
Packet::class,
ContactSettings::class,
MeshLog::class,
QuickChatAction::class
],
@ -28,8 +30,9 @@ import com.geeksville.mesh.database.entity.QuickChatAction
AutoMigration (from = 3, to = 4),
AutoMigration (from = 4, to = 5),
AutoMigration (from = 5, to = 6),
AutoMigration (from = 6, to = 7),
],
version = 6,
version = 7,
exportSchema = true,
)
@TypeConverters(Converters::class)

View file

@ -3,6 +3,7 @@ package com.geeksville.mesh.database
import com.geeksville.mesh.DataPacket
import com.geeksville.mesh.MessageStatus
import com.geeksville.mesh.database.dao.PacketDao
import com.geeksville.mesh.database.entity.ContactSettings
import com.geeksville.mesh.database.entity.Packet
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
@ -65,4 +66,14 @@ class PacketRepository @Inject constructor(private val packetDaoLazy: dagger.Laz
suspend fun update(packet: Packet) = withContext(Dispatchers.IO) {
packetDao.update(packet)
}
fun getContactSettings(): Flow<Map<String, ContactSettings>> = packetDao.getContactSettings()
suspend fun getContactSettings(contact: String) = withContext(Dispatchers.IO) {
packetDao.getContactSettings(contact) ?: ContactSettings(contact)
}
suspend fun setMuteUntil(contacts: List<String>, until: Long) = withContext(Dispatchers.IO) {
packetDao.setMuteUntil(contacts, until)
}
}

View file

@ -6,8 +6,10 @@ import androidx.room.MapColumn
import androidx.room.Update
import androidx.room.Query
import androidx.room.Transaction
import androidx.room.Upsert
import com.geeksville.mesh.DataPacket
import com.geeksville.mesh.MessageStatus
import com.geeksville.mesh.database.entity.ContactSettings
import com.geeksville.mesh.database.entity.Packet
import kotlinx.coroutines.flow.Flow
@ -78,4 +80,22 @@ interface PacketDao {
val uuidList = getAllWaypoints().filter { it.data.waypoint?.id == id }.map { it.uuid }
deleteMessages(uuidList)
}
@Query("SELECT * FROM contact_settings")
fun getContactSettings(): Flow<Map<@MapColumn(columnName = "contact_key") String, ContactSettings>>
@Query("SELECT * FROM contact_settings WHERE contact_key = :contact")
suspend fun getContactSettings(contact:String): ContactSettings?
@Upsert
fun upsertContactSettings(contacts: List<ContactSettings>)
@Transaction
suspend fun setMuteUntil(contacts: List<String>, until: Long) {
val contactList = contacts.map { contact ->
getContactSettings(contact)?.copy(muteUntil = until)
?: ContactSettings(contact_key = contact, muteUntil = until)
}
upsertContactSettings(contactList)
}
}

View file

@ -12,5 +12,12 @@ data class Packet(
@ColumnInfo(name = "contact_key") val contact_key: String,
@ColumnInfo(name = "received_time") val received_time: Long,
@ColumnInfo(name = "data") val data: DataPacket
)
@Entity(tableName = "contact_settings")
data class ContactSettings(
@PrimaryKey val contact_key: String,
val muteUntil: Long = 0L,
) {
val isMuted get() = System.currentTimeMillis() <= muteUntil
}