mirror of
https://github.com/oxen-io/session-android.git
synced 2025-12-08 05:52:11 +00:00
Fix moderator race condition (#975)
* fix: race condition in clear all / add new members * fix: max width emoji text view on smaller devices * fix: add extra widths and reduce the original again * fix: quoted messages for blinded servers, remove unused add group member function * fix: quote sending and resending using blinded IDs in quotes * build: update build number
This commit is contained in:
@@ -51,31 +51,31 @@ class GroupMemberDatabase(context: Context, helper: SQLCipherOpenHelper) : Datab
|
||||
return mappings.map { it.role }
|
||||
}
|
||||
|
||||
fun addGroupMember(member: GroupMember) {
|
||||
fun setGroupMembers(members: List<GroupMember>) {
|
||||
writableDatabase.beginTransaction()
|
||||
try {
|
||||
val values = ContentValues().apply {
|
||||
put(GROUP_ID, member.groupId)
|
||||
put(PROFILE_ID, member.profileId)
|
||||
put(ROLE, member.role.name)
|
||||
val grouped = members.groupBy { it.role }
|
||||
grouped.forEach { (role, members) ->
|
||||
if (members.isEmpty()) return@forEach
|
||||
|
||||
val toDeleteQuery = "$GROUP_ID = ? AND $ROLE = ?"
|
||||
val toDeleteArgs = arrayOf(members.first().groupId, role.name)
|
||||
|
||||
writableDatabase.delete(TABLE_NAME, toDeleteQuery, toDeleteArgs)
|
||||
|
||||
members.forEach { member ->
|
||||
val values = ContentValues().apply {
|
||||
put(GROUP_ID, member.groupId)
|
||||
put(PROFILE_ID, member.profileId)
|
||||
put(ROLE, member.role.name)
|
||||
}
|
||||
val query = "$GROUP_ID = ? AND $PROFILE_ID = ?"
|
||||
val args = arrayOf(member.groupId, member.profileId)
|
||||
|
||||
writableDatabase.insertOrUpdate(TABLE_NAME, values, query, args)
|
||||
}
|
||||
writableDatabase.setTransactionSuccessful()
|
||||
}
|
||||
val query = "$GROUP_ID = ? AND $PROFILE_ID = ?"
|
||||
val args = arrayOf(member.groupId, member.profileId)
|
||||
|
||||
writableDatabase.insertOrUpdate(TABLE_NAME, values, query, args)
|
||||
writableDatabase.setTransactionSuccessful()
|
||||
} finally {
|
||||
writableDatabase.endTransaction()
|
||||
}
|
||||
}
|
||||
|
||||
fun clearGroupMemberRoles(groupId: String) {
|
||||
writableDatabase.beginTransaction()
|
||||
try {
|
||||
val query = "$GROUP_ID = ?"
|
||||
val args = arrayOf(groupId)
|
||||
writableDatabase.delete(TABLE_NAME, query, args)
|
||||
writableDatabase.setTransactionSuccessful()
|
||||
} finally {
|
||||
writableDatabase.endTransaction()
|
||||
}
|
||||
|
||||
@@ -319,12 +319,8 @@ class Storage(context: Context, helper: SQLCipherOpenHelper) : Database(context,
|
||||
return getAllOpenGroups().values.firstOrNull { it.server == server && it.room == room }
|
||||
}
|
||||
|
||||
override fun clearGroupMemberRoles(groupId: String) {
|
||||
DatabaseComponent.get(context).groupMemberDatabase().clearGroupMemberRoles(groupId)
|
||||
}
|
||||
|
||||
override fun addGroupMemberRole(member: GroupMember) {
|
||||
DatabaseComponent.get(context).groupMemberDatabase().addGroupMember(member)
|
||||
override fun setGroupMemberRoles(members: List<GroupMember>) {
|
||||
DatabaseComponent.get(context).groupMemberDatabase().setGroupMembers(members)
|
||||
}
|
||||
|
||||
override fun isDuplicateMessage(timestamp: Long): Boolean {
|
||||
|
||||
Reference in New Issue
Block a user