When reporting a user, use the membership state eventId for the eventId.

This commit is contained in:
Benoit Marty 2024-04-02 20:45:46 +02:00 committed by Benoit Marty
parent c2b46a1c1e
commit 6cd9e6eedd
2 changed files with 26 additions and 6 deletions

View File

@ -766,7 +766,7 @@ class TimelineViewModel @AssistedInject constructor(
}
fun getRoom(roomId: String): RoomSummary? =
session.roomService().getRoomSummary(roomId)
session.roomService().getRoomSummary(roomId)
private fun handleComposerFocusChange(action: RoomDetailAction.ComposerFocusChange) {
if (room == null) return
@ -1147,7 +1147,22 @@ class TimelineViewModel @AssistedInject constructor(
if (room == null) return
viewModelScope.launch {
val event = try {
room.reportingService().reportContent(action.eventId, -100, action.reason)
if (action.user && action.senderId != null) {
// When reporting a user, use the user state event if available (it should always be available)
val userStateEventId = room.stateService()
.getStateEvent(EventType.STATE_ROOM_MEMBER, QueryStringValue.Equals(action.senderId))
?.eventId
// If not found fallback to the provided event
val eventId = userStateEventId ?: action.eventId
room.reportingService()
.reportContent(
eventId = eventId,
score = -100,
reason = action.reason
)
} else {
room.reportingService().reportContent(action.eventId, -100, action.reason)
}
RoomDetailViewEvents.ActionSuccess(action)
} catch (failure: Throwable) {
RoomDetailViewEvents.ActionFailure(action, failure)

View File

@ -174,15 +174,20 @@ class RoomMemberProfileViewModel @AssistedInject constructor(
}
private fun handleReportAction() {
room ?: return
viewModelScope.launch {
val event = try {
// The API need an Event, use the latest Event.
val latestEventId = room?.roomSummary()?.latestPreviewableEvent?.eventId ?: return@launch
// The API needs an Event, use user state event if available (it should always be available)
val userStateEventId = room.stateService()
.getStateEvent(EventType.STATE_ROOM_MEMBER, QueryStringValue.Equals(initialState.userId))
?.eventId
// If not found fallback to the latest event
val eventId = (userStateEventId ?: room.roomSummary()?.latestPreviewableEvent?.eventId) ?: return@launch
room.reportingService()
.reportContent(
eventId = latestEventId,
eventId = eventId,
score = -100,
reason = "Reporting user ${initialState.userId} (eventId is not relevant)"
reason = "Reporting user ${initialState.userId}"
)
RoomMemberProfileViewEvents.OnReportActionSuccess
} catch (failure: Throwable) {