Library: keep the place after removing a title
The list is reloaded after a removal and the selection follows the selected title by id; the removed title is gone, so it fell back to the top. Now a title that has left the library hands its row to the one that moved up into it (or the new last one). A title that is only filtered out still starts the list from the top. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019reK4DUGYqDUjniWYJvwUW
This commit is contained in:
@@ -209,3 +209,51 @@ func TestListedValues(t *testing.T) {
|
||||
t.Errorf("empty pool: %v", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRemovingATitleKeepsThePlace(t *testing.T) {
|
||||
a := newTestApp(t)
|
||||
v := newLibraryView(a, a.radarr, a.sonarr)
|
||||
p := v.panes[0]
|
||||
items := func(ids ...int) []libItem {
|
||||
var out []libItem
|
||||
for _, id := range ids {
|
||||
out = append(out, libItem{id: id, title: string(rune('A' + id)), label: string(rune('A' + id))})
|
||||
}
|
||||
return out
|
||||
}
|
||||
selectedID := func() int {
|
||||
r, _ := p.table.GetSelection()
|
||||
return p.shown[r-1].id
|
||||
}
|
||||
p.all, p.loaded = items(1, 2, 3, 4, 5), true
|
||||
v.renderPane(p)
|
||||
|
||||
// Remove the third title: the fourth moves up into its place and is selected.
|
||||
p.table.Select(3, 0)
|
||||
p.all = items(1, 2, 4, 5)
|
||||
v.renderPane(p)
|
||||
if r, _ := p.table.GetSelection(); r != 3 || selectedID() != 4 {
|
||||
t.Errorf("after removing the third: row %d, title %d", r, selectedID())
|
||||
}
|
||||
// Remove the last title: the new last one is selected.
|
||||
p.table.Select(4, 0)
|
||||
p.all = items(1, 2, 4)
|
||||
v.renderPane(p)
|
||||
if r, _ := p.table.GetSelection(); r != 3 || selectedID() != 4 {
|
||||
t.Errorf("after removing the last: row %d, title %d", r, selectedID())
|
||||
}
|
||||
// A reload that keeps the title keeps it selected, wherever it is now.
|
||||
p.table.Select(2, 0) // title 2
|
||||
p.all = items(0, 1, 2, 4)
|
||||
v.renderPane(p)
|
||||
if selectedID() != 2 {
|
||||
t.Errorf("kept title not followed: %d", selectedID())
|
||||
}
|
||||
// A title that is only filtered out still starts the list from the top.
|
||||
p.table.Select(4, 0) // title 4
|
||||
p.text = "B" // title 1 only: 4 is filtered out, not removed
|
||||
v.renderPane(p)
|
||||
if r, _ := p.table.GetSelection(); r != 1 {
|
||||
t.Errorf("filtered out: row %d, want the top", r)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user