refactor(chat): extract pure cursorAfterDelete helper

This commit is contained in:
ayn2op 2026-05-21 20:35:37 -04:00
parent 5bcd124361
commit bcac58c7cf

View file

@ -148,24 +148,26 @@ func (m *Model) onMessageDelete(message *gateway.MessageDeleteEvent) {
m.messagesList.deleteMessage(deletedIndex)
// Keep the cursor on the same logical item after removal.
newCursor := prevCursor
switch {
case prevCursor > deletedIndex:
// The list shrank before the cursor, so shift back.
newCursor = prevCursor - 1
case prevCursor == deletedIndex:
// Prefer the previous item; fall forward if we deleted the first.
newCursor = deletedIndex - 1
if newCursor < 0 {
newCursor = min(deletedIndex, len(m.messagesList.messages)-1)
}
}
newCursor := cursorAfterDelete(prevCursor, deletedIndex, len(m.messagesList.messages))
if newCursor != prevCursor {
m.messagesList.SetCursor(newCursor)
}
}
func cursorAfterDelete(prevCursor, deletedIndex, remaining int) int {
switch {
case prevCursor > deletedIndex:
return prevCursor - 1
case prevCursor == deletedIndex:
if prev := deletedIndex - 1; prev >= 0 {
return prev
}
return min(deletedIndex, remaining-1)
default:
return prevCursor
}
}
func (m *Model) onGuildMembersChunk(event *gateway.GuildMembersChunkEvent) {
m.messagesList.setFetchingChunk(false, uint(len(event.Members)))
}