From 5afaa1564998fc6c964c4bdc6a384293451f2c3b Mon Sep 17 00:00:00 2001 From: Nils Stinnesbeck Date: Tue, 20 Oct 2026 20:01:35 +0200 Subject: [PATCH] Disable 'Search now' when nothing will be monitored Co-Authored-By: Claude Sonnet 5.5 --- internal/ui/search.go | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/internal/ui/search.go b/internal/ui/search.go index 7225d8f..022e7a0 100644 --- a/internal/ui/search.go +++ b/internal/ui/search.go @@ -13,6 +13,7 @@ import ( "git.stinnesbeck.com/nils/arr-tui/internal/arr" "git.stinnesbeck.com/nils/arr-tui/internal/config" + "git.stinnesbeck.com/nils/arr-tui/internal/sonarr" ) const ( @@ -310,12 +311,42 @@ func (v *searchView) add(i int) { } form.AddCheckbox(lMonitor, true, nil).AddCheckbox(lSearch, true, nil) + // Radarr and Sonarr skip unmonitored items in an automatic search, so + // "Search now" only makes sense when something will be monitored. + monitored := form.GetFormItemByLabel(lMonitor).(*tview.Checkbox) + searchNow := form.GetFormItemByLabel(lSearch).(*tview.Checkbox) + wantSearch := true + searchable := func() bool { + if !monitored.IsChecked() { + return false + } + return len(modes) == 0 || modes[selected(form, lEpisode)].value != sonarr.MonitorNone + } + syncSearch := func() { + if searchable() { + searchNow.SetDisabled(false) + searchNow.SetChecked(wantSearch) + return + } + searchNow.SetDisabled(true) + searchNow.SetChecked(false) + } + searchNow.SetChangedFunc(func(checked bool) { + if searchable() { + wantSearch = checked + } + }) + monitored.SetChangedFunc(func(bool) { syncSearch() }) + if len(modes) > 0 { + form.GetFormItemByLabel(lEpisode).(*tview.DropDown).SetSelectedFunc(func(string, int) { syncSearch() }) + } + form.AddButton("Add", func() { choice := addChoice{ profileID: profiles[selected(form, lProfile)].ID, folder: folders[selected(form, lFolder)].Path, - monitored: form.GetFormItemByLabel(lMonitor).(*tview.Checkbox).IsChecked(), - searchNow: form.GetFormItemByLabel(lSearch).(*tview.Checkbox).IsChecked(), + monitored: monitored.IsChecked(), + searchNow: searchNow.IsChecked() && searchable(), } if len(modes) > 0 { choice.monitor = modes[selected(form, lEpisode)].value