fix: Prevent IndexError when navigating during async archive operations

Clamp current_index to valid range in find_prev_valid_id and
find_next_valid_id to handle race condition where user navigates
while envelope list is being refreshed after archiving.
This commit is contained in:
Bendt
2026-01-02 12:12:56 -05:00
parent b52a06f2cf
commit c71c506b84

View File

@@ -83,7 +83,17 @@ class MessageStore:
self, current_index: int self, current_index: int
) -> Tuple[Optional[int], Optional[int]]: ) -> Tuple[Optional[int], Optional[int]]:
"""Find the next valid message ID and its index""" """Find the next valid message ID and its index"""
if not self.envelopes or current_index >= len(self.envelopes) - 1: if not self.envelopes:
return None, None
# Clamp current_index to valid range in case list shrunk during async operations
if current_index >= len(self.envelopes):
current_index = len(self.envelopes) - 1
if current_index < 0:
current_index = 0
# If already at or past the end, no next item
if current_index >= len(self.envelopes) - 1:
return None, None return None, None
# Start from current index + 1 # Start from current index + 1
@@ -99,7 +109,17 @@ class MessageStore:
self, current_index: int self, current_index: int
) -> Tuple[Optional[int], Optional[int]]: ) -> Tuple[Optional[int], Optional[int]]:
"""Find the previous valid message ID and its index""" """Find the previous valid message ID and its index"""
if not self.envelopes or current_index <= 0: if not self.envelopes:
return None, None
# Clamp current_index to valid range in case list shrunk during async operations
if current_index >= len(self.envelopes):
current_index = len(self.envelopes) - 1
if current_index < 0:
current_index = 0
# If at the beginning, no previous item
if current_index <= 0:
return None, None return None, None
# Start from current index - 1 # Start from current index - 1