(msg tea.KeyPressMsg)
| 92 | } |
| 93 | |
| 94 | func (m RootModel) updateCategoryManager(msg tea.KeyPressMsg) (tea.Model, tea.Cmd) { |
| 95 | m.normalizeCategoryManagerSelection() |
| 96 | cats := m.Settings.Categories.Categories |
| 97 | |
| 98 | // Handle editing mode |
| 99 | if m.catMgrEditing { |
| 100 | if key.Matches(msg, m.keys.CategoryMgr.Close) { |
| 101 | wasNew := m.catMgrIsNew |
| 102 | // Cancel editing |
| 103 | m.catMgrEditing = false |
| 104 | m.blurAllCatInputs() |
| 105 | |
| 106 | // If was adding new, remove the placeholder |
| 107 | if wasNew && m.catMgrCursor < len(m.Settings.Categories.Categories) { |
| 108 | m.Settings.Categories.Categories = append( |
| 109 | m.Settings.Categories.Categories[:m.catMgrCursor], |
| 110 | m.Settings.Categories.Categories[m.catMgrCursor+1:]..., |
| 111 | ) |
| 112 | if m.catMgrCursor > 0 { |
| 113 | m.catMgrCursor-- |
| 114 | } |
| 115 | } |
| 116 | m.catMgrIsNew = false |
| 117 | m.catMgrError = "" |
| 118 | return m, nil |
| 119 | } |
| 120 | if key.Matches(msg, m.keys.CategoryMgr.Tab) { |
| 121 | m.catMgrError = "" |
| 122 | // On Path field, open file picker for directory browsing |
| 123 | if m.catMgrEditField == 3 { |
| 124 | originalPath := m.catMgrInputs[3].Value() |
| 125 | browseDir := strings.TrimSpace(originalPath) |
| 126 | if browseDir == "" { |
| 127 | browseDir = config.Resolve[string](m.Settings.General.DefaultDownloadDir) |
| 128 | } |
| 129 | if browseDir == "" { |
| 130 | browseDir = m.PWD |
| 131 | } |
| 132 | return m, m.openDirectoryPicker(FilePickerOriginCategory, originalPath, browseDir, false, true) |
| 133 | } |
| 134 | // Cycle fields |
| 135 | m.catMgrInputs[m.catMgrEditField].Blur() |
| 136 | m.catMgrEditField = (m.catMgrEditField + 1) % 4 |
| 137 | m.catMgrInputs[m.catMgrEditField].Focus() |
| 138 | return m, nil |
| 139 | } |
| 140 | if key.Matches(msg, m.keys.CategoryMgr.Up) { |
| 141 | m.catMgrError = "" |
| 142 | m.catMgrInputs[m.catMgrEditField].Blur() |
| 143 | m.catMgrEditField-- |
| 144 | if m.catMgrEditField < 0 { |
| 145 | m.catMgrEditField = 3 |
| 146 | } |
| 147 | m.catMgrInputs[m.catMgrEditField].Focus() |
| 148 | return m, nil |
| 149 | } |
| 150 | if key.Matches(msg, m.keys.CategoryMgr.Down) { |
| 151 | m.catMgrError = "" |
no test coverage detected