@ -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 query = " $GROUP _ID = ? AND $PROFILE _ID = ? "
val args = arrayOf ( member . groupId , member . profileId )
val grouped = members . groupBy { it . role }
grouped . forEach { ( role , members ) ->
if ( members . isEmpty ( ) ) return @forEach
writableDatabase . insertOrUpdate ( TABLE _NAME , values , query , args )
writableDatabase . setTransactionSuccessful ( )
} finally {
writableDatabase . endTransaction ( )
}
}
val toDeleteQuery = " $GROUP _ID = ? AND $ROLE = ? "
val toDeleteArgs = arrayOf ( members . first ( ) . groupId , role . name )
fun clearGroupMemberRoles ( groupId : String ) {
writableDatabase . beginTransaction ( )
try {
val query = " $GROUP _ID = ? "
val args = arrayOf ( groupId )
writableDatabase . delete ( TABLE _NAME , query , args )
writableDatabase . setTransactionSuccessful ( )
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 ( )
}
} finally {
writableDatabase . endTransaction ( )
}